Skip to content
Projects
Groups
Snippets
Help
This project
Loading...
Sign in / Register
Toggle navigation
H
haoban-manage3.0
Overview
Overview
Details
Activity
Cycle Analytics
Repository
Repository
Files
Commits
Branches
Tags
Contributors
Graph
Compare
Charts
Issues
0
Issues
0
List
Board
Labels
Milestones
Merge Requests
0
Merge Requests
0
CI / CD
CI / CD
Pipelines
Jobs
Schedules
Charts
Wiki
Wiki
Snippets
Snippets
Members
Members
Collapse sidebar
Close sidebar
Activity
Graph
Charts
Create a new issue
Jobs
Commits
Issue Boards
Open sidebar
haoban3.0
haoban-manage3.0
Commits
305146d3
Commit
305146d3
authored
Mar 21, 2023
by
songyinghui
Browse files
Options
Browse Files
Download
Email Patches
Plain Diff
feat: 素材分享日志 及客户触达日志
parent
29e4d6bc
Hide whitespace changes
Inline
Side-by-side
Showing
28 changed files
with
939 additions
and
43 deletions
+939
-43
ClerkShareMaterialLogDTO.java
.../manage/api/dto/content/log/ClerkShareMaterialLogDTO.java
+14
-0
TriggerCustomerDetailLogDTO.java
...nage/api/dto/content/log/TriggerCustomerDetailLogDTO.java
+98
-0
TriggerCustomerChannelType.java
.../manage/api/enums/content/TriggerCustomerChannelType.java
+1
-1
QywxGroupMsgTaskApiService.java
.../api/service/content/task/QywxGroupMsgTaskApiService.java
+7
-0
TabHaobanExternalClerkRelatedMapper.java
...rvice/dao/mapper/TabHaobanExternalClerkRelatedMapper.java
+6
-0
GroupChatUserMapper.java
...n/manage/service/dao/mapper/chat/GroupChatUserMapper.java
+9
-0
TabHaobanClerkShareLogMapper.java
...vice/dao/mapper/content/TabHaobanClerkShareLogMapper.java
+8
-0
GroupChatUserBO.java
...c/haoban/manage/service/pojo/bo/chat/GroupChatUserBO.java
+70
-0
ClerkShareLogBO.java
...aoban/manage/service/pojo/bo/content/ClerkShareLogBO.java
+25
-0
GroupMessageInfoBo.java
...an/manage/service/pojo/bo/content/GroupMessageInfoBo.java
+13
-0
GroupChatUserQO.java
...c/haoban/manage/service/pojo/qo/chat/GroupChatUserQO.java
+42
-0
ClerkShareLogQO.java
...aoban/manage/service/pojo/qo/content/ClerkShareLogQO.java
+14
-0
ExternalClerkRelatedService.java
...n/manage/service/service/ExternalClerkRelatedService.java
+7
-0
StaffService.java
...a/com/gic/haoban/manage/service/service/StaffService.java
+7
-1
GroupChatUserService.java
...ban/manage/service/service/chat/GroupChatUserService.java
+9
-1
GroupChatUserServiceImpl.java
...e/service/service/chat/impl/GroupChatUserServiceImpl.java
+34
-0
ClerkShareLogService.java
.../manage/service/service/content/ClerkShareLogService.java
+5
-0
ClerkShareLogServiceImpl.java
...ervice/service/content/impl/ClerkShareLogServiceImpl.java
+16
-0
GroupMessageServiceImpl.java
...service/service/content/impl/GroupMessageServiceImpl.java
+342
-37
ExternalClerkRelatedServiceImpl.java
...service/service/impl/ExternalClerkRelatedServiceImpl.java
+11
-0
StaffServiceImpl.java
.../haoban/manage/service/service/impl/StaffServiceImpl.java
+17
-1
MaterialShareLogApiServiceImpl.java
...vice/out/impl/content/MaterialShareLogApiServiceImpl.java
+25
-0
QywxGroupMsgTaskApiServiceImpl.java
...out/impl/content/task/QywxGroupMsgTaskApiServiceImpl.java
+49
-1
TabHaobanExternalClerkRelatedMapper.xml
.../resources/mapper/TabHaobanExternalClerkRelatedMapper.xml
+7
-0
GroupChatUserMapper.xml
...ce/src/main/resources/mapper/chat/GroupChatUserMapper.xml
+18
-0
TabHaobanClerkShareLogDao.xml
...in/resources/mapper/content/TabHaobanClerkShareLogDao.xml
+11
-1
GroupMessageServiceTest.java
...anage3-service/src/test/java/GroupMessageServiceTest.java
+73
-0
ClerkMaterialShareController.java
.../web/controller/content/ClerkMaterialShareController.java
+1
-0
No files found.
haoban-manage3-api/src/main/java/com/gic/haoban/manage/api/dto/content/log/ClerkShareMaterialLogDTO.java
View file @
305146d3
...
...
@@ -17,6 +17,12 @@ public class ClerkShareMaterialLogDTO implements Serializable {
*/
private
String
enterpriseId
;
/**
* 微信企业id
*/
private
String
wxEnterpriseId
;
/**
* 导购id
*/
...
...
@@ -91,4 +97,12 @@ public class ClerkShareMaterialLogDTO implements Serializable {
public
void
setBizType
(
Integer
bizType
)
{
this
.
bizType
=
bizType
;
}
public
String
getWxEnterpriseId
()
{
return
wxEnterpriseId
;
}
public
void
setWxEnterpriseId
(
String
wxEnterpriseId
)
{
this
.
wxEnterpriseId
=
wxEnterpriseId
;
}
}
haoban-manage3-api/src/main/java/com/gic/haoban/manage/api/dto/content/log/TriggerCustomerDetailLogDTO.java
0 → 100644
View file @
305146d3
package
com
.
gic
.
haoban
.
manage
.
api
.
dto
.
content
.
log
;
import
com.tencentcloudapi.vpc.v20170312.models.LocalGateway
;
import
java.io.Serializable
;
/**
* @Author MUSI
* @Date 2023/3/20 4:27 PM
* @Description
* @Version
**/
public
class
TriggerCustomerDetailLogDTO
implements
Serializable
{
private
static
final
long
serialVersionUID
=
-
5149812263567137819L
;
/**
* 微信企业id
*/
private
String
wxEnterpriseId
;
/**
* 企业id
*/
private
String
enterpriseId
;
/**
* 导购id
*/
private
String
clerkId
;
/**
* 类型
*
* @see com.gic.haoban.manage.api.enums.content.TriggerCustomerChannelType
*/
private
Integer
shareType
;
/**
* 分享到朋友圈
*/
private
SharePYQ
sharePYQ
;
public
static
class
SharePYQ
implements
Serializable
{
private
static
final
long
serialVersionUID
=
273212828851672738L
;
/**
* 导购分享日志id
*/
private
Long
shareLogId
;
public
Long
getShareLogId
()
{
return
shareLogId
;
}
public
void
setShareLogId
(
Long
shareLogId
)
{
this
.
shareLogId
=
shareLogId
;
}
}
public
String
getWxEnterpriseId
()
{
return
wxEnterpriseId
;
}
public
void
setWxEnterpriseId
(
String
wxEnterpriseId
)
{
this
.
wxEnterpriseId
=
wxEnterpriseId
;
}
public
String
getEnterpriseId
()
{
return
enterpriseId
;
}
public
void
setEnterpriseId
(
String
enterpriseId
)
{
this
.
enterpriseId
=
enterpriseId
;
}
public
String
getClerkId
()
{
return
clerkId
;
}
public
void
setClerkId
(
String
clerkId
)
{
this
.
clerkId
=
clerkId
;
}
public
Integer
getShareType
()
{
return
shareType
;
}
public
void
setShareType
(
Integer
shareType
)
{
this
.
shareType
=
shareType
;
}
public
SharePYQ
getSharePYQ
()
{
return
sharePYQ
;
}
public
void
setSharePYQ
(
SharePYQ
sharePYQ
)
{
this
.
sharePYQ
=
sharePYQ
;
}
}
haoban-manage3-api/src/main/java/com/gic/haoban/manage/api/enums/content/TriggerCustomerChannelType.java
View file @
305146d3
...
...
@@ -11,7 +11,7 @@ public enum TriggerCustomerChannelType {
PYQ
(
1
,
"朋友圈"
),
CUSTOMER_GROUP
(
2
,
"客户群"
),
DIALOG_BOX
(
3
,
"对话框"
),
DIALOG_BOX
(
3
,
"对话框
/群发给客户
"
),
CONTENT_COPY
(
4
,
"复制文案"
),
CONTENT_DOWNLOAD
(
5
,
"下载素材"
)
;
...
...
haoban-manage3-api/src/main/java/com/gic/haoban/manage/api/service/content/task/QywxGroupMsgTaskApiService.java
View file @
305146d3
...
...
@@ -19,4 +19,11 @@ public interface QywxGroupMsgTaskApiService {
* @return
*/
ServiceResponse
<
Void
>
groupMsgTaskJob
(
String
params
);
/**
* 处理客户触达日志明细
* @param params
* @return
*/
ServiceResponse
<
Void
>
handlerTriggerCustomerDetailLog
(
String
params
);
}
haoban-manage3-service/src/main/java/com/gic/haoban/manage/service/dao/mapper/TabHaobanExternalClerkRelatedMapper.java
View file @
305146d3
...
...
@@ -389,4 +389,9 @@ public interface TabHaobanExternalClerkRelatedMapper {
TabHaobanExternalClerkRelated
getMemberForExternalId
(
@Param
(
"wxEnterpriseId"
)
String
wxEnterpriseId
,
@Param
(
"externalUserId"
)
String
externalUserId
);
/**
* 查询成员的好友列表
*/
List
<
String
>
queryExternalUserIdWithStaffId
(
@Param
(
"staffId"
)
String
staffId
);
}
\ No newline at end of file
haoban-manage3-service/src/main/java/com/gic/haoban/manage/service/dao/mapper/chat/GroupChatUserMapper.java
View file @
305146d3
...
...
@@ -2,6 +2,7 @@ package com.gic.haoban.manage.service.dao.mapper.chat;
import
java.util.List
;
import
com.gic.haoban.manage.service.pojo.qo.chat.GroupChatUserQO
;
import
org.apache.ibatis.annotations.Param
;
import
com.gic.haoban.manage.api.dto.chat.GroupChatUserDTO
;
...
...
@@ -55,4 +56,11 @@ public interface GroupChatUserMapper {
@Param
(
"enterpriseId"
)
String
enterpriseId
,
@Param
(
"externalUserid"
)
String
externalUserid
,
@Param
(
"memberId"
)
String
memberId
);
/**
* 查询群组成员列表
* @param groupChatUserQO
* @return
*/
List
<
TabGroupChatUser
>
queryGroupChatUserList
(
GroupChatUserQO
groupChatUserQO
);
}
\ No newline at end of file
haoban-manage3-service/src/main/java/com/gic/haoban/manage/service/dao/mapper/content/TabHaobanClerkShareLogMapper.java
View file @
305146d3
...
...
@@ -79,5 +79,13 @@ public interface TabHaobanClerkShareLogMapper {
*/
int
deleteById
(
Long
id
);
/**
* 标记分享日志为已处理
* @param enterpriseId
* @param ids
* @return
*/
int
markShareLogWithDone
(
@Param
(
"enterpriseId"
)
String
enterpriseId
,
@Param
(
"ids"
)
List
<
Long
>
ids
);
}
haoban-manage3-service/src/main/java/com/gic/haoban/manage/service/pojo/bo/chat/GroupChatUserBO.java
0 → 100644
View file @
305146d3
package
com
.
gic
.
haoban
.
manage
.
service
.
pojo
.
bo
.
chat
;
/**
* @Author MUSI
* @Date 2023/3/20 8:00 PM
* @Description
* @Version
**/
public
class
GroupChatUserBO
{
private
Long
chatUserId
;
/**微信企业id*/
private
String
wxEnterpriseId
;
private
String
enterpriseId
;
/**1企业成员2外部联系人3客户*/
private
Integer
userType
;
/**群成员id*/
private
String
userId
;
/**群id*/
private
Long
groupChatId
;
public
Long
getChatUserId
()
{
return
chatUserId
;
}
public
void
setChatUserId
(
Long
chatUserId
)
{
this
.
chatUserId
=
chatUserId
;
}
public
String
getWxEnterpriseId
()
{
return
wxEnterpriseId
;
}
public
void
setWxEnterpriseId
(
String
wxEnterpriseId
)
{
this
.
wxEnterpriseId
=
wxEnterpriseId
;
}
public
String
getEnterpriseId
()
{
return
enterpriseId
;
}
public
void
setEnterpriseId
(
String
enterpriseId
)
{
this
.
enterpriseId
=
enterpriseId
;
}
public
Integer
getUserType
()
{
return
userType
;
}
public
void
setUserType
(
Integer
userType
)
{
this
.
userType
=
userType
;
}
public
String
getUserId
()
{
return
userId
;
}
public
void
setUserId
(
String
userId
)
{
this
.
userId
=
userId
;
}
public
Long
getGroupChatId
()
{
return
groupChatId
;
}
public
void
setGroupChatId
(
Long
groupChatId
)
{
this
.
groupChatId
=
groupChatId
;
}
}
haoban-manage3-service/src/main/java/com/gic/haoban/manage/service/pojo/bo/content/ClerkShareLogBO.java
View file @
305146d3
package
com
.
gic
.
haoban
.
manage
.
service
.
pojo
.
bo
.
content
;
import
java.util.Date
;
/**
* @Author MUSI
* @Date 2023/3/18 9:02 PM
...
...
@@ -8,6 +10,8 @@ package com.gic.haoban.manage.service.pojo.bo.content;
**/
public
class
ClerkShareLogBO
{
private
Long
id
;
/**
* 企业id
*/
...
...
@@ -45,6 +49,11 @@ public class ClerkShareLogBO {
*/
private
Integer
bizType
;
/**
* 创建时间
*/
private
Date
createTime
;
public
String
getEnterpriseId
()
{
return
enterpriseId
;
}
...
...
@@ -100,4 +109,20 @@ public class ClerkShareLogBO {
public
void
setWxEnterpriseId
(
String
wxEnterpriseId
)
{
this
.
wxEnterpriseId
=
wxEnterpriseId
;
}
public
Date
getCreateTime
()
{
return
createTime
;
}
public
void
setCreateTime
(
Date
createTime
)
{
this
.
createTime
=
createTime
;
}
public
Long
getId
()
{
return
id
;
}
public
void
setId
(
Long
id
)
{
this
.
id
=
id
;
}
}
haoban-manage3-service/src/main/java/com/gic/haoban/manage/service/pojo/bo/content/GroupMessageInfoBo.java
View file @
305146d3
...
...
@@ -30,6 +30,11 @@ public class GroupMessageInfoBo {
*/
private
Date
endTime
;
/**
* 分享日志
*/
private
Long
shareLogId
;
public
String
getEnterpriseId
()
{
return
enterpriseId
;
}
...
...
@@ -61,4 +66,12 @@ public class GroupMessageInfoBo {
public
void
setWxEnterpriseId
(
String
wxEnterpriseId
)
{
this
.
wxEnterpriseId
=
wxEnterpriseId
;
}
public
Long
getShareLogId
()
{
return
shareLogId
;
}
public
void
setShareLogId
(
Long
shareLogId
)
{
this
.
shareLogId
=
shareLogId
;
}
}
haoban-manage3-service/src/main/java/com/gic/haoban/manage/service/pojo/qo/chat/GroupChatUserQO.java
0 → 100644
View file @
305146d3
package
com
.
gic
.
haoban
.
manage
.
service
.
pojo
.
qo
.
chat
;
import
com.gic.haoban.base.api.common.BasePageInfo
;
/**
* @Author MUSI
* @Date 2023/3/20 8:07 PM
* @Description
* @Version
**/
public
class
GroupChatUserQO
extends
BasePageInfo
{
private
String
wxEnterpriseId
;
private
String
enterpriseId
;
private
Long
chatId
;
public
String
getWxEnterpriseId
()
{
return
wxEnterpriseId
;
}
public
void
setWxEnterpriseId
(
String
wxEnterpriseId
)
{
this
.
wxEnterpriseId
=
wxEnterpriseId
;
}
public
String
getEnterpriseId
()
{
return
enterpriseId
;
}
public
void
setEnterpriseId
(
String
enterpriseId
)
{
this
.
enterpriseId
=
enterpriseId
;
}
public
Long
getChatId
()
{
return
chatId
;
}
public
void
setChatId
(
Long
chatId
)
{
this
.
chatId
=
chatId
;
}
}
haoban-manage3-service/src/main/java/com/gic/haoban/manage/service/pojo/qo/content/ClerkShareLogQO.java
View file @
305146d3
...
...
@@ -15,6 +15,11 @@ public class ClerkShareLogQO extends BasePageInfo {
private
static
final
long
serialVersionUID
=
-
2919045329617420361L
;
/**
* 分享日志id
*/
private
Long
shareLogId
;
/**
* 企业id
*/
private
String
enterpriseId
;
...
...
@@ -83,4 +88,13 @@ public class ClerkShareLogQO extends BasePageInfo {
this
.
clerkId
=
clerkId
;
return
this
;
}
public
Long
getShareLogId
()
{
return
shareLogId
;
}
public
ClerkShareLogQO
setShareLogId
(
Long
shareLogId
)
{
this
.
shareLogId
=
shareLogId
;
return
this
;
}
}
haoban-manage3-service/src/main/java/com/gic/haoban/manage/service/service/ExternalClerkRelatedService.java
View file @
305146d3
...
...
@@ -83,4 +83,11 @@ public interface ExternalClerkRelatedService {
void
updateClerkInfo
(
String
staffId
,
String
oldClerkId
,
String
newClerkId
);
/**
* 外部联系人
* @param staffId
* @return
*/
List
<
String
>
queryExternalRelatedWithStaffId
(
String
staffId
);
}
haoban-manage3-service/src/main/java/com/gic/haoban/manage/service/service/StaffService.java
View file @
305146d3
...
...
@@ -136,5 +136,11 @@ public interface StaffService {
Integer
getOccupyNum
(
String
wxEnterpriseId
);
/**
* 查询成员列表
* @param wxEnterpriseId
* @param staffIds
* @return
*/
List
<
TabHaobanStaff
>
listStaffWithIds
(
List
<
String
>
staffIds
);
}
haoban-manage3-service/src/main/java/com/gic/haoban/manage/service/service/chat/GroupChatUserService.java
View file @
305146d3
...
...
@@ -4,9 +4,16 @@ import com.gic.api.base.commons.BasePageInfo;
import
com.gic.api.base.commons.Page
;
import
com.gic.haoban.manage.api.dto.chat.GroupChatUserDTO
;
import
com.gic.haoban.manage.api.dto.qdto.chat.GroupChatUserSearchQDTO
;
import
com.gic.haoban.manage.service.pojo.bo.chat.GroupChatUserBO
;
import
java.util.List
;
public
interface
GroupChatUserService
{
Page
<
GroupChatUserDTO
>
listPage
(
GroupChatUserSearchQDTO
qdto
,
BasePageInfo
basePageInfo
);
/**
* 查询群组内群成员
*/
List
<
GroupChatUserBO
>
queryGroupMemberWithChatId
(
String
enterpriseId
,
String
wxEnterpriseId
,
Long
groupChatId
);
}
\ No newline at end of file
haoban-manage3-service/src/main/java/com/gic/haoban/manage/service/service/chat/impl/GroupChatUserServiceImpl.java
View file @
305146d3
package
com
.
gic
.
haoban
.
manage
.
service
.
service
.
chat
.
impl
;
import
java.util.Collections
;
import
java.util.List
;
import
java.util.stream.Collectors
;
import
com.gic.haoban.manage.service.entity.chat.TabGroupChatUser
;
import
com.gic.haoban.manage.service.pojo.bo.chat.GroupChatUserBO
;
import
com.gic.haoban.manage.service.pojo.qo.chat.GroupChatUserQO
;
import
org.apache.commons.collections.CollectionUtils
;
import
org.apache.commons.lang3.StringUtils
;
import
org.springframework.beans.BeanUtils
;
import
org.springframework.beans.factory.annotation.Autowired
;
import
org.springframework.stereotype.Service
;
...
...
@@ -34,4 +41,30 @@ public class GroupChatUserServiceImpl implements GroupChatUserService {
return
retPage
;
}
/**
* 查询群组内群成员
*
* @param enterpriseId
* @param wxEnterpriseId
* @param groupChatId
*/
@Override
public
List
<
GroupChatUserBO
>
queryGroupMemberWithChatId
(
String
enterpriseId
,
String
wxEnterpriseId
,
Long
groupChatId
)
{
GroupChatUserQO
search
=
new
GroupChatUserQO
();
search
.
setChatId
(
groupChatId
);
search
.
setEnterpriseId
(
enterpriseId
);
search
.
setWxEnterpriseId
(
wxEnterpriseId
);
List
<
TabGroupChatUser
>
tabGroupChatUsers
=
groupChatUserMapper
.
queryGroupChatUserList
(
search
);
if
(
CollectionUtils
.
isEmpty
(
tabGroupChatUsers
))
{
return
Collections
.
emptyList
();
}
return
tabGroupChatUsers
.
stream
()
.
map
(
item
->
{
GroupChatUserBO
temp
=
new
GroupChatUserBO
();
BeanUtils
.
copyProperties
(
item
,
temp
);
return
temp
;
})
.
collect
(
Collectors
.
toList
());
}
}
\ No newline at end of file
haoban-manage3-service/src/main/java/com/gic/haoban/manage/service/service/content/ClerkShareLogService.java
View file @
305146d3
...
...
@@ -26,4 +26,9 @@ public interface ClerkShareLogService {
* @return
*/
List
<
ClerkShareLogBO
>
queryClerkShareLog
(
ClerkShareLogQO
clerkShareLogQO
);
/**
* 标记分享日志已处理
*/
void
markClerkShareDone
(
String
enterpriseId
,
List
<
Long
>
ids
);
}
haoban-manage3-service/src/main/java/com/gic/haoban/manage/service/service/content/impl/ClerkShareLogServiceImpl.java
View file @
305146d3
...
...
@@ -7,7 +7,9 @@ import com.gic.haoban.manage.service.entity.content.TabHaobanClerkShareLog;
import
com.gic.haoban.manage.service.pojo.bo.content.ClerkShareLogBO
;
import
com.gic.haoban.manage.service.pojo.qo.content.ClerkShareLogQO
;
import
com.gic.haoban.manage.service.service.content.ClerkShareLogService
;
import
jdk.nashorn.internal.runtime.regexp.joni.ast.StringNode
;
import
org.apache.commons.collections.CollectionUtils
;
import
org.apache.commons.lang3.StringUtils
;
import
org.slf4j.Logger
;
import
org.slf4j.LoggerFactory
;
import
org.springframework.beans.BeanUtils
;
...
...
@@ -69,4 +71,18 @@ public class ClerkShareLogServiceImpl implements ClerkShareLogService {
})
.
collect
(
Collectors
.
toList
());
}
/**
* 标记分享日志已处理
*
* @param enterpriseId
* @param ids
*/
@Override
public
void
markClerkShareDone
(
String
enterpriseId
,
List
<
Long
>
ids
)
{
if
(
StringUtils
.
isBlank
(
enterpriseId
)
||
CollectionUtils
.
isEmpty
(
ids
))
{
return
;
}
clerkShareLogMapper
.
markShareLogWithDone
(
enterpriseId
,
ids
);
}
}
haoban-manage3-service/src/main/java/com/gic/haoban/manage/service/service/content/impl/GroupMessageServiceImpl.java
View file @
305146d3
...
...
@@ -3,15 +3,22 @@ package com.gic.haoban.manage.service.service.content.impl;
import
com.alibaba.fastjson.JSON
;
import
com.gic.api.base.commons.ServiceResponse
;
import
com.gic.commons.util.UniqueIdUtils
;
import
com.gic.haoban.common.utils.StringUtil
;
import
com.gic.haoban.manage.api.dto.WxEnterpriseQwDTO
;
import
com.gic.haoban.manage.api.enums.content.ClerkShareMaterialType
;
import
com.gic.haoban.manage.api.enums.content.ShareBizType
;
import
com.gic.haoban.manage.service.config.Config
;
import
com.gic.haoban.manage.service.entity.TabHaobanStaff
;
import
com.gic.haoban.manage.service.pojo.bo.chat.GroupChatBO
;
import
com.gic.haoban.manage.service.pojo.bo.chat.GroupChatUserBO
;
import
com.gic.haoban.manage.service.pojo.bo.content.ClerkShareLogBO
;
import
com.gic.haoban.manage.service.pojo.bo.content.GroupMessageInfoBo
;
import
com.gic.haoban.manage.service.pojo.bo.content.TriggerCustomerDetailBO
;
import
com.gic.haoban.manage.service.pojo.qo.content.ClerkShareLogQO
;
import
com.gic.haoban.manage.service.pojo.qo.content.TriggerCustomerDetailQO
;
import
com.gic.haoban.manage.service.service.ExternalClerkRelatedService
;
import
com.gic.haoban.manage.service.service.StaffService
;
import
com.gic.haoban.manage.service.service.WxEnterpriseService
;
import
com.gic.haoban.manage.service.service.chat.GroupChatService
;
import
com.gic.haoban.manage.service.service.chat.GroupChatUserService
;
import
com.gic.haoban.manage.service.service.content.ClerkShareLogService
;
import
com.gic.haoban.manage.service.service.content.GroupMessageService
;
import
com.gic.haoban.manage.service.service.content.TriggerCustomerDetailService
;
...
...
@@ -32,6 +39,9 @@ import java.util.ArrayList;
import
java.util.Collections
;
import
java.util.Date
;
import
java.util.List
;
import
java.util.Map
;
import
java.util.Optional
;
import
java.util.function.Function
;
import
java.util.stream.Collectors
;
/**
...
...
@@ -72,9 +82,19 @@ public class GroupMessageServiceImpl implements GroupMessageService {
private
QywxSuiteApiService
qywxSuiteApiService
;
@Autowired
private
ClerkShareLogService
clerkShareLogService
;
@Autowired
private
WxEnterpriseService
wxEnterpriseService
;
@Autowired
private
GroupChatUserService
groupChatUserService
;
@Autowired
private
GroupChatService
groupChatService
;
@Autowired
private
Config
config
;
@Autowired
private
StaffService
staffService
;
@Autowired
private
ExternalClerkRelatedService
externalClerkRelatedService
;
@Override
public
void
handlerGroupMessage
(
GroupMessageInfoBo
groupMessageInfoBo
)
{
...
...
@@ -83,28 +103,281 @@ public class GroupMessageServiceImpl implements GroupMessageService {
.
setEnterpriseId
(
groupMessageInfoBo
.
getEnterpriseId
())
.
setStartTime
(
groupMessageInfoBo
.
getStartTime
())
.
setEndTime
(
groupMessageInfoBo
.
getEndTime
())
.
setBizType
(
ShareBizType
.
MATERIAL
.
getCode
());
.
setBizType
(
ShareBizType
.
MATERIAL
.
getCode
())
.
setShareLogId
(
groupMessageInfoBo
.
getShareLogId
());
List
<
ClerkShareLogBO
>
shareLogBos
=
clerkShareLogService
.
queryClerkShareLog
(
clerkShareLogQO
);
if
(
CollectionUtils
.
isEmpty
(
shareLogBos
))
{
log
.
info
(
"时间段内没有导购分享记录 {}"
,
JSON
.
toJSONString
(
groupMessageInfoBo
));
return
;
}
Map
<
String
,
List
<
ClerkShareLogBO
>>
wxEnterpriseIdMap
=
shareLogBos
.
stream
()
.
collect
(
Collectors
.
groupingBy
(
ClerkShareLogBO:
:
getWxEnterpriseId
));
for
(
Map
.
Entry
<
String
,
List
<
ClerkShareLogBO
>>
entry
:
wxEnterpriseIdMap
.
entrySet
())
{
String
wxEnterpriseId
=
entry
.
getKey
();
List
<
Long
>
shareLogIds
=
this
.
doHandlerWithOneWxEnterprise
(
wxEnterpriseId
,
shareLogBos
,
groupMessageInfoBo
);
// 标记本批次处理的分享日志为已处理
clerkShareLogService
.
markClerkShareDone
(
groupMessageInfoBo
.
getEnterpriseId
(),
shareLogIds
);
}
}
/**
* 查询好办成员信息
*
* @param clerkShareLogBos
* @return
*/
private
Map
<
String
,
TabHaobanStaff
>
queryStaffMapInfo
(
List
<
ClerkShareLogBO
>
clerkShareLogBos
)
{
List
<
String
>
staffIds
=
clerkShareLogBos
.
stream
()
.
map
(
ClerkShareLogBO:
:
getStaffId
)
.
distinct
()
.
collect
(
Collectors
.
toList
());
List
<
TabHaobanStaff
>
tabHaobanStaffs
=
staffService
.
listStaffWithIds
(
staffIds
);
if
(
CollectionUtils
.
isEmpty
(
tabHaobanStaffs
))
{
return
Collections
.
emptyMap
();
}
return
tabHaobanStaffs
.
stream
()
.
collect
(
Collectors
.
toMap
(
TabHaobanStaff:
:
getStaffId
,
Function
.
identity
()));
}
/**
* 企微纬度处理客户触达
*
* @param wxEnterpriseId
* @param clerkShareLogBos
* @param groupMessageInfoBo
* @return
*/
private
List
<
Long
>
doHandlerWithOneWxEnterprise
(
String
wxEnterpriseId
,
List
<
ClerkShareLogBO
>
clerkShareLogBos
,
GroupMessageInfoBo
groupMessageInfoBo
)
{
WxEnterpriseQwDTO
qwInfo
=
wxEnterpriseService
.
getQwInfo
(
wxEnterpriseId
);
String
corpId
=
qwInfo
.
getThirdCorpid
();
Map
<
String
,
TabHaobanStaff
>
staffInfoMap
=
this
.
queryStaffMapInfo
(
clerkShareLogBos
);
List
<
String
>
excludeMsgId
=
new
ArrayList
<>();
// 已处理的分享日志
List
<
Long
>
clerkShareLogIds
=
new
ArrayList
<>();
doHandlerWithSend2Customer
(
clerkShareLogBos
,
groupMessageInfoBo
,
qwInfo
,
corpId
,
staffInfoMap
,
excludeMsgId
,
clerkShareLogIds
);
doHandlerWithSend2Group
(
wxEnterpriseId
,
clerkShareLogBos
,
groupMessageInfoBo
,
qwInfo
,
corpId
,
staffInfoMap
,
excludeMsgId
,
clerkShareLogIds
);
if
(
groupMessageInfoBo
.
getShareLogId
()
!=
null
)
{
doHandlerWithSend2PYQ
(
clerkShareLogBos
,
clerkShareLogIds
);
}
return
clerkShareLogIds
;
}
/**
* 处理群发到客户
* @param wxEnterpriseId
* @param clerkShareLogBos
* @param groupMessageInfoBo
* @param qwInfo
* @param corpId
* @param staffInfoMap
* @param excludeMsgId
* @param clerkShareLogIds
*/
private
void
doHandlerWithSend2Group
(
String
wxEnterpriseId
,
List
<
ClerkShareLogBO
>
clerkShareLogBos
,
GroupMessageInfoBo
groupMessageInfoBo
,
WxEnterpriseQwDTO
qwInfo
,
String
corpId
,
Map
<
String
,
TabHaobanStaff
>
staffInfoMap
,
List
<
String
>
excludeMsgId
,
List
<
Long
>
clerkShareLogIds
)
{
if
(
groupMessageInfoBo
.
getStartTime
()
==
null
||
groupMessageInfoBo
.
getEndTime
()
==
null
)
{
log
.
info
(
"doHandlerWithSend2Group 处理群发到群组缺少时间参数 {}"
,
JSON
.
toJSONString
(
groupMessageInfoBo
));
return
;
}
// 获取企业下的群发记录
String
corpId
=
""
;
// 发送给客户的消息
List
<
QywxGroupMessageInfoDTO
>
sendWithCustomerMsg
=
this
.
queryGroupMsg
(
corpId
,
GroupMsgChatType
.
single
);
// 发送到群
List
<
QywxGroupMessageInfoDTO
>
sendWithGroupMsg
=
this
.
queryGroupMsg
(
corpId
,
GroupMsgChatType
.
single
);
List
<
QywxGroupMessageInfoDTO
>
sendWithGroupMsg
=
this
.
queryGroupMsg
(
corpId
,
GroupMsgChatType
.
group
,
groupMessageInfoBo
.
getStartTime
(),
groupMessageInfoBo
.
getEndTime
());
// 匹配msgId
List
<
ClerkShareLogBO
>
shareLogWithGroup
=
clerkShareLogBos
.
stream
()
.
filter
(
item
->
ClerkShareMaterialType
.
SHARE_GROUP
.
getCode
().
equals
(
item
.
getShareType
()))
.
collect
(
Collectors
.
toList
());
if
(
CollectionUtils
.
isEmpty
(
shareLogWithGroup
))
{
log
.
info
(
"doHandlerWithSend2Group 群发到群, 无该类型分享日志"
);
return
;
}
for
(
ClerkShareLogBO
shareLogInfo
:
shareLogWithGroup
)
{
QywxGroupMessageInfoDTO
qywxGroupMessageInfoDTO
=
matchMshIdWithClerkShareLog
(
shareLogInfo
,
sendWithGroupMsg
,
excludeMsgId
);
if
(
qywxGroupMessageInfoDTO
==
null
)
{
log
.
info
(
"匹配导购群发日志失败 {}"
,
JSON
.
toJSONString
(
shareLogInfo
));
continue
;
}
clerkShareLogIds
.
add
(
shareLogInfo
.
getId
());
TabHaobanStaff
staff
=
staffInfoMap
.
get
(
shareLogInfo
.
getStaffId
());
if
(
staff
==
null
)
{
log
.
info
(
"doHandlerWithOneWxEnterprise 导购分享日志 成员不存在 staffId:{}"
,
shareLogInfo
.
getStaffId
());
continue
;
}
String
userId
=
staff
.
getWxUserId
();
if
(
qwInfo
.
needOpenUserId3th
())
{
userId
=
staff
.
getWxOpenUseId
();
}
String
msgId
=
qywxGroupMessageInfoDTO
.
getMsgId
();
List
<
QywxGroupMsgSendResultDTO
.
GroupMsgSendResultInfo
>
groupMsgSendResultInfos
=
this
.
queryGroupMsgSendResult
(
corpId
,
msgId
,
userId
,
null
);
if
(
CollectionUtils
.
isEmpty
(
groupMsgSendResultInfos
))
{
log
.
info
(
"根据msgId: {}查询群发结果异常.staffId: {}"
,
msgId
,
shareLogInfo
.
getStaffId
());
continue
;
}
List
<
QywxGroupMsgSendResultDTO
.
GroupMsgSendResultInfo
>
sendResultInfos
=
groupMsgSendResultInfos
.
stream
()
.
filter
(
item
->
StringUtils
.
isNotBlank
(
item
.
getChatId
()))
.
collect
(
Collectors
.
toList
());
// 可能是多个群 (批量发送到群)
for
(
QywxGroupMsgSendResultDTO
.
GroupMsgSendResultInfo
sendResultInfo
:
sendResultInfos
)
{
String
wxChatId
=
sendResultInfo
.
getChatId
();
GroupChatBO
groupChatInfo
=
groupChatService
.
getByWxChatId
(
wxEnterpriseId
,
wxChatId
);
if
(
groupChatInfo
==
null
)
{
log
.
info
(
"doHandlerWithOneWxEnterprise 群发到群 不存在, wxGroupChatId:{}"
,
wxChatId
);
continue
;
}
List
<
GroupChatUserBO
>
groupChatUserBos
=
groupChatUserService
.
queryGroupMemberWithChatId
(
shareLogInfo
.
getEnterpriseId
(),
shareLogInfo
.
getWxEnterpriseId
(),
groupChatInfo
.
getGroupChatId
());
if
(
CollectionUtils
.
isEmpty
(
groupChatUserBos
))
{
continue
;
}
this
.
saveTriggerCustomerWithGroup
(
shareLogInfo
,
groupChatUserBos
);
}
}
}
/**
* 处理群发到客户的触达日志
* @param clerkShareLogBos
* @param groupMessageInfoBo
* @param qwInfo
* @param corpId
* @param staffInfoMap
* @param excludeMsgId
* @param clerkShareLogIds
*/
private
void
doHandlerWithSend2Customer
(
List
<
ClerkShareLogBO
>
clerkShareLogBos
,
GroupMessageInfoBo
groupMessageInfoBo
,
WxEnterpriseQwDTO
qwInfo
,
String
corpId
,
Map
<
String
,
TabHaobanStaff
>
staffInfoMap
,
List
<
String
>
excludeMsgId
,
List
<
Long
>
clerkShareLogIds
)
{
if
(
groupMessageInfoBo
.
getStartTime
()
==
null
||
groupMessageInfoBo
.
getEndTime
()
==
null
)
{
log
.
info
(
"doHandlerWithSend2Customer 处理群发到客户 缺少时间参数 {}"
,
JSON
.
toJSONString
(
groupMessageInfoBo
));
return
;
}
// 发送给客户的消息
List
<
QywxGroupMessageInfoDTO
>
sendWithCustomerMsg
=
this
.
queryGroupMsg
(
corpId
,
GroupMsgChatType
.
single
,
groupMessageInfoBo
.
getStartTime
(),
groupMessageInfoBo
.
getEndTime
());
// 获取触发日志详情
List
<
ClerkShareLogBO
>
shareLogsWithCustomer
=
clerkShareLogBos
.
stream
()
.
filter
(
item
->
ClerkShareMaterialType
.
SHARE_CUSTOMER
.
getCode
().
equals
(
item
.
getShareType
()))
.
collect
(
Collectors
.
toList
());
// 保存客户触达日志明细
if
(
CollectionUtils
.
isEmpty
(
shareLogsWithCustomer
))
{
log
.
info
(
"doHandlerWithSend2Group 群发到客户, 无该类型分享日志"
);
return
;
}
for
(
ClerkShareLogBO
shareLogInfo
:
shareLogsWithCustomer
)
{
QywxGroupMessageInfoDTO
qywxGroupMessageInfoDTO
=
matchMshIdWithClerkShareLog
(
shareLogInfo
,
sendWithCustomerMsg
,
excludeMsgId
);
if
(
qywxGroupMessageInfoDTO
==
null
)
{
log
.
info
(
"doHandlerWithOneWxEnterprise 导购分享日志匹配msgId未匹配到 {}"
,
JSON
.
toJSONString
(
shareLogInfo
));
continue
;
}
log
.
info
(
"doHandlerWithOneWxEnterprise 导购分享日志 clerkId:{}, 匹配到msgId:{}"
,
shareLogInfo
.
getClerkId
(),
qywxGroupMessageInfoDTO
.
getMsgId
());
clerkShareLogIds
.
add
(
shareLogInfo
.
getId
());
TabHaobanStaff
staff
=
staffInfoMap
.
get
(
shareLogInfo
.
getStaffId
());
if
(
staff
==
null
)
{
log
.
info
(
"doHandlerWithOneWxEnterprise 导购分享日志 成员不存在 staffId:{}"
,
shareLogInfo
.
getStaffId
());
continue
;
}
String
userId
=
staff
.
getWxUserId
();
if
(
qwInfo
.
needOpenUserId3th
())
{
userId
=
staff
.
getWxOpenUseId
();
}
List
<
QywxGroupMsgSendResultDTO
.
GroupMsgSendResultInfo
>
groupMsgSendResultInfos
=
this
.
queryGroupMsgSendResult
(
corpId
,
qywxGroupMessageInfoDTO
.
getMsgId
(),
userId
,
null
);
this
.
saveTriggerCustomerDetailLogWithSingle
(
shareLogInfo
,
groupMsgSendResultInfos
);
}
}
private
List
<
QywxGroupMessageInfoDTO
>
queryGroupMsg
(
String
corpid
,
GroupMsgChatType
groupMsgChatType
)
{
/**
* 处理群发到朋友圈触达客户日志
* @param clerkShareLogBos
* @param clerkShareLogIds
*/
private
void
doHandlerWithSend2PYQ
(
List
<
ClerkShareLogBO
>
clerkShareLogBos
,
List
<
Long
>
clerkShareLogIds
)
{
if
(
CollectionUtils
.
isEmpty
(
clerkShareLogBos
))
{
return
;
}
List
<
ClerkShareLogBO
>
clerkShareLogWithPyq
=
clerkShareLogBos
.
stream
()
.
filter
(
item
->
ClerkShareMaterialType
.
SHARE_PYQ
.
getCode
().
equals
(
item
.
getShareType
()))
.
collect
(
Collectors
.
toList
());
if
(
CollectionUtils
.
isEmpty
(
clerkShareLogWithPyq
))
{
log
.
info
(
"doHandlerWithSend2PYQ 无分享到朋友圈分享日志"
);
return
;
}
for
(
ClerkShareLogBO
clerkShareLogBo
:
clerkShareLogWithPyq
)
{
clerkShareLogIds
.
add
(
clerkShareLogBo
.
getId
());
List
<
String
>
externalUserIds
=
externalClerkRelatedService
.
queryExternalRelatedWithStaffId
(
clerkShareLogBo
.
getStaffId
());
if
(
CollectionUtils
.
isEmpty
(
externalUserIds
))
{
log
.
info
(
"处理导购群发朋友圈触达客户日志, 成员无好友. staffId:{}"
,
clerkShareLogBo
.
getStaffId
());
return
;
}
List
<
TriggerCustomerDetailBO
>
customerDetailBos
=
externalUserIds
.
stream
()
.
map
(
item
->
this
.
convertCustomerDetailLog
(
clerkShareLogBo
,
item
))
.
collect
(
Collectors
.
toList
());
triggerCustomerDetailService
.
batchSave
(
customerDetailBos
);
}
}
/**
* 获取与分享日志匹配msgId
* 根据导购群发成功时间往前30秒内全部的发送记录,取时间距离最近的一条获取群ID;
* 如没有则往后30秒,找到距离群发成功时间最近的群ID。如仍然没找到,则群人数记为0
*
* @param clerkShareLogBo
* @param qywxGroupMessageInfos
* @return
*/
private
QywxGroupMessageInfoDTO
matchMshIdWithClerkShareLog
(
ClerkShareLogBO
clerkShareLogBo
,
final
List
<
QywxGroupMessageInfoDTO
>
qywxGroupMessageInfos
,
final
List
<
String
>
excludeMsgIds
)
{
Long
createTime
=
clerkShareLogBo
.
getCreateTime
().
getTime
()
/
1000
;
// 往前找
Optional
<
QywxGroupMessageInfoDTO
>
messageInfoDTO
=
qywxGroupMessageInfos
.
stream
()
.
filter
(
item
->
!
excludeMsgIds
.
contains
(
item
.
getMsgId
()))
.
filter
(
item
->
item
.
getCreateTime
()
-
createTime
<=
0
)
.
min
((
first
,
second
)
->
(
int
)
(
second
.
getCreateTime
()
-
first
.
getCreateTime
()));
if
(
messageInfoDTO
.
isPresent
())
{
QywxGroupMessageInfoDTO
dto
=
messageInfoDTO
.
get
();
excludeMsgIds
.
add
(
dto
.
getMsgId
());
return
dto
;
}
// 往后找
messageInfoDTO
=
qywxGroupMessageInfos
.
stream
()
.
filter
(
item
->
!
excludeMsgIds
.
contains
(
item
.
getMsgId
()))
.
filter
(
item
->
item
.
getCreateTime
()
-
createTime
>
0
)
.
min
((
first
,
second
)
->
(
int
)
(
first
.
getCreateTime
()
-
second
.
getCreateTime
()));
if
(
messageInfoDTO
.
isPresent
())
{
QywxGroupMessageInfoDTO
dto
=
messageInfoDTO
.
get
();
excludeMsgIds
.
add
(
dto
.
getMsgId
());
return
dto
;
}
return
null
;
}
/**
* 查询群发消息
*
* @param corpid
* @param groupMsgChatType
* @param startTime
* @param endTime
* @return
*/
private
List
<
QywxGroupMessageInfoDTO
>
queryGroupMsg
(
String
corpid
,
GroupMsgChatType
groupMsgChatType
,
Date
startTime
,
Date
endTime
)
{
List
<
QywxGroupMessageInfoDTO
>
groupMessageInfos
=
new
ArrayList
<>();
QywxGroupMessageQDTO
groupMessageQDTO
=
new
QywxGroupMessageQDTO
();
groupMessageQDTO
.
setCorpid
(
corpid
);
groupMessageQDTO
.
setStartTime
(
startTime
.
getTime
()
/
1000
);
groupMessageQDTO
.
setEndTime
(
endTime
.
getTime
()
/
1000
);
groupMessageQDTO
.
setSuiteid
(
config
.
getWxSuiteid
());
groupMessageQDTO
.
setChatType
(
groupMsgChatType
.
getCode
());
groupMessageQDTO
.
setPageSize
(
100
);
...
...
@@ -136,15 +409,14 @@ public class GroupMessageServiceImpl implements GroupMessageService {
}
/**
* 群发给客户
* 查询企微成员 群发结果
*
* @param corpid
* @param msgId
* @param userId
* @param cursor
* @param clerkShareLogBO
*/
private
void
handlerGroupMsgWithCustomer
(
String
corpid
,
String
msgId
,
String
userId
,
String
cursor
,
ClerkShareLogBO
clerkShareLogBO
)
{
private
List
<
QywxGroupMsgSendResultDTO
.
GroupMsgSendResultInfo
>
queryGroupMsgSendResult
(
String
corpid
,
String
msgId
,
String
userId
,
String
cursor
)
{
QywxGroupMsgSendResultQDTO
searchQDTO
=
new
QywxGroupMsgSendResultQDTO
();
searchQDTO
.
setCorpid
(
corpid
);
searchQDTO
.
setSuiteid
(
config
.
getWxSuiteid
());
...
...
@@ -154,34 +426,67 @@ public class GroupMessageServiceImpl implements GroupMessageService {
searchQDTO
.
setCursor
(
cursor
);
ServiceResponse
<
QywxGroupMsgSendResultDTO
>
serviceResponse
=
qywxSuiteApiService
.
queryQywxGroupMsgSendResult
(
searchQDTO
);
if
(!
serviceResponse
.
isSuccess
()
||
CollectionUtils
.
isEmpty
(
serviceResponse
.
getResult
().
getSendResultInfos
()))
{
return
Collections
.
emptyList
();
}
List
<
QywxGroupMsgSendResultDTO
.
GroupMsgSendResultInfo
>
groupMsgSendResultInfos
=
new
ArrayList
<>();
groupMsgSendResultInfos
.
addAll
(
serviceResponse
.
getResult
().
getSendResultInfos
());
if
(
StringUtils
.
isNotBlank
(
serviceResponse
.
getResult
().
getCursor
()))
{
String
tempCursor
=
serviceResponse
.
getResult
().
getCursor
();
this
.
queryGroupMsgSendResult
(
corpid
,
msgId
,
userId
,
tempCursor
);
}
return
groupMsgSendResultInfos
;
}
/**
* 保存触达日志明细 群发到客户
*
* @param clerkShareLogBO
* @param groupMsgSendResultInfos
*/
private
void
saveTriggerCustomerDetailLogWithSingle
(
ClerkShareLogBO
clerkShareLogBO
,
List
<
QywxGroupMsgSendResultDTO
.
GroupMsgSendResultInfo
>
groupMsgSendResultInfos
)
{
if
(
CollectionUtils
.
isEmpty
(
groupMsgSendResultInfos
))
{
return
;
}
List
<
TriggerCustomerDetailBO
>
customerDetailBos
=
serviceResponse
.
getResult
()
.
getSendResultInfos
()
List
<
TriggerCustomerDetailBO
>
customerDetailBos
=
groupMsgSendResultInfos
.
stream
()
.
map
(
item
->
{
TriggerCustomerDetailBO
temp
=
new
TriggerCustomerDetailBO
();
temp
.
setId
(
UniqueIdUtils
.
uniqueLong
());
temp
.
setEnterpriseId
(
clerkShareLogBO
.
getEnterpriseId
());
temp
.
setWxEnterpriseId
(
clerkShareLogBO
.
getWxEnterpriseId
());
temp
.
setBizId
(
clerkShareLogBO
.
getBizId
());
temp
.
setBizType
(
clerkShareLogBO
.
getBizType
());
temp
.
setClerkId
(
clerkShareLogBO
.
getClerkId
());
temp
.
setStaffId
(
clerkShareLogBO
.
getStaffId
());
temp
.
setChannelType
(
clerkShareLogBO
.
getShareType
());
temp
.
setCustomerId
(
item
.
getExternalUserId
());
temp
.
setCreateTime
(
new
Date
());
temp
.
setUpdateTime
(
new
Date
());
temp
.
setDeleteFlag
(
0
);
return
temp
;
})
.
map
(
item
->
this
.
convertCustomerDetailLog
(
clerkShareLogBO
,
item
.
getExternalUserId
()))
.
collect
(
Collectors
.
toList
());
triggerCustomerDetailService
.
batchSave
(
customerDetailBos
);
}
if
(
StringUtils
.
isNotBlank
(
serviceResponse
.
getResult
().
getCursor
()))
{
String
tempCursor
=
serviceResponse
.
getResult
().
getCursor
();
this
.
handlerGroupMsgWithCustomer
(
corpid
,
msgId
,
userId
,
tempCursor
,
clerkShareLogBO
);
/**
* 保存触达日志明细 群发到群
*
* @param clerkShareLogBO
* @param groupChatUserBos
*/
private
void
saveTriggerCustomerWithGroup
(
ClerkShareLogBO
clerkShareLogBO
,
final
List
<
GroupChatUserBO
>
groupChatUserBos
)
{
if
(
CollectionUtils
.
isEmpty
(
groupChatUserBos
))
{
return
;
}
// 标记该条分享日志为已分享
List
<
TriggerCustomerDetailBO
>
customerDetailBos
=
groupChatUserBos
.
stream
()
.
map
(
item
->
this
.
convertCustomerDetailLog
(
clerkShareLogBO
,
item
.
getUserId
()))
.
collect
(
Collectors
.
toList
());
triggerCustomerDetailService
.
batchSave
(
customerDetailBos
);
}
private
TriggerCustomerDetailBO
convertCustomerDetailLog
(
ClerkShareLogBO
clerkShareLogBO
,
String
externalUserId
)
{
TriggerCustomerDetailBO
temp
=
new
TriggerCustomerDetailBO
();
temp
.
setId
(
UniqueIdUtils
.
uniqueLong
());
temp
.
setEnterpriseId
(
clerkShareLogBO
.
getEnterpriseId
());
temp
.
setWxEnterpriseId
(
clerkShareLogBO
.
getWxEnterpriseId
());
temp
.
setBizId
(
clerkShareLogBO
.
getBizId
());
temp
.
setBizType
(
clerkShareLogBO
.
getBizType
());
temp
.
setClerkId
(
clerkShareLogBO
.
getClerkId
());
temp
.
setStaffId
(
clerkShareLogBO
.
getStaffId
());
temp
.
setChannelType
(
clerkShareLogBO
.
getShareType
());
temp
.
setCustomerId
(
externalUserId
);
temp
.
setCreateTime
(
new
Date
());
temp
.
setUpdateTime
(
new
Date
());
temp
.
setDeleteFlag
(
0
);
return
temp
;
}
}
haoban-manage3-service/src/main/java/com/gic/haoban/manage/service/service/impl/ExternalClerkRelatedServiceImpl.java
View file @
305146d3
...
...
@@ -490,4 +490,15 @@ public class ExternalClerkRelatedServiceImpl implements ExternalClerkRelatedServ
ClerkDTO
clerk
=
this
.
clerkService
.
getclerkById
(
newClerkId
);
this
.
mapper
.
updateClerkInfo
(
staffId
,
oldClerkId
,
newClerkId
,
clerk
.
getStoreId
());
}
/**
* 外部联系人
*
* @param staffId
* @return
*/
@Override
public
List
<
String
>
queryExternalRelatedWithStaffId
(
String
staffId
)
{
return
this
.
mapper
.
queryExternalUserIdWithStaffId
(
staffId
);
}
}
haoban-manage3-service/src/main/java/com/gic/haoban/manage/service/service/impl/StaffServiceImpl.java
View file @
305146d3
package
com
.
gic
.
haoban
.
manage
.
service
.
service
.
impl
;
import
java.util.Collection
;
import
java.util.Collections
;
import
java.util.Date
;
import
java.util.List
;
...
...
@@ -248,5 +250,19 @@ public class StaffServiceImpl implements StaffService {
this
.
haobanQywxFeeAccountStaffService
.
save
(
accountStaff
);
}
}
/**
* 查询成员列表
*
* @param wxEnterpriseId
* @param staffIds
* @return
*/
@Override
public
List
<
TabHaobanStaff
>
listStaffWithIds
(
List
<
String
>
staffIds
)
{
if
(
CollectionUtils
.
isEmpty
(
staffIds
))
{
return
Collections
.
emptyList
();
}
return
this
.
mapper
.
listByIds
(
staffIds
);
}
}
haoban-manage3-service/src/main/java/com/gic/haoban/manage/service/service/out/impl/content/MaterialShareLogApiServiceImpl.java
View file @
305146d3
package
com
.
gic
.
haoban
.
manage
.
service
.
service
.
out
.
impl
.
content
;
import
com.alibaba.fastjson.JSON
;
import
com.gic.api.base.commons.ServiceResponse
;
import
com.gic.commons.util.GICMQClientUtil
;
import
com.gic.haoban.manage.api.dto.content.log.ClerkShareMaterialLogDTO
;
import
com.gic.haoban.manage.api.dto.content.log.TriggerCustomerDetailLogDTO
;
import
com.gic.haoban.manage.api.enums.content.ClerkShareMaterialType
;
import
com.gic.haoban.manage.api.service.content.MaterialShareLogApiService
;
import
com.gic.haoban.manage.service.pojo.bo.content.ClerkShareLogBO
;
import
com.gic.haoban.manage.service.service.content.ClerkShareLogService
;
...
...
@@ -21,6 +25,12 @@ import org.springframework.stereotype.Component;
public
class
MaterialShareLogApiServiceImpl
implements
MaterialShareLogApiService
{
private
static
final
Logger
log
=
LoggerFactory
.
getLogger
(
MaterialShareLogApiServiceImpl
.
class
);
/**
* 导购分享素材 客户触达日志
* @see com.gic.haoban.manage.api.service.content.task.QywxGroupMsgTaskApiService#handlerTriggerCustomerDetailLog(String)
*/
private
static
final
String
SHARE_MATERIAL_DETAIL_LOG
=
"SHARE_MATERIAL_DETAIL_LOG"
;
@Autowired
private
ClerkShareLogService
clerkShareLogService
;
...
...
@@ -30,6 +40,21 @@ public class MaterialShareLogApiServiceImpl implements MaterialShareLogApiServic
ClerkShareLogBO
clerkShareLogBO
=
new
ClerkShareLogBO
();
BeanUtils
.
copyProperties
(
clerkShareMaterialLogDTO
,
clerkShareLogBO
);
Long
logId
=
clerkShareLogService
.
saveClerkShareLog
(
clerkShareLogBO
);
if
(
logId
!=
null
){
// MQ 通知处理导购分享日志
TriggerCustomerDetailLogDTO
triggerCustomerDetailLog
=
new
TriggerCustomerDetailLogDTO
();
triggerCustomerDetailLog
.
setEnterpriseId
(
clerkShareLogBO
.
getEnterpriseId
());
triggerCustomerDetailLog
.
setClerkId
(
clerkShareLogBO
.
getClerkId
());
triggerCustomerDetailLog
.
setShareType
(
ClerkShareMaterialType
.
SHARE_PYQ
.
getCode
());
TriggerCustomerDetailLogDTO
.
SharePYQ
sharePYQ
=
new
TriggerCustomerDetailLogDTO
.
SharePYQ
();
sharePYQ
.
setShareLogId
(
logId
);
triggerCustomerDetailLog
.
setSharePYQ
(
sharePYQ
);
try
{
GICMQClientUtil
.
getClientInstance
().
sendMessage
(
SHARE_MATERIAL_DETAIL_LOG
,
JSON
.
toJSONString
(
triggerCustomerDetailLog
));
}
catch
(
Exception
ex
){
log
.
warn
(
"客户分享素材 触达日志MQ异常 {}"
,
JSON
.
toJSONString
(
triggerCustomerDetailLog
),
ex
);
}
}
return
ServiceResponse
.
success
(
logId
);
}
}
haoban-manage3-service/src/main/java/com/gic/haoban/manage/service/service/out/impl/content/task/QywxGroupMsgTaskApiServiceImpl.java
View file @
305146d3
package
com
.
gic
.
haoban
.
manage
.
service
.
service
.
out
.
impl
.
content
.
task
;
import
com.alibaba.fastjson.JSON
;
import
com.gic.api.base.commons.ServiceResponse
;
import
com.gic.commons.util.DateUtil
;
import
com.gic.haoban.manage.api.dto.content.log.TriggerCustomerDetailLogDTO
;
import
com.gic.haoban.manage.api.enums.content.TriggerCustomerChannelType
;
import
com.gic.haoban.manage.api.service.content.task.QywxGroupMsgTaskApiService
;
import
com.gic.haoban.manage.service.pojo.bo.content.GroupMessageInfoBo
;
import
com.gic.haoban.manage.service.service.content.GroupMessageService
;
import
org.slf4j.Logger
;
import
org.slf4j.LoggerFactory
;
import
org.springframework.beans.factory.annotation.Autowired
;
import
org.springframework.stereotype.Component
;
import
java.util.ArrayList
;
import
java.util.Date
;
import
java.util.List
;
/**
...
...
@@ -16,14 +26,52 @@ import java.util.List;
@Component
(
"qywxGroupMsgTaskApiServiceImpl"
)
public
class
QywxGroupMsgTaskApiServiceImpl
implements
QywxGroupMsgTaskApiService
{
private
static
final
Logger
log
=
LoggerFactory
.
getLogger
(
QywxGroupMsgTaskApiServiceImpl
.
class
);
@Autowired
private
GroupMessageService
groupMessageService
;
@Override
public
ServiceResponse
<
Void
>
groupMsgTaskJob
(
String
params
)
{
// 获取开启【内容】权限的企业id
List
<
String
>
enterpriseIds
=
new
ArrayList
<>();
// 获取企业 (当前时间 - 30分钟, 当前时间)范围内的 导购分享记录。按创建时间排序
Date
currentTime
=
new
Date
();
for
(
String
enterpriseId
:
enterpriseIds
)
{
GroupMessageInfoBo
groupMessageInfoBo
=
new
GroupMessageInfoBo
();
groupMessageInfoBo
.
setEnterpriseId
(
enterpriseId
);
groupMessageInfoBo
.
setStartTime
(
DateUtil
.
addNumForMinute
(
currentTime
,
-
30
));
groupMessageInfoBo
.
setEndTime
(
currentTime
);
groupMessageService
.
handlerGroupMessage
(
groupMessageInfoBo
);
}
// 获取当前时间段内的数据
return
ServiceResponse
.
success
();
}
/**
* 处理客户触达日志明细
*
* @param params
* @return
*/
@Override
public
ServiceResponse
<
Void
>
handlerTriggerCustomerDetailLog
(
String
params
)
{
log
.
info
(
"处理客户触达日志 {}"
,
params
);
TriggerCustomerDetailLogDTO
customerDetailLog
=
JSON
.
parseObject
(
params
,
TriggerCustomerDetailLogDTO
.
class
);
if
(
customerDetailLog
==
null
)
{
return
ServiceResponse
.
success
();
}
GroupMessageInfoBo
groupMessageInfoBo
=
new
GroupMessageInfoBo
();
groupMessageInfoBo
.
setEnterpriseId
(
customerDetailLog
.
getEnterpriseId
());
if
(
TriggerCustomerChannelType
.
PYQ
.
getCode
().
equals
(
customerDetailLog
.
getShareType
()))
{
if
(
customerDetailLog
.
getSharePYQ
()
==
null
)
{
log
.
info
(
"handlerTriggerCustomerDetailLog 分享朋友圈类型 参数异常 {}"
,
params
);
return
ServiceResponse
.
success
();
}
groupMessageInfoBo
.
setShareLogId
(
customerDetailLog
.
getSharePYQ
().
getShareLogId
());
}
groupMessageService
.
handlerGroupMessage
(
groupMessageInfoBo
);
return
ServiceResponse
.
success
();
}
}
haoban-manage3-service/src/main/resources/mapper/TabHaobanExternalClerkRelatedMapper.xml
View file @
305146d3
...
...
@@ -751,4 +751,10 @@
limit 1
</select>
<select
id=
"queryExternalUserIdWithStaffId"
resultType=
"java.lang.String"
>
SELECT external_user_id from tab_haoban_external_clerk_related
WHERE staff_id = #{staffId}
and status_flag in (1, 3, 4);
</select>
</mapper>
\ No newline at end of file
haoban-manage3-service/src/main/resources/mapper/chat/GroupChatUserMapper.xml
View file @
305146d3
...
...
@@ -282,5 +282,22 @@
</otherwise>
</choose>
</select>
<select
id=
"queryGroupChatUserList"
resultMap=
"result-map-tabHaobanGroupChatUser"
>
select
<include
refid=
"Base_Column_List"
/>
from tab_haoban_group_chat_user
<where>
status_flag = 1 and delete_flag = 0
<if
test=
"wxEnterpriseId != null and wxEnterpriseId != ''"
>
and wx_enterprise_id = #{wxEnterpriseId}
</if>
<if
test=
"enterpriseId != null and enterpriseId != ''"
>
and enterprise_id = #{enterpriseId}
</if>
<if
test=
"chatId != null and chatId != ''"
>
and group_chat_id = #{chatId}
</if>
</where>
</select>
</mapper>
\ No newline at end of file
haoban-manage3-service/src/main/resources/mapper/content/TabHaobanClerkShareLogDao.xml
View file @
305146d3
...
...
@@ -61,8 +61,10 @@
<if
test=
"endTime != null"
>
and create_time
<![CDATA[ <= ]]>
#{endTime}
</if>
<if
test=
"shareLogId != null"
>
and id = #{shareLogId}
</if>
</where>
limit #{pageable.offset}, #{pageable.pageSize}
</select>
<!--统计总行数-->
...
...
@@ -187,5 +189,13 @@
where id = #{id}
</delete>
<update
id=
"markShareLogWithDone"
>
update tab_haoban_clerk_share_log set delete_flag = 1
where enterprise_id = #{enterpriseId} and id in
<foreach
collection=
"ids"
item=
"id"
separator=
","
open=
"("
close=
")"
>
#{id}
</foreach>
</update>
</mapper>
haoban-manage3-service/src/test/java/GroupMessageServiceTest.java
0 → 100644
View file @
305146d3
import
com.alibaba.fastjson.JSON
;
import
com.gic.commons.util.DateUtil
;
import
com.gic.haoban.manage.api.dto.content.log.TriggerCustomerDetailLogDTO
;
import
com.gic.haoban.manage.api.enums.content.ClerkShareMaterialType
;
import
com.gic.haoban.manage.api.enums.content.ShareBizType
;
import
com.gic.haoban.manage.api.enums.content.TriggerCustomerChannelType
;
import
com.gic.haoban.manage.api.service.content.task.QywxGroupMsgTaskApiService
;
import
com.gic.haoban.manage.service.pojo.bo.content.ClerkShareLogBO
;
import
com.gic.haoban.manage.service.pojo.bo.content.GroupMessageInfoBo
;
import
com.gic.haoban.manage.service.service.content.ClerkShareLogService
;
import
com.gic.haoban.manage.service.service.content.GroupMessageService
;
import
com.squareup.moshi.Json
;
import
org.junit.Test
;
import
org.junit.runner.RunWith
;
import
org.springframework.beans.factory.annotation.Autowired
;
import
org.springframework.test.context.ContextConfiguration
;
import
org.springframework.test.context.junit4.SpringJUnit4ClassRunner
;
import
java.util.Date
;
/**
* @Author MUSI
* @Date 2023/3/20 8:57 PM
* @Description
* @Version
**/
@RunWith
(
SpringJUnit4ClassRunner
.
class
)
@ContextConfiguration
(
locations
=
{
"classpath:applicationContext-conf.xml"
})
public
class
GroupMessageServiceTest
{
@Autowired
private
GroupMessageService
groupMessageService
;
@Autowired
private
ClerkShareLogService
clerkShareLogService
;
@Autowired
private
QywxGroupMsgTaskApiService
qywxGroupMsgTaskApiService
;
String
eid
=
"ff8080815dacd3a2015dacd3ef5c0000"
;
String
wxEid
=
"ca66a01b79474c40b3e7c7f93daf1a3b"
;
@Test
public
void
shareLogTest
()
{
ClerkShareLogBO
clerkShareLogBO
=
new
ClerkShareLogBO
();
clerkShareLogBO
.
setEnterpriseId
(
eid
);
clerkShareLogBO
.
setWxEnterpriseId
(
wxEid
);
clerkShareLogBO
.
setClerkId
(
"fbc508e395f846ef9005852c420e1c4f"
);
clerkShareLogBO
.
setStaffId
(
"e608b51b267e4943b87e222a343b4f25"
);
clerkShareLogBO
.
setShareType
(
ClerkShareMaterialType
.
SHARE_PYQ
.
getCode
());
clerkShareLogBO
.
setBizId
(
eid
);
clerkShareLogBO
.
setBizType
(
ShareBizType
.
MATERIAL
.
getCode
());
clerkShareLogService
.
saveClerkShareLog
(
clerkShareLogBO
);
}
@Test
public
void
shareWithPyq
()
{
TriggerCustomerDetailLogDTO
customerDetailLog
=
new
TriggerCustomerDetailLogDTO
();
customerDetailLog
.
setEnterpriseId
(
eid
);
customerDetailLog
.
setShareType
(
TriggerCustomerChannelType
.
PYQ
.
getCode
());
TriggerCustomerDetailLogDTO
.
SharePYQ
sharePYQ
=
new
TriggerCustomerDetailLogDTO
.
SharePYQ
();
sharePYQ
.
setShareLogId
(
511216759709786113L
);
customerDetailLog
.
setSharePYQ
(
sharePYQ
);
qywxGroupMsgTaskApiService
.
handlerTriggerCustomerDetailLog
(
JSON
.
toJSONString
(
customerDetailLog
));
}
@Test
public
void
groupMessageTest
()
{
Date
currentTime
=
new
Date
();
GroupMessageInfoBo
groupMessageInfoBo
=
new
GroupMessageInfoBo
();
groupMessageInfoBo
.
setEnterpriseId
(
eid
);
groupMessageInfoBo
.
setStartTime
(
DateUtil
.
addNumForMinute
(
currentTime
,
-
100
));
groupMessageInfoBo
.
setEndTime
(
currentTime
);
groupMessageService
.
handlerGroupMessage
(
groupMessageInfoBo
);
}
}
haoban-manage3-wx/src/main/java/com/gic/haoban/manage/web/controller/content/ClerkMaterialShareController.java
View file @
305146d3
...
...
@@ -43,6 +43,7 @@ public class ClerkMaterialShareController {
}
ClerkShareMaterialLogDTO
temp
=
new
ClerkShareMaterialLogDTO
();
temp
.
setEnterpriseId
(
materialShareLogQo
.
getEnterpriseId
());
temp
.
setWxEnterpriseId
(
materialShareLogQo
.
getWxEnterpriseId
());
temp
.
setClerkId
(
materialShareLogQo
.
getClerkId
());
temp
.
setStaffId
(
materialShareLogQo
.
getStaffId
());
temp
.
setShareType
(
materialShareLogQo
.
getShareType
());
...
...
Write
Preview
Markdown
is supported
0%
Try again
or
attach a new file
Attach a file
Cancel
You are about to add
0
people
to the discussion. Proceed with caution.
Finish editing this message first!
Cancel
Please
register
or
sign in
to comment