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
d6e4c2b8
Commit
d6e4c2b8
authored
Oct 16, 2024
by
王祖波
Browse files
Options
Browse Files
Download
Email Patches
Plain Diff
群活码
parent
54c19fa9
Hide whitespace changes
Inline
Side-by-side
Showing
1 changed file
with
420 additions
and
0 deletions
+420
-0
JoinRuleManager.java
...c/haoban/manage/service/context/chat/JoinRuleManager.java
+420
-0
No files found.
haoban-manage3-service/src/main/java/com/gic/haoban/manage/service/context/chat/JoinRuleManager.java
0 → 100644
View file @
d6e4c2b8
package
com
.
gic
.
haoban
.
manage
.
service
.
context
.
chat
;
import
cn.hutool.core.map.MapUtil
;
import
com.alibaba.fastjson.JSON
;
import
com.alibaba.fastjson.JSONObject
;
import
com.gic.api.base.commons.BasePageInfo
;
import
com.gic.api.base.commons.BusinessException
;
import
com.gic.api.base.commons.Page
;
import
com.gic.clerk.api.dto.ClerkDTO
;
import
com.gic.clerk.api.service.ClerkService
;
import
com.gic.enterprise.api.dto.StoreDTO
;
import
com.gic.enterprise.api.dto.StoreGroupDTO
;
import
com.gic.enterprise.api.dto.StoreSearchDTO
;
import
com.gic.enterprise.api.service.StoreService
;
import
com.gic.haoban.common.utils.DistanceUtil
;
import
com.gic.haoban.manage.api.dto.StaffClerkRelationDTO
;
import
com.gic.haoban.manage.api.dto.chat.GroupChatActivityDTO
;
import
com.gic.haoban.manage.api.dto.chat.GroupChatActivityJoinDTO
;
import
com.gic.haoban.manage.api.dto.qdto.chat.ChatHmSearchQDTO
;
import
com.gic.haoban.manage.api.enums.chat.ChatActivityJoinEnum
;
import
com.gic.haoban.manage.api.enums.chat.ChatActivityJoinRuleEnum
;
import
com.gic.haoban.manage.api.qdto.chat.GroupChatActivityHmQDTO
;
import
com.gic.haoban.manage.service.dao.mapper.chat.GroupChatHmRelationMapper
;
import
com.gic.haoban.manage.service.dao.mapper.chat.GroupChatMapper
;
import
com.gic.haoban.manage.service.dao.mapper.chat.GroupChatUserMapper
;
import
com.gic.haoban.manage.service.entity.chat.TabGroupChat
;
import
com.gic.haoban.manage.service.entity.chat.TabGroupChatHmRelation
;
import
com.gic.haoban.manage.service.entity.chat.TabGroupChatUser
;
import
com.gic.haoban.manage.service.pojo.bo.chat.GroupChatHmBO
;
import
com.gic.haoban.manage.service.service.ESMemberInfoService
;
import
com.gic.haoban.manage.service.service.StaffClerkRelationService
;
import
com.gic.haoban.manage.service.service.chat.GroupChatHmService
;
import
com.gic.member.api.dto.MemberDTO
;
import
com.gic.member.api.dto.store.MemberStoreResp
;
import
com.gic.member.api.service.MemberService
;
import
com.gic.member.api.service.MemberStoreService
;
import
com.gic.member.tag.api.dto.MemberExistDTO
;
import
com.gic.member.tag.api.service.MemberTagGroupApiService
;
import
com.google.common.collect.Lists
;
import
org.apache.commons.collections.CollectionUtils
;
import
org.apache.commons.lang3.StringUtils
;
import
org.slf4j.Logger
;
import
org.slf4j.LoggerFactory
;
import
org.springframework.beans.factory.annotation.Autowired
;
import
org.springframework.stereotype.Component
;
import
java.util.*
;
import
java.util.stream.Collectors
;
/**
* Created by wangzubo on 2024/8/23.
*/
@Component
public
class
JoinRuleManager
{
private
static
final
Logger
logger
=
LoggerFactory
.
getLogger
(
JoinRuleManager
.
class
);
@Autowired
private
MemberService
memberService
;
@Autowired
private
MemberStoreService
memberStoreService
;
@Autowired
private
ClerkService
clerkService
;
@Autowired
private
StoreService
storeService
;
@Autowired
private
GroupChatUserMapper
groupChatUserMapper
;
@Autowired
private
GroupChatHmRelationMapper
groupChatHmRelationMapper
;
@Autowired
private
GroupChatMapper
groupChatMapper
;
@Autowired
private
GroupChatHmService
groupChatHmService
;
@Autowired
private
StaffClerkRelationService
staffClerkRelationService
;
@Autowired
private
ESMemberInfoService
esMemberInfoService
;
@Autowired
private
MemberTagGroupApiService
memberTagGroupApiService
;
private
final
Map
<
ChatActivityJoinRuleEnum
,
FunctionWithException
<
GroupChatActivityHmQDTO
,
List
<
GroupChatHmBO
>>>
ruleHandlers
=
new
HashMap
<>();
public
JoinRuleManager
()
{
ruleHandlers
.
put
(
ChatActivityJoinRuleEnum
.
INVITER_CHAT
,
this
::
handleInviterChat
);
ruleHandlers
.
put
(
ChatActivityJoinRuleEnum
.
MAIN_STORE
,
this
::
handleMainStore
);
ruleHandlers
.
put
(
ChatActivityJoinRuleEnum
.
OTHER_STORE
,
this
::
handleOtherStore
);
ruleHandlers
.
put
(
ChatActivityJoinRuleEnum
.
LBS
,
this
::
handleLbs
);
}
@FunctionalInterface
public
interface
FunctionWithException
<
T
,
R
>
{
R
apply
(
T
t
)
throws
BusinessException
;
}
public
List
<
GroupChatHmBO
>
listGroupHm
(
GroupChatActivityHmQDTO
activityHmQDTO
)
throws
BusinessException
{
GroupChatActivityDTO
chatActivity
=
activityHmQDTO
.
getChatActivity
();
String
inviteeMemberId
=
activityHmQDTO
.
getInviteeMemberId
();
if
(
chatActivity
==
null
)
{
return
new
ArrayList
<>();
}
logger
.
info
(
"入群规则:{}"
,
JSON
.
toJSONString
(
activityHmQDTO
));
Integer
joinType
=
chatActivity
.
getJoinType
();
if
(
Objects
.
equals
(
ChatActivityJoinEnum
.
RULE
.
value
,
joinType
))
{
String
joinRule
=
chatActivity
.
getJoinRule
();
for
(
String
ruleStr
:
joinRule
.
split
(
","
))
{
Integer
rule
=
Integer
.
parseInt
(
ruleStr
);
ChatActivityJoinRuleEnum
ruleEnum
=
ChatActivityJoinRuleEnum
.
getByValue
(
rule
);
List
<
GroupChatHmBO
>
hmBOList
=
applyJoinRule
(
ruleEnum
,
activityHmQDTO
);
if
(
CollectionUtils
.
isNotEmpty
(
hmBOList
))
{
return
hmBOList
;
}
}
}
else
{
List
<
GroupChatActivityJoinDTO
>
joinList
=
activityHmQDTO
.
getChatActivity
().
getJoinList
();
for
(
GroupChatActivityJoinDTO
joinDTO
:
joinList
)
{
boolean
checked
=
checkActivityMember
(
chatActivity
,
joinDTO
,
inviteeMemberId
);
if
(
checked
)
{
GroupChatHmBO
chatHm
=
groupChatHmService
.
getById
(
joinDTO
.
getChatHmId
());
if
(
chatHm
!=
null
&&
Objects
.
equals
(
chatHm
.
getStatusFlag
(),
1
))
{
return
Lists
.
newArrayList
(
chatHm
);
}
}
}
}
GroupChatHmBO
chatHm
=
groupChatHmService
.
getById
(
chatActivity
.
getJoinChatHmId
());
if
(
chatHm
!=
null
&&
Objects
.
equals
(
chatHm
.
getStatusFlag
(),
1
))
{
return
Lists
.
newArrayList
(
chatHm
);
}
return
null
;
}
private
boolean
checkActivityMember
(
GroupChatActivityDTO
chatActivity
,
GroupChatActivityJoinDTO
joinDTO
,
String
memberId
)
{
String
enterpriseId
=
chatActivity
.
getEnterpriseId
();
Integer
memberType
=
joinDTO
.
getMemberType
();
String
filterJson
=
joinDTO
.
getFilterJson
();
String
creatorId
=
chatActivity
.
getCreatorId
();
boolean
exist
=
true
;
//校验是否有权限
if
(
memberType
==
0
)
{
String
searchParams
=
esMemberInfoService
.
getMemberSearchParamOld
(
enterpriseId
,
memberType
,
filterJson
,
creatorId
,
false
);
JSONObject
searchJson
=
JSON
.
parseObject
(
searchParams
);
exist
=
esMemberInfoService
.
matchMember
(
enterpriseId
,
searchJson
,
memberId
,
creatorId
);
}
else
if
(
memberType
==
1
)
{
MemberExistDTO
dto
=
new
MemberExistDTO
();
dto
.
setEnterpriseId
(
enterpriseId
);
String
[]
tagGroupIdArr
=
filterJson
.
split
(
","
);
List
<
String
>
list
=
Arrays
.
asList
(
tagGroupIdArr
);
dto
.
setMemberTagGroupIds
(
list
);
dto
.
setUseId
(
creatorId
);
dto
.
setMemberId
(
memberId
);
exist
=
memberTagGroupApiService
.
memberIsExistGroup
(
dto
);
}
logger
.
info
(
"activity:{},memberId:{}无权限"
,
chatActivity
.
getChatActivityId
(),
memberId
);
return
exist
;
}
public
List
<
GroupChatHmBO
>
applyJoinRule
(
ChatActivityJoinRuleEnum
ruleEnum
,
GroupChatActivityHmQDTO
activityHmQDTO
)
throws
BusinessException
{
FunctionWithException
<
GroupChatActivityHmQDTO
,
List
<
GroupChatHmBO
>>
handler
=
ruleHandlers
.
get
(
ruleEnum
);
if
(
handler
!=
null
)
{
List
<
GroupChatHmBO
>
apply
=
handler
.
apply
(
activityHmQDTO
);
logger
.
info
(
"规则:{},获取活码数:{}"
,
ruleEnum
.
desc
,
apply
.
size
());
return
apply
;
}
return
null
;
}
private
List
<
GroupChatHmBO
>
handleInviterChat
(
GroupChatActivityHmQDTO
activityHmQDTO
)
{
String
wxEnterpriseId
=
activityHmQDTO
.
getChatActivity
().
getWxEnterpriseId
();
String
enterpriseId
=
activityHmQDTO
.
getEnterpriseId
();
String
inviterMemberId
=
activityHmQDTO
.
getInviterMemberId
();
MemberDTO
member
=
memberService
.
getMember
(
inviterMemberId
);
if
(
member
==
null
)
{
return
new
ArrayList
<>();
}
//根据邀请人unionId获取所在群
String
thirdUnionid
=
member
.
getThirdUnionid
();
List
<
TabGroupChatUser
>
chartUserList
=
groupChatUserMapper
.
getByUnionId
(
enterpriseId
,
thirdUnionid
);
if
(
CollectionUtils
.
isEmpty
(
chartUserList
))
{
return
new
ArrayList
<>();
}
//根据群id获取所有关联的群活码
List
<
Long
>
groupChatIdList
=
chartUserList
.
stream
().
map
(
TabGroupChatUser:
:
getGroupChatId
).
collect
(
Collectors
.
toList
());
List
<
TabGroupChatHmRelation
>
chatHmList
=
groupChatHmRelationMapper
.
listChatHmByGroupChatIds
(
groupChatIdList
);
if
(
CollectionUtils
.
isEmpty
(
chatHmList
))
{
return
new
ArrayList
<>();
}
ChatHmSearchQDTO
hmSearchQDTO
=
new
ChatHmSearchQDTO
();
hmSearchQDTO
.
setEnterpriseId
(
enterpriseId
);
hmSearchQDTO
.
setWxEnterpriseId
(
wxEnterpriseId
);
List
<
Long
>
chatHmIdList
=
chatHmList
.
stream
().
map
(
TabGroupChatHmRelation:
:
getChatHmId
).
collect
(
Collectors
.
toList
());
hmSearchQDTO
.
setChatHmIdList
(
chatHmIdList
);
hmSearchQDTO
.
setStatus
(
1
);
BasePageInfo
basePageInfo
=
new
BasePageInfo
();
basePageInfo
.
setPageNum
(
1
);
basePageInfo
.
setPageSize
(
100
);
Page
<
GroupChatHmBO
>
listPage
=
groupChatHmService
.
listPage
(
hmSearchQDTO
,
basePageInfo
);
return
listPage
.
getResult
();
}
private
List
<
GroupChatHmBO
>
handleMainStore
(
GroupChatActivityHmQDTO
activityHmQDTO
)
{
String
enterpriseId
=
activityHmQDTO
.
getEnterpriseId
();
String
wxEnterpriseId
=
activityHmQDTO
.
getChatActivity
().
getWxEnterpriseId
();
MemberStoreResp
memberStoreRelation
=
memberStoreService
.
getMemberStoreRelation
(
enterpriseId
,
activityHmQDTO
.
getInviteeMemberId
());
if
(
memberStoreRelation
==
null
)
{
return
new
ArrayList
<>();
}
String
mainStoreId
=
memberStoreRelation
.
getMainStoreId
();
if
(
StringUtils
.
isBlank
(
mainStoreId
))
{
return
new
ArrayList
<>();
}
return
getByStoreIdList
(
enterpriseId
,
wxEnterpriseId
,
Lists
.
newArrayList
(
mainStoreId
));
}
private
List
<
GroupChatHmBO
>
handleOtherStore
(
GroupChatActivityHmQDTO
activityHmQDTO
)
{
String
enterpriseId
=
activityHmQDTO
.
getEnterpriseId
();
String
wxEnterpriseId
=
activityHmQDTO
.
getChatActivity
().
getWxEnterpriseId
();
MemberStoreResp
memberStoreRelation
=
memberStoreService
.
getMemberStoreRelation
(
enterpriseId
,
activityHmQDTO
.
getInviteeMemberId
());
if
(
memberStoreRelation
==
null
)
{
return
new
ArrayList
<>();
}
List
<
String
>
assistantStoreIds
=
memberStoreRelation
.
getAssistantStoreIds
();
if
(
CollectionUtils
.
isEmpty
(
assistantStoreIds
))
{
return
new
ArrayList
<>();
}
return
getByStoreIdList
(
enterpriseId
,
wxEnterpriseId
,
assistantStoreIds
);
}
private
List
<
GroupChatHmBO
>
handleLbs
(
GroupChatActivityHmQDTO
activityHmQDTO
)
throws
BusinessException
{
String
enterpriseId
=
activityHmQDTO
.
getEnterpriseId
();
String
wxEnterpriseId
=
activityHmQDTO
.
getChatActivity
().
getWxEnterpriseId
();
boolean
skipArea
=
activityHmQDTO
.
isSkipArea
();
if
(
skipArea
)
{
logger
.
info
(
"跳过LBS"
);
return
new
ArrayList
<>();
}
String
districtCode
=
activityHmQDTO
.
getDistrictCode
();
if
(
StringUtils
.
isBlank
(
districtCode
))
{
throw
new
BusinessException
(
"777"
,
"未获取到经纬度"
);
}
// 获取省市对应的门店
StoreSearchDTO
storeSearchDTO
=
new
StoreSearchDTO
();
storeSearchDTO
.
setEnterpriseId
(
enterpriseId
);
storeSearchDTO
.
setProvinceCityIdList
(
Lists
.
newArrayList
(
districtCode
));
storeSearchDTO
.
setStatus
(
"2"
);
List
<
String
>
storeIds
=
this
.
storeService
.
listStoreIds
(
storeSearchDTO
);
if
(
CollectionUtils
.
isEmpty
(
storeIds
))
{
return
new
ArrayList
<>();
}
//获取storeId对应活码
Map
<
String
,
List
<
GroupChatHmBO
>>
storeToHmMap
=
getStoreIdToGroupChatHmBOMap
(
enterpriseId
,
wxEnterpriseId
,
storeIds
);
if
(
MapUtil
.
isEmpty
(
storeToHmMap
))
{
return
new
ArrayList
<>();
}
Set
<
String
>
storeIdSet
=
storeToHmMap
.
keySet
();
//获取最近的一个门店
List
<
StoreDTO
>
stores
=
storeService
.
getStores
(
storeIdSet
.
toArray
(
new
String
[
0
]));
if
(
CollectionUtils
.
isEmpty
(
stores
))
{
return
new
ArrayList
<>();
}
String
storeId
=
stores
.
get
(
0
).
getStoreId
();
List
<
StoreDTO
>
sortStores
=
stores
.
stream
().
filter
(
x
->
StringUtils
.
isNotBlank
(
x
.
getLatitude
())
&&
StringUtils
.
isNotBlank
(
x
.
getLongitude
()))
.
sorted
(
Comparator
.
comparing
(
x
->
DistanceUtil
.
getDistance
(
Double
.
parseDouble
(
x
.
getLatitude
()),
Double
.
parseDouble
(
x
.
getLongitude
()),
Double
.
parseDouble
(
activityHmQDTO
.
getLatitude
()),
Double
.
parseDouble
(
activityHmQDTO
.
getLongitude
())))).
collect
(
Collectors
.
toList
());
if
(
CollectionUtils
.
isNotEmpty
(
sortStores
))
{
storeId
=
sortStores
.
get
(
0
).
getStoreId
();
}
logger
.
info
(
"最近的门店id:{}"
,
storeId
);
return
storeToHmMap
.
get
(
storeId
);
}
private
List
<
GroupChatHmBO
>
getByStoreIdList
(
String
enterpriseId
,
String
wxEnterpriseId
,
List
<
String
>
storeIdList
)
{
logger
.
info
(
"门店id列表:{}"
,
JSON
.
toJSONString
(
storeIdList
));
// 获取导购列表
Page
<
ClerkDTO
>
page
=
clerkService
.
listClerkByNameOrCodePage
(
enterpriseId
,
""
,
storeIdList
,
2
,
1
,
1000
);
List
<
ClerkDTO
>
clerkList
=
page
.
getResult
();
if
(
CollectionUtils
.
isEmpty
(
clerkList
))
{
logger
.
info
(
"导购不存在"
);
return
new
ArrayList
<>();
}
// 获取导购ID列表
List
<
String
>
clerkIdList
=
clerkList
.
stream
().
map
(
ClerkDTO:
:
getClerkId
).
collect
(
Collectors
.
toList
());
// 通过导购id查询staffId
List
<
StaffClerkRelationDTO
>
relationDTOList
=
staffClerkRelationService
.
listBindCode
(
wxEnterpriseId
,
enterpriseId
,
new
HashSet
<>(
clerkIdList
));
if
(
CollectionUtils
.
isEmpty
(
relationDTOList
))
{
logger
.
info
(
"导购staff关联不存在"
);
return
new
ArrayList
<>();
}
List
<
String
>
staffIdList
=
relationDTOList
.
stream
().
map
(
StaffClerkRelationDTO:
:
getStaffId
).
collect
(
Collectors
.
toList
());
if
(
CollectionUtils
.
isEmpty
(
staffIdList
))
{
return
new
ArrayList
<>();
}
// 通过staffId查询群
List
<
TabGroupChat
>
groupChatList
=
groupChatMapper
.
listByStaffIds
(
enterpriseId
,
staffIdList
);
if
(
CollectionUtils
.
isEmpty
(
groupChatList
))
{
logger
.
info
(
"导购关联社群关联不存在"
);
return
new
ArrayList
<>();
}
List
<
Long
>
groupChatIdList
=
groupChatList
.
stream
().
map
(
TabGroupChat:
:
getGroupChatId
).
collect
(
Collectors
.
toList
());
List
<
TabGroupChatHmRelation
>
chatHmList
=
groupChatHmRelationMapper
.
listChatHmByGroupChatIds
(
groupChatIdList
);
if
(
CollectionUtils
.
isEmpty
(
chatHmList
))
{
return
new
ArrayList
<>();
}
List
<
Long
>
chatHmIdList
=
chatHmList
.
stream
().
map
(
TabGroupChatHmRelation:
:
getChatHmId
).
collect
(
Collectors
.
toList
());
BasePageInfo
basePageInfo
=
new
BasePageInfo
();
basePageInfo
.
setPageNum
(
1
);
basePageInfo
.
setPageSize
(
1000
);
ChatHmSearchQDTO
hmSearchQDTO
=
new
ChatHmSearchQDTO
();
hmSearchQDTO
.
setEnterpriseId
(
enterpriseId
);
hmSearchQDTO
.
setWxEnterpriseId
(
wxEnterpriseId
);
hmSearchQDTO
.
setChatHmIdList
(
chatHmIdList
);
hmSearchQDTO
.
setStatus
(
1
);
Page
<
GroupChatHmBO
>
listPage
=
groupChatHmService
.
listPage
(
hmSearchQDTO
,
basePageInfo
);
return
listPage
.
getResult
();
}
private
Map
<
String
,
List
<
GroupChatHmBO
>>
getStoreIdToGroupChatHmBOMap
(
String
enterpriseId
,
String
wxEnterpriseId
,
List
<
String
>
storeIdList
)
{
logger
.
info
(
"门店id列表:{}"
,
JSON
.
toJSONString
(
storeIdList
));
Page
<
ClerkDTO
>
page
=
clerkService
.
listClerkByNameOrCodePage
(
enterpriseId
,
""
,
storeIdList
,
2
,
1
,
5000
);
List
<
ClerkDTO
>
clerkList
=
page
.
getResult
();
if
(
CollectionUtils
.
isEmpty
(
clerkList
))
{
logger
.
info
(
"导购不存在"
);
return
new
HashMap
<>();
}
List
<
String
>
clerkIdList
=
clerkList
.
stream
().
map
(
ClerkDTO:
:
getClerkId
).
collect
(
Collectors
.
toList
());
//通过导购id查询staffId
List
<
StaffClerkRelationDTO
>
relationDTOList
=
staffClerkRelationService
.
listBindCode
(
wxEnterpriseId
,
enterpriseId
,
new
HashSet
<>(
clerkIdList
));
if
(
CollectionUtils
.
isEmpty
(
relationDTOList
))
{
logger
.
info
(
"导购staff关联不存在"
);
return
new
HashMap
<>();
}
List
<
String
>
staffIdList
=
relationDTOList
.
stream
().
map
(
StaffClerkRelationDTO:
:
getStaffId
).
collect
(
Collectors
.
toList
());
if
(
CollectionUtils
.
isEmpty
(
staffIdList
))
{
return
new
HashMap
<>();
}
Map
<
String
,
Set
<
String
>>
storeToStaffMap
=
relationDTOList
.
stream
().
collect
(
Collectors
.
groupingBy
(
StaffClerkRelationDTO:
:
getStoreId
,
Collectors
.
mapping
(
StaffClerkRelationDTO:
:
getStaffId
,
Collectors
.
toSet
())));
//通过staffId查询群
List
<
TabGroupChat
>
groupChatList
=
groupChatMapper
.
listByStaffIds
(
enterpriseId
,
staffIdList
);
if
(
CollectionUtils
.
isEmpty
(
groupChatList
))
{
logger
.
info
(
"导购关联社群关联不存在"
);
return
new
HashMap
<>();
}
List
<
Long
>
groupChatIdList
=
groupChatList
.
stream
().
map
(
TabGroupChat:
:
getGroupChatId
).
collect
(
Collectors
.
toList
());
Map
<
String
,
Set
<
Long
>>
staffToGroupChatMap
=
groupChatList
.
stream
().
collect
(
Collectors
.
groupingBy
(
TabGroupChat:
:
getStaffId
,
Collectors
.
mapping
(
TabGroupChat:
:
getGroupChatId
,
Collectors
.
toSet
())));
List
<
TabGroupChatHmRelation
>
chatHmList
=
groupChatHmRelationMapper
.
listChatHmByGroupChatIds
(
groupChatIdList
);
if
(
CollectionUtils
.
isEmpty
(
chatHmList
))
{
return
new
HashMap
<>();
}
List
<
Long
>
chatHmIdList
=
chatHmList
.
stream
().
map
(
TabGroupChatHmRelation:
:
getChatHmId
).
collect
(
Collectors
.
toList
());
//通过群查询群活码
Map
<
Long
,
Set
<
Long
>>
groupChatToHmMap
=
chatHmList
.
stream
().
collect
(
Collectors
.
groupingBy
(
TabGroupChatHmRelation:
:
getGroupChatId
,
Collectors
.
mapping
(
TabGroupChatHmRelation:
:
getChatHmId
,
Collectors
.
toSet
())));
BasePageInfo
basePageInfo
=
new
BasePageInfo
();
basePageInfo
.
setPageNum
(
1
);
basePageInfo
.
setPageSize
(
1000
);
ChatHmSearchQDTO
hmSearchQDTO
=
new
ChatHmSearchQDTO
();
hmSearchQDTO
.
setEnterpriseId
(
enterpriseId
);
hmSearchQDTO
.
setWxEnterpriseId
(
wxEnterpriseId
);
hmSearchQDTO
.
setChatHmIdList
(
chatHmIdList
);
hmSearchQDTO
.
setStatus
(
1
);
Page
<
GroupChatHmBO
>
listPage
=
groupChatHmService
.
listPage
(
hmSearchQDTO
,
basePageInfo
);
if
(
CollectionUtils
.
isEmpty
(
listPage
.
getResult
()))
{
return
new
HashMap
<>();
}
Map
<
Long
,
GroupChatHmBO
>
groupHmMap
=
listPage
.
getResult
().
stream
().
collect
(
Collectors
.
toMap
(
GroupChatHmBO:
:
getChatHmId
,
v
->
v
,
(
e
,
x
)
->
e
));
Map
<
String
,
List
<
GroupChatHmBO
>>
storeIdToGroupChatHmBOMap
=
convertMap
(
storeToStaffMap
,
staffToGroupChatMap
,
groupChatToHmMap
,
groupHmMap
);
return
storeIdToGroupChatHmBOMap
;
}
private
static
Map
<
String
,
List
<
GroupChatHmBO
>>
convertMap
(
Map
<
String
,
Set
<
String
>>
storeToStaffMap
,
Map
<
String
,
Set
<
Long
>>
staffToGroupChatMap
,
Map
<
Long
,
Set
<
Long
>>
groupChatToHmMap
,
Map
<
Long
,
GroupChatHmBO
>
groupHmMap
)
{
// 1. 初始化结果Map,存储每个storeId对应的GroupChatHmBO列表
Map
<
String
,
List
<
GroupChatHmBO
>>
storeIdToGroupChatHmBOMap
=
new
HashMap
<>();
// 2. 遍历每个storeId
for
(
String
storeId
:
storeToStaffMap
.
keySet
())
{
Set
<
String
>
staffIds
=
storeToStaffMap
.
get
(
storeId
);
// 3. 获取该storeId对应的所有chatHmIds
Set
<
Long
>
chatHmIds
=
new
HashSet
<>();
for
(
String
staffId
:
staffIds
)
{
Set
<
Long
>
groupChatIds
=
staffToGroupChatMap
.
get
(
staffId
);
if
(
groupChatIds
!=
null
)
{
for
(
Long
groupChatId
:
groupChatIds
)
{
Set
<
Long
>
hmIds
=
groupChatToHmMap
.
get
(
groupChatId
);
if
(
hmIds
!=
null
)
{
chatHmIds
.
addAll
(
hmIds
);
}
}
}
}
// 4. 获取对应的GroupChatHmBO
List
<
GroupChatHmBO
>
groupChatHmBOList
=
new
ArrayList
<>();
for
(
Long
chatHmId
:
chatHmIds
)
{
GroupChatHmBO
groupChatHmBO
=
groupHmMap
.
get
(
chatHmId
);
if
(
groupChatHmBO
!=
null
)
{
groupChatHmBOList
.
add
(
groupChatHmBO
);
}
}
// 5. 将结果存入storeIdToGroupChatHmBOMap
if
(!
groupChatHmBOList
.
isEmpty
())
{
storeIdToGroupChatHmBOMap
.
put
(
storeId
,
groupChatHmBOList
);
}
}
return
storeIdToGroupChatHmBOMap
;
}
}
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