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
a9e8c0e5
Commit
a9e8c0e5
authored
Apr 12, 2023
by
徐高华
Browse files
Options
Browse Files
Download
Plain Diff
Merge branch 'master_欢迎语调整' into 'master'
Master 欢迎语调整 See merge request
!1132
parents
15e14991
9dbb0d90
Hide whitespace changes
Inline
Side-by-side
Showing
2 changed files
with
455 additions
and
460 deletions
+455
-460
WelcomeSendServiceImpl.java
...n/manage/service/service/impl/WelcomeSendServiceImpl.java
+454
-454
MemberUnionidRelatedApiServiceImpl.java
.../service/out/impl/MemberUnionidRelatedApiServiceImpl.java
+1
-6
No files found.
haoban-manage3-service/src/main/java/com/gic/haoban/manage/service/service/impl/WelcomeSendServiceImpl.java
View file @
a9e8c0e5
package
com
.
gic
.
haoban
.
manage
.
service
.
service
.
impl
;
import
java.util.ArrayList
;
import
java.util.List
;
import
java.util.Objects
;
import
org.apache.commons.collections.CollectionUtils
;
import
org.apache.commons.lang3.StringUtils
;
import
org.apache.logging.log4j.LogManager
;
import
org.apache.logging.log4j.Logger
;
import
org.springframework.beans.factory.annotation.Autowired
;
import
org.springframework.stereotype.Service
;
import
com.alibaba.fastjson.JSON
;
import
com.alibaba.fastjson.JSONObject
;
import
com.gic.api.base.commons.JSONResponse
;
import
com.gic.clerk.api.dto.ClerkDTO
;
import
com.gic.clerk.api.service.ClerkService
;
import
com.gic.commons.util.GICMQClientUtil
;
import
com.gic.dubbo.entity.ProviderLocalTag
;
import
com.gic.enterprise.api.dto.QRcodeDTO
;
import
com.gic.enterprise.api.service.ImageService
;
import
com.gic.haoban.manage.api.constants.Manage3Constants
;
import
com.gic.haoban.manage.api.dto.QwFrientNoticeDTO
;
import
com.gic.haoban.manage.api.dto.QywxErrorLogDTO
;
import
com.gic.haoban.manage.api.dto.StaffClerkRelationDTO
;
import
com.gic.haoban.manage.api.dto.WxEnterpriseQwDTO
;
import
com.gic.haoban.manage.api.dto.hm.HmClerkRelationDTO
;
import
com.gic.haoban.manage.api.dto.hm.HmQrcodeDTO
;
import
com.gic.haoban.manage.api.enums.WelcomeMediaTypeEnum
;
import
com.gic.haoban.manage.api.enums.hm.HmWelcomeReferType
;
import
com.gic.haoban.manage.api.service.hm.HmClerkRelationApiService
;
import
com.gic.haoban.manage.api.service.hm.HmQrcodeApiService
;
import
com.gic.haoban.manage.service.config.Config
;
import
com.gic.haoban.manage.service.dao.mapper.StaffMapper
;
import
com.gic.haoban.manage.service.entity.TabHaobanClerkMainStoreRelated
;
import
com.gic.haoban.manage.service.entity.TabHaobanStaff
;
import
com.gic.haoban.manage.service.entity.TabHaobanWxEnterprise
;
import
com.gic.haoban.manage.service.entity.TabMiniprogramSetting
;
import
com.gic.haoban.manage.service.pojo.bo.hm.KeyDataLinkBO
;
import
com.gic.haoban.manage.service.pojo.bo.welcome.WelcomeDetailBO
;
import
com.gic.haoban.manage.service.pojo.bo.welcome.WelcomeMediaBO
;
import
com.gic.haoban.manage.service.pojo.bo.welcome.WelcomeReferBO
;
import
com.gic.haoban.manage.service.service.ClerkMainStoreRelatedService
;
import
com.gic.haoban.manage.service.service.KeyDataService
;
import
com.gic.haoban.manage.service.service.MiniprogramSettingService
;
import
com.gic.haoban.manage.service.service.StaffClerkRelationService
;
import
com.gic.haoban.manage.service.service.WelcomeSendService
;
import
com.gic.haoban.manage.service.service.WelcomeService
;
import
com.gic.haoban.manage.service.service.WxEnterpriseService
;
import
com.gic.haoban.manage.service.util.CommonUtil
;
import
com.gic.haoban.manage.service.util.EmojiFilterUtil
;
import
com.gic.mq.sdk.GicMQClient
;
import
com.gic.wechat.api.dto.qywx.welcome.QywxExternalMessageBaseDTO
;
import
com.gic.wechat.api.dto.qywx.welcome.QywxFileExternalBaseDTO
;
import
com.gic.wechat.api.dto.qywx.welcome.QywxImageExternalBaseDTO
;
import
com.gic.wechat.api.dto.qywx.welcome.QywxLinkExternalBaseDTO
;
import
com.gic.wechat.api.dto.qywx.welcome.QywxMiniprogramExternalBaseDTO
;
import
com.gic.wechat.api.dto.qywx.welcome.QywxVideoExternalBaseDTO
;
import
com.gic.wechat.api.dto.qywx.welcome.QywxWelcomeMsgDTO
;
import
com.gic.wechat.api.enums.QywxMediaTypeEnum
;
import
com.gic.wechat.api.service.qywx.QywxSuiteApiService
;
import
com.gic.wechat.api.service.qywx.QywxUserApiService
;
import
cn.hutool.core.convert.Convert
;
import
cn.hutool.crypto.SecureUtil
;
@Service
public
class
WelcomeSendServiceImpl
implements
WelcomeSendService
{
private
static
final
Logger
log
=
LogManager
.
getLogger
(
WelcomeSendServiceImpl
.
class
);
@Autowired
private
QywxUserApiService
qywxUserApiService
;
@Autowired
private
WxEnterpriseService
wxEnterpriseService
;
@Autowired
private
ClerkService
clerkService
;
@Autowired
private
ClerkMainStoreRelatedService
clerkMainStoreRelatedService
;
@Autowired
private
Config
config
;
@Autowired
private
QywxSuiteApiService
qywxSuiteApiService
;
@Autowired
private
StaffClerkRelationService
staffClerkRelationService
;
@Autowired
private
MiniprogramSettingService
miniprogramSettingService
;
@Autowired
private
WelcomeService
welcomeService
;
@Autowired
private
ImageService
imageService
;
@Autowired
private
HmQrcodeApiService
hmQrcodeApiService
;
@Autowired
private
KeyDataService
keyDataService
;
@Autowired
private
HmClerkRelationApiService
hmClerkRelationApiService
;
@Autowired
private
StaffMapper
staffMapper
;
private
static
GicMQClient
clientInstance
=
GICMQClientUtil
.
getClientInstance
();
@Override
public
void
sendWelcome
(
String
params
)
{
log
.
info
(
"
发送欢迎语={}"
,
params
);
QwFrientNoticeDTO
dto
=
JSON
.
parseObject
(
params
,
QwFrientNoticeDTO
.
class
);
this
.
sendWelcome
(
dto
.
getCorpid
(),
dto
.
getExternalUserid
(),
dto
.
getWelcomeCode
(),
dto
.
getWxUserId
(),
dto
.
getState
());
}
/**
* 发送欢迎语
*
* @param dto
* @param wxEnterpriseDTO
* @param enterpriseId
* @param staffId
* {"data":{"welcomeCode":"J0GjdrsF-nZNac3Xc6V2K2p8OokQZcY4g0jxljdHc7A","wxUserId":"016903","suiteid":"selfSuiteId","corpid":"wxbde984c3488b837e","externalUserid":"wmSe9FEAAAy39F1NI6Z-THUUd9mkqOIw","changeType":"add_external_contact"},"type":1,"mqTraceId":"278473818-1-1679557069.126"}
*/
@Override
public
void
sendWelcome
(
String
corpid
,
String
externalUserId
,
String
welcomeCode
,
String
wxUserId
,
String
state
)
{
if
(
StringUtils
.
isEmpty
(
welcomeCode
))
{
log
.
error
(
"welcomeCode为空,externalUserId={}"
,
externalUserId
);
return
;
}
TabHaobanWxEnterprise
wxEnterprise
=
this
.
wxEnterpriseService
.
getEnterpriseBycorpId
(
corpid
);
if
(
wxEnterprise
==
null
)
{
log
.
info
(
"企业不存在,corpid={}"
,
corpid
);
return
;
}
String
wxEnterpriseId
=
wxEnterprise
.
getWxEnterpriseId
();
WxEnterpriseQwDTO
qwDTO
=
this
.
wxEnterpriseService
.
getQwInfo
(
wxEnterpriseId
);
if
(
qwDTO
==
null
)
{
log
.
info
(
"企业不存在,wxEnterpriseId={}"
,
wxEnterpriseId
);
return
;
}
TabHaobanStaff
staff
=
this
.
staffMapper
.
selectByUserIdAndEnterpriseId
(
wxUserId
,
wxEnterpriseId
);
if
(
null
==
staff
)
{
log
.
info
(
"成员不存在,wxUserid={}"
,
wxUserId
);
return
;
}
String
staffId
=
staff
.
getStaffId
();
log
.
info
(
"发送欢迎语,state={}"
,
state
);
String
relationKey
=
SecureUtil
.
md5
(
staffId
+
externalUserId
);
WelcomeDetailBO
welcomeBO
=
null
;
if
(
StringUtils
.
isNotBlank
(
state
)
&&
(
state
.
startsWith
(
Manage3Constants
.
HM
)
||
state
.
startsWith
(
Manage3Constants
.
DT
)))
{
WelcomeReferBO
welcomeReferBo
=
getWelcomeReferBo
(
state
);
welcomeBO
=
welcomeService
.
getMatchWelcomeWithReferId
(
staffId
,
wxEnterpriseId
,
welcomeReferBo
);
}
else
{
welcomeBO
=
welcomeService
.
getMatchWelcome
(
staffId
,
wxEnterpriseId
);
}
if
(
Objects
.
isNull
(
welcomeBO
))
{
log
.
info
(
"
欢迎语未配置wxEnterpriseId:{}"
,
wxEnterpriseId
);
return
;
}
// 内容
log
.
info
(
"欢迎语发送{}={}"
,
welcomeBO
.
getWelcomeId
(),
JSON
.
toJSONString
(
welcomeBO
));
String
content
=
welcomeBO
.
getWelcomeContent
();
if
(
content
.
contains
(
"<微信昵称>"
))
{
String
nickName
=
this
.
getExternalUserName
(
qwDTO
,
externalUserId
);
content
=
content
.
replaceAll
(
"<微信昵称>"
,
nickName
);
}
QywxWelcomeMsgDTO
qywxWelcomeMsgDTO
=
new
QywxWelcomeMsgDTO
();
// 欢迎语内容
qywxWelcomeMsgDTO
.
setText
(
content
);
// 欢迎语类型
List
<
QywxExternalMessageBaseDTO
>
attachments
=
new
ArrayList
<>();
// 开始设置欢迎语附件
List
<
WelcomeMediaBO
>
mediaList
=
welcomeBO
.
getWelcomeMediaList
();
mediaList
.
forEach
(
one
->
{
Integer
mediaType
=
one
.
getMediaType
();
if
(
WelcomeMediaTypeEnum
.
IMAGE
.
getCode
().
equals
(
mediaType
))
{
attachmentAddImage
(
attachments
,
one
,
corpid
);
}
if
(
WelcomeMediaTypeEnum
.
VIDEO
.
getCode
().
equals
(
mediaType
))
{
attachmentAddVideo
(
attachments
,
one
,
corpid
);
}
if
(
WelcomeMediaTypeEnum
.
FILE
.
getCode
().
equals
(
mediaType
))
{
attachmentAddFile
(
attachments
,
one
,
corpid
);
}
if
(
WelcomeMediaTypeEnum
.
LINK
.
getCode
().
equals
(
mediaType
))
{
attachmentAddLink
(
attachments
,
one
);
}
if
(
WelcomeMediaTypeEnum
.
PROGRAM
.
getCode
().
equals
(
mediaType
))
{
attachmentAddProgram
(
attachments
,
one
,
wxEnterpriseId
);
}
if
(
WelcomeMediaTypeEnum
.
PARAM_PROGRAM
.
getCode
().
equals
(
mediaType
)
||
WelcomeMediaTypeEnum
.
PARAM_QRCODE
.
getCode
().
equals
(
mediaType
))
{
String
clerkId
=
this
.
getClerkId
(
wxEnterpriseId
,
staffId
,
state
);
String
enterpriseId
=
null
;
if
(
null
!=
clerkId
)
{
ClerkDTO
clerk
=
this
.
clerkService
.
getclerkById
(
clerkId
);
if
(
null
!=
clerk
)
{
enterpriseId
=
clerk
.
getEnterpriseId
();
}
}
if
(
WelcomeMediaTypeEnum
.
PARAM_QRCODE
.
getCode
().
equals
(
mediaType
))
{
attachmentAddParamQrCode
(
attachments
,
enterpriseId
,
clerkId
,
corpid
,
relationKey
);
}
if
(
WelcomeMediaTypeEnum
.
PARAM_PROGRAM
.
getCode
().
equals
(
mediaType
))
{
attachmentAddParamProgram
(
attachments
,
enterpriseId
,
wxEnterpriseId
,
relationKey
);
}
}
});
if
(
CollectionUtils
.
isNotEmpty
(
attachments
))
{
qywxWelcomeMsgDTO
.
setAttachments
(
attachments
);
}
qywxWelcomeMsgDTO
.
setWelcomeCode
(
welcomeCode
);
String
result
=
this
.
qywxUserApiService
.
sendWelcomeMsgByExternal
(
corpid
,
config
.
getWxSuiteid
(),
qywxWelcomeMsgDTO
);
log
.
info
(
"发送欢迎语 params:{},返回={}"
,
JSON
.
toJSONString
(
qywxWelcomeMsgDTO
),
result
);
if
(
StringUtils
.
isNotBlank
(
result
))
{
JSONObject
json
=
JSON
.
parseObject
(
result
);
int
errcode
=
json
.
getIntValue
(
"errcode"
);
if
(
0
!=
errcode
)
{
try
{
QywxErrorLogDTO
errLog
=
new
QywxErrorLogDTO
();
errLog
.
setWxEnterpriseId
(
wxEnterpriseId
);
errLog
.
setExternalUserId
(
externalUserId
);
errLog
.
setTraceId
(
ProviderLocalTag
.
tag
.
get
().
traceId
);
errLog
.
setQywxErrorType
(
1
);
errLog
.
setScenario
(
"欢迎语"
);
errLog
.
setErrorContent
(
result
);
clientInstance
.
sendMessage
(
Manage3Constants
.
QYWX_ERROR_MSG
,
JSON
.
toJSONString
(
errLog
));
}
catch
(
Exception
e
)
{
log
.
error
(
"发送消息失败:{}"
,
e
.
getMessage
(),
e
);
}
}
}
}
/**
* 获取链接或者活码id
*/
private
WelcomeReferBO
getWelcomeReferBo
(
String
state
)
{
WelcomeReferBO
welcomeReferBo
=
new
WelcomeReferBO
();
String
id
=
state
.
substring
(
2
);
if
(
state
.
contains
(
Manage3Constants
.
HM
))
{
welcomeReferBo
.
setType
(
HmWelcomeReferType
.
HM
.
getCode
());
welcomeReferBo
.
setReferId
(
id
);
}
else
if
(
state
.
contains
(
Manage3Constants
.
DT
))
{
KeyDataLinkBO
dataForHmLink
=
keyDataService
.
getDataForHmLink
(
id
);
if
(
dataForHmLink
!=
null
)
{
welcomeReferBo
.
setType
(
HmWelcomeReferType
.
LINK
.
getCode
());
welcomeReferBo
.
setReferId
(
Convert
.
toStr
(
dataForHmLink
.
getLinkId
()));
}
}
return
welcomeReferBo
;
}
private
void
attachmentAddImage
(
List
<
QywxExternalMessageBaseDTO
>
attachments
,
WelcomeMediaBO
media
,
String
corpid
)
{
String
mediaUrl
=
media
.
getMediaUrl
();
String
[]
arr
=
mediaUrl
.
split
(
"/"
);
JSONResponse
jp
=
qywxSuiteApiService
.
uploadMedia
(
corpid
,
config
.
getWxSuiteid
(),
CommonUtil
.
getFileByte
(
mediaUrl
),
arr
[
arr
.
length
-
1
],
QywxMediaTypeEnum
.
IMAGE
.
getCode
());
log
.
info
(
"欢迎语发送图片返回:{}"
,
JSON
.
toJSONString
(
jp
));
if
(
jp
.
getErrorCode
()
==
0
)
{
QywxImageExternalBaseDTO
qywxImageExternalBaseDTO
=
new
QywxImageExternalBaseDTO
();
qywxImageExternalBaseDTO
.
setMediaId
(
jp
.
getResult
().
toString
());
attachments
.
add
(
qywxImageExternalBaseDTO
);
}
}
private
void
attachmentAddVideo
(
List
<
QywxExternalMessageBaseDTO
>
attachments
,
WelcomeMediaBO
media
,
String
corpid
)
{
String
mediaUrl
=
media
.
getMediaUrl
();
String
[]
arr
=
mediaUrl
.
split
(
"/"
);
JSONResponse
jp
=
qywxSuiteApiService
.
uploadMedia
(
corpid
,
config
.
getWxSuiteid
(),
CommonUtil
.
getFileByte
(
mediaUrl
),
arr
[
arr
.
length
-
1
],
QywxMediaTypeEnum
.
VIDEO
.
getCode
());
log
.
info
(
"欢迎语发送视频返回:{}"
,
JSON
.
toJSONString
(
jp
));
if
(
jp
.
getErrorCode
()
==
0
)
{
QywxVideoExternalBaseDTO
qywxVideoExternalBaseDTO
=
new
QywxVideoExternalBaseDTO
();
qywxVideoExternalBaseDTO
.
setMediaId
(
jp
.
getResult
().
toString
());
attachments
.
add
(
qywxVideoExternalBaseDTO
);
}
}
private
void
attachmentAddFile
(
List
<
QywxExternalMessageBaseDTO
>
attachments
,
WelcomeMediaBO
media
,
String
corpid
)
{
String
mediaUrl
=
media
.
getMediaUrl
();
String
[]
arr
=
mediaUrl
.
split
(
"/"
);
JSONResponse
jp
=
qywxSuiteApiService
.
uploadMedia
(
corpid
,
config
.
getWxSuiteid
(),
CommonUtil
.
getFileByte
(
mediaUrl
),
arr
[
arr
.
length
-
1
],
QywxMediaTypeEnum
.
FILE
.
getCode
());
log
.
info
(
"欢迎语发送文件返回:{}"
,
JSON
.
toJSONString
(
jp
));
if
(
jp
.
getErrorCode
()
==
0
)
{
QywxFileExternalBaseDTO
qywxFileExternalBaseDTO
=
new
QywxFileExternalBaseDTO
();
qywxFileExternalBaseDTO
.
setMediaId
(
jp
.
getResult
().
toString
());
attachments
.
add
(
qywxFileExternalBaseDTO
);
}
}
private
void
attachmentAddLink
(
List
<
QywxExternalMessageBaseDTO
>
attachments
,
WelcomeMediaBO
media
)
{
String
mediaTitle
=
media
.
getMediaTitle
();
String
mediaUrl
=
media
.
getMediaUrl
();
QywxLinkExternalBaseDTO
qywxLinkExternalBaseDTO
=
new
QywxLinkExternalBaseDTO
();
qywxLinkExternalBaseDTO
.
setTitle
(
mediaTitle
);
qywxLinkExternalBaseDTO
.
setUrl
(
mediaUrl
);
attachments
.
add
(
qywxLinkExternalBaseDTO
);
}
private
void
attachmentAddProgram
(
List
<
QywxExternalMessageBaseDTO
>
attachments
,
WelcomeMediaBO
media
,
String
wxEnterpriseId
)
{
log
.
info
(
"发送小程序:wxEnterpriseId:{}"
,
wxEnterpriseId
);
String
miniprogramSettingId
=
media
.
getMiniprogramSettingId
();
TabMiniprogramSetting
miniprogramSetting
=
miniprogramSettingService
.
getById
(
miniprogramSettingId
);
if
(
Objects
.
isNull
(
miniprogramSetting
)
||
miniprogramSetting
.
getStatusFlag
()
==
0
)
{
log
.
info
(
"小程序不存在或已被删除, miniprogramSettingId:{}"
,
miniprogramSettingId
);
return
;
}
QywxMiniprogramExternalBaseDTO
messageBaseDTO
=
new
QywxMiniprogramExternalBaseDTO
();
messageBaseDTO
.
setAppid
(
miniprogramSetting
.
getAppId
());
messageBaseDTO
.
setPicMediaId
(
miniprogramSetting
.
getMediaId
());
messageBaseDTO
.
setTitle
(
miniprogramSetting
.
getTitle
());
messageBaseDTO
.
setPage
(
media
.
getMiniProgramPage
());
attachments
.
add
(
messageBaseDTO
);
}
private
void
attachmentAddParamProgram
(
List
<
QywxExternalMessageBaseDTO
>
attachments
,
String
enterpriseId
,
String
wxEnterpriseId
,
String
relationKey
)
{
if
(
StringUtils
.
isEmpty
(
enterpriseId
)
||
StringUtils
.
isEmpty
(
relationKey
))
{
log
.
info
(
"带参二维码无法发送"
);
return
;
}
log
.
info
(
"发送带参小程序:wxEnterpriseId:{}"
,
wxEnterpriseId
);
// 发送小程序
TabMiniprogramSetting
miniprogramSetting
=
miniprogramSettingService
.
getMiniprogramSetting
(
wxEnterpriseId
,
enterpriseId
);
if
(
null
==
miniprogramSetting
)
{
log
.
info
(
"需要配置小程序配置:wxEnterpriseId:{},enterpriseId:{}"
,
wxEnterpriseId
,
enterpriseId
);
return
;
}
QywxMiniprogramExternalBaseDTO
messageBaseDTO
=
new
QywxMiniprogramExternalBaseDTO
();
messageBaseDTO
.
setAppid
(
miniprogramSetting
.
getAppId
());
messageBaseDTO
.
setPicMediaId
(
miniprogramSetting
.
getMediaId
());
messageBaseDTO
.
setTitle
(
miniprogramSetting
.
getTitle
());
messageBaseDTO
.
setPage
(
config
.
getMemberOpenPage
()
+
relationKey
);
attachments
.
add
(
messageBaseDTO
);
}
private
void
attachmentAddParamQrCode
(
List
<
QywxExternalMessageBaseDTO
>
attachments
,
String
enterpriseId
,
String
clerkId
,
String
corpid
,
String
relationKey
)
{
if
(
StringUtils
.
isEmpty
(
enterpriseId
)
||
StringUtils
.
isEmpty
(
clerkId
))
{
log
.
info
(
"带参小程序无法发送"
);
return
;
}
// 带参数的公众号二维码
String
sceneStr
=
"QWHY_"
+
relationKey
+
"_"
+
clerkId
;
// 30天失效
QRcodeDTO
qRcodePic
=
imageService
.
getQRcodePic
(
enterpriseId
,
sceneStr
,
2592000
);
log
.
info
(
"参数的公众号二维码返回:{}"
,
JSON
.
toJSONString
(
qRcodePic
));
if
(
qRcodePic
!=
null
)
{
String
downloadUrl
=
qRcodePic
.
getPicUploadResDTO
().
downloadUrl
;
String
[]
arr
=
downloadUrl
.
split
(
"/"
);
JSONResponse
jp
=
qywxSuiteApiService
.
uploadMedia
(
corpid
,
config
.
getWxSuiteid
(),
CommonUtil
.
getFileByte
(
downloadUrl
),
arr
[
arr
.
length
-
1
],
QywxMediaTypeEnum
.
IMAGE
.
getCode
());
log
.
info
(
"欢迎语发送带参数的公众号企微二维码返回:{}"
,
JSON
.
toJSONString
(
jp
));
if
(
jp
.
getErrorCode
()
==
0
)
{
QywxImageExternalBaseDTO
qywxImageExternalBaseDTO
=
new
QywxImageExternalBaseDTO
();
qywxImageExternalBaseDTO
.
setMediaId
(
jp
.
getResult
().
toString
());
attachments
.
add
(
qywxImageExternalBaseDTO
);
}
}
}
private
String
getExternalUserName
(
WxEnterpriseQwDTO
qwDTO
,
String
externalUserId
)
{
log
.
info
(
"查询好友详情,externalUserId={}"
,
externalUserId
);
String
userInfo
=
qywxUserApiService
.
getExternalUseridInfo
(
qwDTO
.
getThirdCorpid
(),
config
.
getWxSuiteid
(),
externalUserId
);
String
name
=
""
;
if
(
StringUtils
.
isBlank
(
userInfo
))
{
log
.
info
(
"好友不存在"
);
return
name
;
}
if
(
"1"
.
equals
(
userInfo
))
{
log
.
info
(
"限制次数"
);
return
name
;
}
if
(
StringUtils
.
isNotBlank
(
userInfo
))
{
JSONObject
userJson
=
JSON
.
parseObject
(
userInfo
);
String
external_contact
=
userJson
.
getString
(
"external_contact"
);
JSONObject
jt
=
null
;
if
(
StringUtils
.
isNotBlank
(
external_contact
))
{
jt
=
JSON
.
parseObject
(
external_contact
);
name
=
EmojiFilterUtil
.
filterEmojiLast
(
jt
.
getString
(
"name"
),
true
);
}
}
return
name
;
}
private
String
getClerkId
(
String
wxEnterpriseId
,
String
staffId
,
String
state
)
{
String
hyClerkId
=
null
;
Long
hmId
=
null
;
if
(
StringUtils
.
isNotBlank
(
state
)
&&
(
state
.
startsWith
(
Manage3Constants
.
HM
)
||
state
.
startsWith
(
Manage3Constants
.
DT
)))
{
String
id
=
state
.
substring
(
2
);
if
(
state
.
startsWith
(
Manage3Constants
.
HM
))
{
hmId
=
Convert
.
toLong
(
id
);
}
else
if
(
state
.
startsWith
(
Manage3Constants
.
DT
))
{
KeyDataLinkBO
linkData
=
keyDataService
.
getDataForHmLink
(
id
);
if
(
null
!=
linkData
)
{
hmId
=
linkData
.
getHmId
();
}
}
if
(
null
!=
hmId
)
{
HmQrcodeDTO
hmDTO
=
hmQrcodeApiService
.
getSimpleById
(
hmId
);
if
(
hmDTO
!=
null
)
{
hyClerkId
=
this
.
getHmClerk
(
hmDTO
,
wxEnterpriseId
,
staffId
);
log
.
info
(
"获取到活码导购={},hmId={}"
,
hyClerkId
,
hmId
);
}
}
}
if
(
StringUtils
.
isEmpty
(
hyClerkId
))
{
TabHaobanClerkMainStoreRelated
mainStoreRelated
=
clerkMainStoreRelatedService
.
getMainStoreByStaffId
(
staffId
,
wxEnterpriseId
);
if
(
mainStoreRelated
!=
null
)
{
StaffClerkRelationDTO
staffClerkRelationDTO
=
staffClerkRelationService
.
getOneBindByStoreId
(
staffId
,
mainStoreRelated
.
getStoreId
());
if
(
null
!=
staffClerkRelationDTO
)
{
hyClerkId
=
staffClerkRelationDTO
.
getClerkId
();
log
.
info
(
"获取成员关联导购={}"
,
hyClerkId
);
}
}
}
return
hyClerkId
;
}
@Override
public
String
getHmClerk
(
HmQrcodeDTO
hmDTO
,
String
wxEnterpriseId
,
String
staffId
)
{
Long
hmId
=
hmDTO
.
getHmId
();
if
(
hmDTO
.
getHmType
()
==
1
)
{
return
hmDTO
.
getClerkId
();
}
else
if
(
hmDTO
.
getHmType
()
==
2
)
{
// 有主门店导购绑定主导购,没有主门店导购绑定第一个导购,其余随机
HmClerkRelationDTO
hmClerkRelationDTO
=
null
;
TabHaobanClerkMainStoreRelated
mainStoreRelated
=
clerkMainStoreRelatedService
.
getMainStoreByStaffId
(
staffId
,
wxEnterpriseId
);
if
(
mainStoreRelated
!=
null
)
{
StaffClerkRelationDTO
relationDTO
=
staffClerkRelationService
.
getOneBindByStoreId
(
staffId
,
mainStoreRelated
.
getStoreId
());
hmClerkRelationDTO
=
hmClerkRelationApiService
.
getHmClerkByHmIdAndClerkId
(
hmId
,
relationDTO
.
getClerkId
());
if
(
hmClerkRelationDTO
==
null
)
{
hmClerkRelationDTO
=
hmClerkRelationApiService
.
getOneHmClerkByHmIdAndStaffId
(
hmId
,
staffId
);
if
(
hmClerkRelationDTO
==
null
)
{
hmClerkRelationDTO
=
hmClerkRelationApiService
.
getOneHmClerkByHmId
(
hmId
);
}
}
}
else
{
hmClerkRelationDTO
=
hmClerkRelationApiService
.
getOneHmClerkByHmId
(
hmId
);
}
return
hmClerkRelationDTO
.
getClerkId
();
}
return
null
;
}
}
package
com
.
gic
.
haoban
.
manage
.
service
.
service
.
impl
;
import
java.util.ArrayList
;
import
java.util.List
;
import
java.util.Objects
;
import
org.apache.commons.collections.CollectionUtils
;
import
org.apache.commons.lang3.StringUtils
;
import
org.apache.logging.log4j.LogManager
;
import
org.apache.logging.log4j.Logger
;
import
org.springframework.beans.factory.annotation.Autowired
;
import
org.springframework.stereotype.Service
;
import
com.alibaba.fastjson.JSON
;
import
com.alibaba.fastjson.JSONObject
;
import
com.gic.api.base.commons.JSONResponse
;
import
com.gic.clerk.api.dto.ClerkDTO
;
import
com.gic.clerk.api.service.ClerkService
;
import
com.gic.commons.util.GICMQClientUtil
;
import
com.gic.dubbo.entity.ProviderLocalTag
;
import
com.gic.enterprise.api.dto.QRcodeDTO
;
import
com.gic.enterprise.api.service.ImageService
;
import
com.gic.haoban.manage.api.constants.Manage3Constants
;
import
com.gic.haoban.manage.api.dto.QwFrientNoticeDTO
;
import
com.gic.haoban.manage.api.dto.QywxErrorLogDTO
;
import
com.gic.haoban.manage.api.dto.StaffClerkRelationDTO
;
import
com.gic.haoban.manage.api.dto.WxEnterpriseQwDTO
;
import
com.gic.haoban.manage.api.dto.hm.HmClerkRelationDTO
;
import
com.gic.haoban.manage.api.dto.hm.HmQrcodeDTO
;
import
com.gic.haoban.manage.api.enums.WelcomeMediaTypeEnum
;
import
com.gic.haoban.manage.api.enums.hm.HmWelcomeReferType
;
import
com.gic.haoban.manage.api.service.hm.HmClerkRelationApiService
;
import
com.gic.haoban.manage.api.service.hm.HmQrcodeApiService
;
import
com.gic.haoban.manage.service.config.Config
;
import
com.gic.haoban.manage.service.dao.mapper.StaffMapper
;
import
com.gic.haoban.manage.service.entity.TabHaobanClerkMainStoreRelated
;
import
com.gic.haoban.manage.service.entity.TabHaobanStaff
;
import
com.gic.haoban.manage.service.entity.TabHaobanWxEnterprise
;
import
com.gic.haoban.manage.service.entity.TabMiniprogramSetting
;
import
com.gic.haoban.manage.service.pojo.bo.hm.KeyDataLinkBO
;
import
com.gic.haoban.manage.service.pojo.bo.welcome.WelcomeDetailBO
;
import
com.gic.haoban.manage.service.pojo.bo.welcome.WelcomeMediaBO
;
import
com.gic.haoban.manage.service.pojo.bo.welcome.WelcomeReferBO
;
import
com.gic.haoban.manage.service.service.ClerkMainStoreRelatedService
;
import
com.gic.haoban.manage.service.service.KeyDataService
;
import
com.gic.haoban.manage.service.service.MiniprogramSettingService
;
import
com.gic.haoban.manage.service.service.StaffClerkRelationService
;
import
com.gic.haoban.manage.service.service.WelcomeSendService
;
import
com.gic.haoban.manage.service.service.WelcomeService
;
import
com.gic.haoban.manage.service.service.WxEnterpriseService
;
import
com.gic.haoban.manage.service.util.CommonUtil
;
import
com.gic.haoban.manage.service.util.EmojiFilterUtil
;
import
com.gic.mq.sdk.GicMQClient
;
import
com.gic.wechat.api.dto.qywx.welcome.QywxExternalMessageBaseDTO
;
import
com.gic.wechat.api.dto.qywx.welcome.QywxFileExternalBaseDTO
;
import
com.gic.wechat.api.dto.qywx.welcome.QywxImageExternalBaseDTO
;
import
com.gic.wechat.api.dto.qywx.welcome.QywxLinkExternalBaseDTO
;
import
com.gic.wechat.api.dto.qywx.welcome.QywxMiniprogramExternalBaseDTO
;
import
com.gic.wechat.api.dto.qywx.welcome.QywxVideoExternalBaseDTO
;
import
com.gic.wechat.api.dto.qywx.welcome.QywxWelcomeMsgDTO
;
import
com.gic.wechat.api.enums.QywxMediaTypeEnum
;
import
com.gic.wechat.api.service.qywx.QywxSuiteApiService
;
import
com.gic.wechat.api.service.qywx.QywxUserApiService
;
import
cn.hutool.core.convert.Convert
;
import
cn.hutool.crypto.SecureUtil
;
@Service
public
class
WelcomeSendServiceImpl
implements
WelcomeSendService
{
private
static
final
Logger
log
=
LogManager
.
getLogger
(
WelcomeSendServiceImpl
.
class
);
@Autowired
private
QywxUserApiService
qywxUserApiService
;
@Autowired
private
WxEnterpriseService
wxEnterpriseService
;
@Autowired
private
ClerkService
clerkService
;
@Autowired
private
ClerkMainStoreRelatedService
clerkMainStoreRelatedService
;
@Autowired
private
Config
config
;
@Autowired
private
QywxSuiteApiService
qywxSuiteApiService
;
@Autowired
private
StaffClerkRelationService
staffClerkRelationService
;
@Autowired
private
MiniprogramSettingService
miniprogramSettingService
;
@Autowired
private
WelcomeService
welcomeService
;
@Autowired
private
ImageService
imageService
;
@Autowired
private
HmQrcodeApiService
hmQrcodeApiService
;
@Autowired
private
KeyDataService
keyDataService
;
@Autowired
private
HmClerkRelationApiService
hmClerkRelationApiService
;
@Autowired
private
StaffMapper
staffMapper
;
private
static
GicMQClient
clientInstance
=
GICMQClientUtil
.
getClientInstance
();
@Override
public
void
sendWelcome
(
String
params
)
{
log
.
info
(
"
新发送欢迎语={}"
,
params
);
QwFrientNoticeDTO
dto
=
JSON
.
parseObject
(
params
,
QwFrientNoticeDTO
.
class
);
this
.
sendWelcome
(
dto
.
getCorpid
(),
dto
.
getExternalUserid
(),
dto
.
getWelcomeCode
(),
dto
.
getWxUserId
(),
dto
.
getState
());
}
/**
* 发送欢迎语
*
* @param dto
* @param wxEnterpriseDTO
* @param enterpriseId
* @param staffId
* {"data":{"welcomeCode":"J0GjdrsF-nZNac3Xc6V2K2p8OokQZcY4g0jxljdHc7A","wxUserId":"016903","suiteid":"selfSuiteId","corpid":"wxbde984c3488b837e","externalUserid":"wmSe9FEAAAy39F1NI6Z-THUUd9mkqOIw","changeType":"add_external_contact"},"type":1,"mqTraceId":"278473818-1-1679557069.126"}
*/
@Override
public
void
sendWelcome
(
String
corpid
,
String
externalUserId
,
String
welcomeCode
,
String
wxUserId
,
String
state
)
{
if
(
StringUtils
.
isEmpty
(
welcomeCode
))
{
log
.
error
(
"welcomeCode为空,externalUserId={}"
,
externalUserId
);
return
;
}
TabHaobanWxEnterprise
wxEnterprise
=
this
.
wxEnterpriseService
.
getEnterpriseBycorpId
(
corpid
);
if
(
wxEnterprise
==
null
)
{
log
.
info
(
"企业不存在,corpid={}"
,
corpid
);
return
;
}
String
wxEnterpriseId
=
wxEnterprise
.
getWxEnterpriseId
();
WxEnterpriseQwDTO
qwDTO
=
this
.
wxEnterpriseService
.
getQwInfo
(
wxEnterpriseId
);
if
(
qwDTO
==
null
)
{
log
.
info
(
"企业不存在,wxEnterpriseId={}"
,
wxEnterpriseId
);
return
;
}
TabHaobanStaff
staff
=
this
.
staffMapper
.
selectByUserIdAndEnterpriseId
(
wxUserId
,
wxEnterpriseId
);
if
(
null
==
staff
)
{
log
.
info
(
"成员不存在,wxUserid={}"
,
wxUserId
);
return
;
}
String
staffId
=
staff
.
getStaffId
();
log
.
info
(
"发送欢迎语,state={}"
,
state
);
String
relationKey
=
SecureUtil
.
md5
(
staffId
+
externalUserId
);
WelcomeDetailBO
welcomeBO
=
null
;
if
(
StringUtils
.
isNotBlank
(
state
)
&&
(
state
.
startsWith
(
Manage3Constants
.
HM
)
||
state
.
startsWith
(
Manage3Constants
.
DT
)))
{
WelcomeReferBO
welcomeReferBo
=
getWelcomeReferBo
(
state
);
welcomeBO
=
welcomeService
.
getMatchWelcomeWithReferId
(
staffId
,
wxEnterpriseId
,
welcomeReferBo
);
}
else
{
welcomeBO
=
welcomeService
.
getMatchWelcome
(
staffId
,
wxEnterpriseId
);
}
if
(
Objects
.
isNull
(
welcomeBO
))
{
log
.
info
(
"
活码欢迎语未配置wxEnterpriseId:{}"
,
wxEnterpriseId
);
return
;
}
// 内容
log
.
info
(
"欢迎语发送{}={}"
,
welcomeBO
.
getWelcomeId
(),
JSON
.
toJSONString
(
welcomeBO
));
String
content
=
welcomeBO
.
getWelcomeContent
();
if
(
content
.
contains
(
"<微信昵称>"
))
{
String
nickName
=
this
.
getExternalUserName
(
qwDTO
,
externalUserId
);
content
=
content
.
replaceAll
(
"<微信昵称>"
,
nickName
);
}
QywxWelcomeMsgDTO
qywxWelcomeMsgDTO
=
new
QywxWelcomeMsgDTO
();
// 欢迎语内容
qywxWelcomeMsgDTO
.
setText
(
content
);
// 欢迎语类型
List
<
QywxExternalMessageBaseDTO
>
attachments
=
new
ArrayList
<>();
// 开始设置欢迎语附件
List
<
WelcomeMediaBO
>
mediaList
=
welcomeBO
.
getWelcomeMediaList
();
mediaList
.
forEach
(
one
->
{
Integer
mediaType
=
one
.
getMediaType
();
if
(
WelcomeMediaTypeEnum
.
IMAGE
.
getCode
().
equals
(
mediaType
))
{
attachmentAddImage
(
attachments
,
one
,
corpid
);
}
if
(
WelcomeMediaTypeEnum
.
VIDEO
.
getCode
().
equals
(
mediaType
))
{
attachmentAddVideo
(
attachments
,
one
,
corpid
);
}
if
(
WelcomeMediaTypeEnum
.
FILE
.
getCode
().
equals
(
mediaType
))
{
attachmentAddFile
(
attachments
,
one
,
corpid
);
}
if
(
WelcomeMediaTypeEnum
.
LINK
.
getCode
().
equals
(
mediaType
))
{
attachmentAddLink
(
attachments
,
one
);
}
if
(
WelcomeMediaTypeEnum
.
PROGRAM
.
getCode
().
equals
(
mediaType
))
{
attachmentAddProgram
(
attachments
,
one
,
wxEnterpriseId
);
}
if
(
WelcomeMediaTypeEnum
.
PARAM_PROGRAM
.
getCode
().
equals
(
mediaType
)
||
WelcomeMediaTypeEnum
.
PARAM_QRCODE
.
getCode
().
equals
(
mediaType
))
{
String
clerkId
=
this
.
getClerkId
(
wxEnterpriseId
,
staffId
,
state
);
String
enterpriseId
=
null
;
if
(
null
!=
clerkId
)
{
ClerkDTO
clerk
=
this
.
clerkService
.
getclerkById
(
clerkId
);
if
(
null
!=
clerk
)
{
enterpriseId
=
clerk
.
getEnterpriseId
();
}
}
if
(
WelcomeMediaTypeEnum
.
PARAM_QRCODE
.
getCode
().
equals
(
mediaType
))
{
attachmentAddParamQrCode
(
attachments
,
enterpriseId
,
clerkId
,
corpid
,
relationKey
);
}
if
(
WelcomeMediaTypeEnum
.
PARAM_PROGRAM
.
getCode
().
equals
(
mediaType
))
{
attachmentAddParamProgram
(
attachments
,
enterpriseId
,
wxEnterpriseId
,
relationKey
);
}
}
});
if
(
CollectionUtils
.
isNotEmpty
(
attachments
))
{
qywxWelcomeMsgDTO
.
setAttachments
(
attachments
);
}
qywxWelcomeMsgDTO
.
setWelcomeCode
(
welcomeCode
);
String
result
=
this
.
qywxUserApiService
.
sendWelcomeMsgByExternal
(
corpid
,
config
.
getWxSuiteid
(),
qywxWelcomeMsgDTO
);
log
.
info
(
"发送欢迎语 params:{},返回={}"
,
JSON
.
toJSONString
(
qywxWelcomeMsgDTO
),
result
);
if
(
StringUtils
.
isNotBlank
(
result
))
{
JSONObject
json
=
JSON
.
parseObject
(
result
);
int
errcode
=
json
.
getIntValue
(
"errcode"
);
if
(
0
!=
errcode
)
{
try
{
QywxErrorLogDTO
errLog
=
new
QywxErrorLogDTO
();
errLog
.
setWxEnterpriseId
(
wxEnterpriseId
);
errLog
.
setExternalUserId
(
externalUserId
);
errLog
.
setTraceId
(
ProviderLocalTag
.
tag
.
get
().
traceId
);
errLog
.
setQywxErrorType
(
1
);
errLog
.
setScenario
(
"欢迎语"
);
errLog
.
setErrorContent
(
result
);
clientInstance
.
sendMessage
(
Manage3Constants
.
QYWX_ERROR_MSG
,
JSON
.
toJSONString
(
errLog
));
}
catch
(
Exception
e
)
{
log
.
error
(
"发送消息失败:{}"
,
e
.
getMessage
(),
e
);
}
}
}
}
/**
* 获取链接或者活码id
*/
private
WelcomeReferBO
getWelcomeReferBo
(
String
state
)
{
WelcomeReferBO
welcomeReferBo
=
new
WelcomeReferBO
();
String
id
=
state
.
substring
(
2
);
if
(
state
.
contains
(
Manage3Constants
.
HM
))
{
welcomeReferBo
.
setType
(
HmWelcomeReferType
.
HM
.
getCode
());
welcomeReferBo
.
setReferId
(
id
);
}
else
if
(
state
.
contains
(
Manage3Constants
.
DT
))
{
KeyDataLinkBO
dataForHmLink
=
keyDataService
.
getDataForHmLink
(
id
);
if
(
dataForHmLink
!=
null
)
{
welcomeReferBo
.
setType
(
HmWelcomeReferType
.
LINK
.
getCode
());
welcomeReferBo
.
setReferId
(
Convert
.
toStr
(
dataForHmLink
.
getLinkId
()));
}
}
return
welcomeReferBo
;
}
private
void
attachmentAddImage
(
List
<
QywxExternalMessageBaseDTO
>
attachments
,
WelcomeMediaBO
media
,
String
corpid
)
{
String
mediaUrl
=
media
.
getMediaUrl
();
String
[]
arr
=
mediaUrl
.
split
(
"/"
);
JSONResponse
jp
=
qywxSuiteApiService
.
uploadMedia
(
corpid
,
config
.
getWxSuiteid
(),
CommonUtil
.
getFileByte
(
mediaUrl
),
arr
[
arr
.
length
-
1
],
QywxMediaTypeEnum
.
IMAGE
.
getCode
());
log
.
info
(
"欢迎语发送图片返回:{}"
,
JSON
.
toJSONString
(
jp
));
if
(
jp
.
getErrorCode
()
==
0
)
{
QywxImageExternalBaseDTO
qywxImageExternalBaseDTO
=
new
QywxImageExternalBaseDTO
();
qywxImageExternalBaseDTO
.
setMediaId
(
jp
.
getResult
().
toString
());
attachments
.
add
(
qywxImageExternalBaseDTO
);
}
}
private
void
attachmentAddVideo
(
List
<
QywxExternalMessageBaseDTO
>
attachments
,
WelcomeMediaBO
media
,
String
corpid
)
{
String
mediaUrl
=
media
.
getMediaUrl
();
String
[]
arr
=
mediaUrl
.
split
(
"/"
);
JSONResponse
jp
=
qywxSuiteApiService
.
uploadMedia
(
corpid
,
config
.
getWxSuiteid
(),
CommonUtil
.
getFileByte
(
mediaUrl
),
arr
[
arr
.
length
-
1
],
QywxMediaTypeEnum
.
VIDEO
.
getCode
());
log
.
info
(
"欢迎语发送视频返回:{}"
,
JSON
.
toJSONString
(
jp
));
if
(
jp
.
getErrorCode
()
==
0
)
{
QywxVideoExternalBaseDTO
qywxVideoExternalBaseDTO
=
new
QywxVideoExternalBaseDTO
();
qywxVideoExternalBaseDTO
.
setMediaId
(
jp
.
getResult
().
toString
());
attachments
.
add
(
qywxVideoExternalBaseDTO
);
}
}
private
void
attachmentAddFile
(
List
<
QywxExternalMessageBaseDTO
>
attachments
,
WelcomeMediaBO
media
,
String
corpid
)
{
String
mediaUrl
=
media
.
getMediaUrl
();
String
[]
arr
=
mediaUrl
.
split
(
"/"
);
JSONResponse
jp
=
qywxSuiteApiService
.
uploadMedia
(
corpid
,
config
.
getWxSuiteid
(),
CommonUtil
.
getFileByte
(
mediaUrl
),
arr
[
arr
.
length
-
1
],
QywxMediaTypeEnum
.
FILE
.
getCode
());
log
.
info
(
"欢迎语发送文件返回:{}"
,
JSON
.
toJSONString
(
jp
));
if
(
jp
.
getErrorCode
()
==
0
)
{
QywxFileExternalBaseDTO
qywxFileExternalBaseDTO
=
new
QywxFileExternalBaseDTO
();
qywxFileExternalBaseDTO
.
setMediaId
(
jp
.
getResult
().
toString
());
attachments
.
add
(
qywxFileExternalBaseDTO
);
}
}
private
void
attachmentAddLink
(
List
<
QywxExternalMessageBaseDTO
>
attachments
,
WelcomeMediaBO
media
)
{
String
mediaTitle
=
media
.
getMediaTitle
();
String
mediaUrl
=
media
.
getMediaUrl
();
QywxLinkExternalBaseDTO
qywxLinkExternalBaseDTO
=
new
QywxLinkExternalBaseDTO
();
qywxLinkExternalBaseDTO
.
setTitle
(
mediaTitle
);
qywxLinkExternalBaseDTO
.
setUrl
(
mediaUrl
);
attachments
.
add
(
qywxLinkExternalBaseDTO
);
}
private
void
attachmentAddProgram
(
List
<
QywxExternalMessageBaseDTO
>
attachments
,
WelcomeMediaBO
media
,
String
wxEnterpriseId
)
{
log
.
info
(
"发送小程序:wxEnterpriseId:{}"
,
wxEnterpriseId
);
String
miniprogramSettingId
=
media
.
getMiniprogramSettingId
();
TabMiniprogramSetting
miniprogramSetting
=
miniprogramSettingService
.
getById
(
miniprogramSettingId
);
if
(
Objects
.
isNull
(
miniprogramSetting
)
||
miniprogramSetting
.
getStatusFlag
()
==
0
)
{
log
.
info
(
"小程序不存在或已被删除, miniprogramSettingId:{}"
,
miniprogramSettingId
);
return
;
}
QywxMiniprogramExternalBaseDTO
messageBaseDTO
=
new
QywxMiniprogramExternalBaseDTO
();
messageBaseDTO
.
setAppid
(
miniprogramSetting
.
getAppId
());
messageBaseDTO
.
setPicMediaId
(
miniprogramSetting
.
getMediaId
());
messageBaseDTO
.
setTitle
(
miniprogramSetting
.
getTitle
());
messageBaseDTO
.
setPage
(
media
.
getMiniProgramPage
());
attachments
.
add
(
messageBaseDTO
);
}
private
void
attachmentAddParamProgram
(
List
<
QywxExternalMessageBaseDTO
>
attachments
,
String
enterpriseId
,
String
wxEnterpriseId
,
String
relationKey
)
{
if
(
StringUtils
.
isEmpty
(
enterpriseId
)
||
StringUtils
.
isEmpty
(
relationKey
))
{
log
.
info
(
"带参二维码无法发送"
);
return
;
}
log
.
info
(
"发送带参小程序:wxEnterpriseId:{}"
,
wxEnterpriseId
);
// 发送小程序
TabMiniprogramSetting
miniprogramSetting
=
miniprogramSettingService
.
getMiniprogramSetting
(
wxEnterpriseId
,
enterpriseId
);
if
(
null
==
miniprogramSetting
)
{
log
.
info
(
"需要配置小程序配置:wxEnterpriseId:{},enterpriseId:{}"
,
wxEnterpriseId
,
enterpriseId
);
return
;
}
QywxMiniprogramExternalBaseDTO
messageBaseDTO
=
new
QywxMiniprogramExternalBaseDTO
();
messageBaseDTO
.
setAppid
(
miniprogramSetting
.
getAppId
());
messageBaseDTO
.
setPicMediaId
(
miniprogramSetting
.
getMediaId
());
messageBaseDTO
.
setTitle
(
miniprogramSetting
.
getTitle
());
messageBaseDTO
.
setPage
(
config
.
getMemberOpenPage
()
+
relationKey
);
attachments
.
add
(
messageBaseDTO
);
}
private
void
attachmentAddParamQrCode
(
List
<
QywxExternalMessageBaseDTO
>
attachments
,
String
enterpriseId
,
String
clerkId
,
String
corpid
,
String
relationKey
)
{
if
(
StringUtils
.
isEmpty
(
enterpriseId
)
||
StringUtils
.
isEmpty
(
clerkId
))
{
log
.
info
(
"带参小程序无法发送"
);
return
;
}
// 带参数的公众号二维码
String
sceneStr
=
"QWHY_"
+
relationKey
+
"_"
+
clerkId
;
// 30天失效
QRcodeDTO
qRcodePic
=
imageService
.
getQRcodePic
(
enterpriseId
,
sceneStr
,
2592000
);
log
.
info
(
"参数的公众号二维码返回:{}"
,
JSON
.
toJSONString
(
qRcodePic
));
if
(
qRcodePic
!=
null
)
{
String
downloadUrl
=
qRcodePic
.
getPicUploadResDTO
().
downloadUrl
;
String
[]
arr
=
downloadUrl
.
split
(
"/"
);
JSONResponse
jp
=
qywxSuiteApiService
.
uploadMedia
(
corpid
,
config
.
getWxSuiteid
(),
CommonUtil
.
getFileByte
(
downloadUrl
),
arr
[
arr
.
length
-
1
],
QywxMediaTypeEnum
.
IMAGE
.
getCode
());
log
.
info
(
"欢迎语发送带参数的公众号企微二维码返回:{}"
,
JSON
.
toJSONString
(
jp
));
if
(
jp
.
getErrorCode
()
==
0
)
{
QywxImageExternalBaseDTO
qywxImageExternalBaseDTO
=
new
QywxImageExternalBaseDTO
();
qywxImageExternalBaseDTO
.
setMediaId
(
jp
.
getResult
().
toString
());
attachments
.
add
(
qywxImageExternalBaseDTO
);
}
}
}
private
String
getExternalUserName
(
WxEnterpriseQwDTO
qwDTO
,
String
externalUserId
)
{
log
.
info
(
"查询好友详情,externalUserId={}"
,
externalUserId
);
String
userInfo
=
qywxUserApiService
.
getExternalUseridInfo
(
qwDTO
.
getThirdCorpid
(),
config
.
getWxSuiteid
(),
externalUserId
);
String
name
=
""
;
if
(
StringUtils
.
isBlank
(
userInfo
))
{
log
.
info
(
"好友不存在"
);
return
name
;
}
if
(
"1"
.
equals
(
userInfo
))
{
log
.
info
(
"限制次数"
);
return
name
;
}
if
(
StringUtils
.
isNotBlank
(
userInfo
))
{
JSONObject
userJson
=
JSON
.
parseObject
(
userInfo
);
String
external_contact
=
userJson
.
getString
(
"external_contact"
);
JSONObject
jt
=
null
;
if
(
StringUtils
.
isNotBlank
(
external_contact
))
{
jt
=
JSON
.
parseObject
(
external_contact
);
name
=
EmojiFilterUtil
.
filterEmojiLast
(
jt
.
getString
(
"name"
),
true
);
}
}
return
name
;
}
private
String
getClerkId
(
String
wxEnterpriseId
,
String
staffId
,
String
state
)
{
String
hyClerkId
=
null
;
Long
hmId
=
null
;
if
(
StringUtils
.
isNotBlank
(
state
)
&&
(
state
.
startsWith
(
Manage3Constants
.
HM
)
||
state
.
startsWith
(
Manage3Constants
.
DT
)))
{
String
id
=
state
.
substring
(
2
);
if
(
state
.
startsWith
(
Manage3Constants
.
HM
))
{
hmId
=
Convert
.
toLong
(
id
);
}
else
if
(
state
.
startsWith
(
Manage3Constants
.
DT
))
{
KeyDataLinkBO
linkData
=
keyDataService
.
getDataForHmLink
(
id
);
if
(
null
!=
linkData
)
{
hmId
=
linkData
.
getHmId
();
}
}
if
(
null
!=
hmId
)
{
HmQrcodeDTO
hmDTO
=
hmQrcodeApiService
.
getSimpleById
(
hmId
);
if
(
hmDTO
!=
null
)
{
hyClerkId
=
this
.
getHmClerk
(
hmDTO
,
wxEnterpriseId
,
staffId
);
log
.
info
(
"获取到活码导购={},hmId={}"
,
hyClerkId
,
hmId
);
}
}
}
if
(
StringUtils
.
isEmpty
(
hyClerkId
))
{
TabHaobanClerkMainStoreRelated
mainStoreRelated
=
clerkMainStoreRelatedService
.
getMainStoreByStaffId
(
staffId
,
wxEnterpriseId
);
if
(
mainStoreRelated
!=
null
)
{
StaffClerkRelationDTO
staffClerkRelationDTO
=
staffClerkRelationService
.
getOneBindByStoreId
(
staffId
,
mainStoreRelated
.
getStoreId
());
if
(
null
!=
staffClerkRelationDTO
)
{
hyClerkId
=
staffClerkRelationDTO
.
getClerkId
();
log
.
info
(
"获取成员关联导购={}"
,
hyClerkId
);
}
}
}
return
hyClerkId
;
}
@Override
public
String
getHmClerk
(
HmQrcodeDTO
hmDTO
,
String
wxEnterpriseId
,
String
staffId
)
{
Long
hmId
=
hmDTO
.
getHmId
();
if
(
hmDTO
.
getHmType
()
==
1
)
{
return
hmDTO
.
getClerkId
();
}
else
if
(
hmDTO
.
getHmType
()
==
2
)
{
// 有主门店导购绑定主导购,没有主门店导购绑定第一个导购,其余随机
HmClerkRelationDTO
hmClerkRelationDTO
=
null
;
TabHaobanClerkMainStoreRelated
mainStoreRelated
=
clerkMainStoreRelatedService
.
getMainStoreByStaffId
(
staffId
,
wxEnterpriseId
);
if
(
mainStoreRelated
!=
null
)
{
StaffClerkRelationDTO
relationDTO
=
staffClerkRelationService
.
getOneBindByStoreId
(
staffId
,
mainStoreRelated
.
getStoreId
());
hmClerkRelationDTO
=
hmClerkRelationApiService
.
getHmClerkByHmIdAndClerkId
(
hmId
,
relationDTO
.
getClerkId
());
if
(
hmClerkRelationDTO
==
null
)
{
hmClerkRelationDTO
=
hmClerkRelationApiService
.
getOneHmClerkByHmIdAndStaffId
(
hmId
,
staffId
);
if
(
hmClerkRelationDTO
==
null
)
{
hmClerkRelationDTO
=
hmClerkRelationApiService
.
getOneHmClerkByHmId
(
hmId
);
}
}
}
else
{
hmClerkRelationDTO
=
hmClerkRelationApiService
.
getOneHmClerkByHmId
(
hmId
);
}
return
hmClerkRelationDTO
.
getClerkId
();
}
return
null
;
}
}
haoban-manage3-service/src/main/java/com/gic/haoban/manage/service/service/out/impl/MemberUnionidRelatedApiServiceImpl.java
View file @
a9e8c0e5
...
...
@@ -362,13 +362,8 @@ public class MemberUnionidRelatedApiServiceImpl implements MemberUnionidRelatedA
if
(
this
.
mqCheck
(
dto
))
{
mqName
=
"dealQywxExternalUserMq2"
;
}
Object
t
=
RedisUtil
.
getCache
(
"dealQywxExternalUserMqWelcome-test"
);
int
delay
=
0
;
if
(
null
!=
t
)
{
delay
=
(
int
)
t
;
}
try
{
instance
.
sendMessage
(
mqName
,
JSONObject
.
toJSONString
(
dealQywxExternalUserPojo
)
,
delay
);
instance
.
sendMessage
(
mqName
,
JSONObject
.
toJSONString
(
dealQywxExternalUserPojo
));
}
catch
(
Exception
e
)
{
log
.
info
(
"异步处理异常:{}"
,
e
);
}
...
...
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