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
f8c642ce
Commit
f8c642ce
authored
Nov 09, 2022
by
徐高华
Browse files
Options
Browse Files
Download
Email Patches
Plain Diff
群发
parent
95f510a5
Show whitespace changes
Inline
Side-by-side
Showing
6 changed files
with
458 additions
and
17 deletions
+458
-17
ContentMaterialDTO.java
...ava/com/gic/haoban/manage/api/dto/ContentMaterialDTO.java
+29
-0
MemberUnionidRelatedApiService.java
...an/manage/api/service/MemberUnionidRelatedApiService.java
+1
-17
TabMaterialContentMapper.java
...n/manage/service/dao/mapper/TabMaterialContentMapper.java
+28
-0
TabMaterialContent.java
.../gic/haoban/manage/service/entity/TabMaterialContent.java
+125
-0
QywxSendService.java
...om/gic/haoban/manage/service/service/QywxSendService.java
+27
-0
QywxSendServiceImpl.java
...oban/manage/service/service/impl/QywxSendServiceImpl.java
+248
-0
No files found.
haoban-manage3-api/src/main/java/com/gic/haoban/manage/api/dto/ContentMaterialDTO.java
0 → 100644
View file @
f8c642ce
package
com
.
gic
.
haoban
.
manage
.
api
.
dto
;
import
java.io.Serializable
;
public
class
ContentMaterialDTO
implements
Serializable
{
private
static
final
long
serialVersionUID
=
-
8114034921530488238L
;
// 素材类型, 1文本, 2图片, 3网页, 4视频, 5文件,6小程序
private
int
materialType
;
private
String
imgUrl
;
public
String
getImgUrl
()
{
return
imgUrl
;
}
public
void
setImgUrl
(
String
imgUrl
)
{
this
.
imgUrl
=
imgUrl
;
}
public
int
getMaterialType
()
{
return
materialType
;
}
public
void
setMaterialType
(
int
materialType
)
{
this
.
materialType
=
materialType
;
}
}
haoban-manage3-api/src/main/java/com/gic/haoban/manage/api/service/MemberUnionidRelatedApiService.java
View file @
f8c642ce
...
...
@@ -60,19 +60,6 @@ public interface MemberUnionidRelatedApiService {
List
<
MemberStoreDTO
>
listByExTernalUseridAndWxUserId
(
String
externalUserid
,
String
staffId
,
String
storeId
);
/**
* 群发助手发送企业微信消息
*
* @param wxEnterpriseId
* @param staffId
* @param extendUserList
* @param materialId
* @return {@link String }
* @author mozhu
* @date 2022-01-13 10:50:44
*/
String
sendMessage
(
String
wxEnterpriseId
,
String
staffId
,
List
<
String
>
extendUserList
,
String
materialId
);
/**
* 创建企业群发, 支出素材批量发送
*
* @param wxEnterpriseId : 微信企业id
...
...
@@ -81,10 +68,7 @@ public interface MemberUnionidRelatedApiService {
* @param materialIdList : 素材id列表
* @return : 返回群发执行结果
*/
JSONResponse
sendMessage
(
String
wxEnterpriseId
,
String
staffId
,
List
<
String
>
extendUserList
,
List
<
String
>
materialIdList
);
JSONResponse
sendMessage
(
String
wxEnterpriseId
,
String
staffId
,
List
<
String
>
extendUserList
,
List
<
String
>
materialIdList
,
String
ecmPlanId
);
JSONResponse
sendMessage
(
String
wxEnterpriseId
,
String
staffId
,
List
<
String
>
extendUserList
,
List
<
String
>
materialIdList
,
String
planId
);
/**
* 获取群发成员发送任务列表
...
...
haoban-manage3-service/src/main/java/com/gic/haoban/manage/service/dao/mapper/TabMaterialContentMapper.java
0 → 100644
View file @
f8c642ce
package
com
.
gic
.
haoban
.
manage
.
service
.
dao
.
mapper
;
import
org.apache.ibatis.annotations.Param
;
import
com.gic.haoban.manage.service.entity.TabMaterialContent
;
/**
*
* @ClassName: 内容中台-素材
* @Description: TODO
* @Author 徐高华
* @Date 2022年11月08日 15:24:22
* @Modify
* @CopyRight
*/
public
interface
TabMaterialContentMapper
{
public
int
insert
(
TabMaterialContent
entity
);
public
int
updateByPrimaryKey
(
TabMaterialContent
entity
);
public
TabMaterialContent
selectByUrl
(
@Param
(
"wxEnterpriseId"
)
String
wxEnterpriesId
,
@Param
(
"urlMd5"
)
String
urlMd5
);
public
TabMaterialContent
selectById
(
String
id
)
;
}
\ No newline at end of file
haoban-manage3-service/src/main/java/com/gic/haoban/manage/service/entity/TabMaterialContent.java
0 → 100644
View file @
f8c642ce
package
com
.
gic
.
haoban
.
manage
.
service
.
entity
;
import
java.io.Serializable
;
/**
*
* @ClassName: TabHaobanMaterialContent
* @Description: TODO
* @Author 徐高华
* @Date 2022年11月08日 15:24:22
* @Modify
* @CopyRight
*/
public
class
TabMaterialContent
implements
Serializable
{
private
static
final
long
serialVersionUID
=
9984223961500L
;
/**素材id*/
private
String
materialId
;
/**素材类型, 1文本, 2图片, 3网页, 4视频, 5文件,6小程序*/
private
Integer
materialType
;
/**微信最后更新时间*/
private
java
.
util
.
Date
wxLastUploadTime
;
/**企业微信mediaid*/
private
String
mediaId
;
private
String
wxEnterpriseId
;
private
String
imgUrl
;
private
String
urlMd5
;
/**0删除1正常*/
private
Integer
statusFlag
;
/**创建时间*/
private
java
.
util
.
Date
createTime
;
/**修改时间*/
private
java
.
util
.
Date
updateTime
;
private
int
mediaType
;
public
int
getMediaType
()
{
return
mediaType
;
}
public
void
setMediaType
(
int
mediaType
)
{
this
.
mediaType
=
mediaType
;
}
public
void
setMaterialId
(
String
materialId
)
{
this
.
materialId
=
materialId
;
}
public
String
getMaterialId
()
{
return
materialId
;
}
public
void
setMaterialType
(
Integer
materialType
)
{
this
.
materialType
=
materialType
;
}
public
Integer
getMaterialType
()
{
return
materialType
;
}
public
void
setWxLastUploadTime
(
java
.
util
.
Date
wxLastUploadTime
)
{
this
.
wxLastUploadTime
=
wxLastUploadTime
;
}
public
java
.
util
.
Date
getWxLastUploadTime
()
{
return
wxLastUploadTime
;
}
public
void
setMediaId
(
String
mediaId
)
{
this
.
mediaId
=
mediaId
;
}
public
String
getMediaId
()
{
return
mediaId
;
}
public
void
setWxEnterpriseId
(
String
wxEnterpriseId
)
{
this
.
wxEnterpriseId
=
wxEnterpriseId
;
}
public
String
getWxEnterpriseId
()
{
return
wxEnterpriseId
;
}
public
void
setImgUrl
(
String
imgUrl
)
{
this
.
imgUrl
=
imgUrl
;
}
public
String
getImgUrl
()
{
return
imgUrl
;
}
public
void
setUrlMd5
(
String
urlMd5
)
{
this
.
urlMd5
=
urlMd5
;
}
public
String
getUrlMd5
()
{
return
urlMd5
;
}
public
void
setStatusFlag
(
Integer
statusFlag
)
{
this
.
statusFlag
=
statusFlag
;
}
public
Integer
getStatusFlag
()
{
return
statusFlag
;
}
public
void
setCreateTime
(
java
.
util
.
Date
createTime
)
{
this
.
createTime
=
createTime
;
}
public
java
.
util
.
Date
getCreateTime
()
{
return
createTime
;
}
public
void
setUpdateTime
(
java
.
util
.
Date
updateTime
)
{
this
.
updateTime
=
updateTime
;
}
public
java
.
util
.
Date
getUpdateTime
()
{
return
updateTime
;
}
}
\ No newline at end of file
haoban-manage3-service/src/main/java/com/gic/haoban/manage/service/service/QywxSendService.java
0 → 100644
View file @
f8c642ce
package
com
.
gic
.
haoban
.
manage
.
service
.
service
;
import
java.util.List
;
import
com.gic.api.base.commons.ServiceResponse
;
import
com.gic.haoban.manage.api.dto.ContentMaterialDTO
;
public
interface
QywxSendService
{
/**
* 企微群发-传入素材(ecm、群发助手)
*/
public
ServiceResponse
<
String
>
sendMessage
(
String
wxEnterpriseId
,
String
staffId
,
List
<
String
>
extendUserList
,
List
<
String
>
materialIdList
);
/**
* 素材-分享
*/
public
ServiceResponse
<
String
>
sendMessage
(
String
wxEnterpriseId
,
String
staffId
,
List
<
String
>
extendUserList
,
List
<
ContentMaterialDTO
>
imageList
,
String
message
);
/**
* 分享朋友圈
*/
public
ServiceResponse
<
String
>
share
(
String
wxEnterpriseId
,
List
<
String
>
clerkIdList
,
String
message
,
List
<
ContentMaterialDTO
>
imageList
);
}
haoban-manage3-service/src/main/java/com/gic/haoban/manage/service/service/impl/QywxSendServiceImpl.java
0 → 100644
View file @
f8c642ce
package
com
.
gic
.
haoban
.
manage
.
service
.
service
.
impl
;
import
java.util.ArrayList
;
import
java.util.List
;
import
java.util.Map
;
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.gic.api.base.commons.JSONResponse
;
import
com.gic.api.base.commons.ServiceResponse
;
import
com.gic.commons.util.EntityUtil
;
import
com.gic.haoban.common.utils.StringUtil
;
import
com.gic.haoban.manage.api.dto.ContentMaterialDTO
;
import
com.gic.haoban.manage.api.dto.MaterialDTO
;
import
com.gic.haoban.manage.api.dto.StaffClerkRelationDTO
;
import
com.gic.haoban.manage.api.dto.WxEnterpriseQwDTO
;
import
com.gic.haoban.manage.service.config.Config
;
import
com.gic.haoban.manage.service.dao.mapper.TabHaobanStaffClerkRelationMapper
;
import
com.gic.haoban.manage.service.dao.mapper.TabMaterialContentMapper
;
import
com.gic.haoban.manage.service.entity.TabHaobanStaff
;
import
com.gic.haoban.manage.service.entity.TabMaterialContent
;
import
com.gic.haoban.manage.service.service.MaterialService
;
import
com.gic.haoban.manage.service.service.QywxSendService
;
import
com.gic.haoban.manage.service.service.StaffService
;
import
com.gic.haoban.manage.service.service.WxEnterpriseService
;
import
com.gic.wechat.api.dto.qywx.QywxExternalMessageDTO
;
import
com.gic.wechat.api.dto.qywx.QywxImageMaterialDTO
;
import
com.gic.wechat.api.dto.qywx.QywxLinkMaterialDTO
;
import
com.gic.wechat.api.dto.qywx.QywxMessageMaterialDTO
;
import
com.gic.wechat.api.dto.qywx.QywxMiniprogramMaterialDTO
;
import
com.gic.wechat.api.dto.qywx.QywxVideoMaterialDTO
;
import
com.gic.wechat.api.dto.qywx.moment.MomentTaskDTO
;
import
com.gic.wechat.api.dto.qywx.moment.SenderList
;
import
com.gic.wechat.api.dto.qywx.moment.Text
;
import
com.gic.wechat.api.dto.qywx.moment.VisibleRange
;
import
com.gic.wechat.api.enums.QywxMediaTypeEnum
;
import
com.gic.wechat.api.service.qywx.QywxExternalUserService
;
import
com.gic.wechat.api.service.qywx.QywxSuiteApiService
;
import
com.gic.weimob.common.Md5Util
;
/**
*
* @ClassName: QywxSendApiServiceImpl
* @Description: 企业微信消息发送(群发、朋友圈)
* @author xugh
* @date 2022年11月8日 下午2:39:10
*
*/
@Service
public
class
QywxSendServiceImpl
implements
QywxSendService
{
private
static
final
Logger
log
=
LogManager
.
getLogger
(
QywxSendServiceImpl
.
class
);
@Autowired
private
WxEnterpriseService
wxEnterpriseService
;
@Autowired
private
MaterialService
materialService
;
@Autowired
private
Config
config
;
@Autowired
private
StaffService
staffService
;
@Autowired
private
QywxSuiteApiService
qywxSuiteApiService
;
@Autowired
private
TabMaterialContentMapper
tabMaterialContentMapper
;
@Autowired
private
QywxExternalUserService
qywxExternalUserService
;
@Autowired
private
TabHaobanStaffClerkRelationMapper
tabHaobanStaffClerkRelationMapper
;
@Autowired
public
ServiceResponse
<
String
>
sendMessage
(
String
wxEnterpriseId
,
String
staffId
,
List
<
String
>
extendUserList
,
List
<
String
>
materialIdList
)
{
return
this
.
send
(
wxEnterpriseId
,
staffId
,
extendUserList
,
materialIdList
,
null
,
1
);
}
public
ServiceResponse
<
String
>
sendMessage
(
String
wxEnterpriseId
,
String
staffId
,
List
<
String
>
extendUserList
,
List
<
ContentMaterialDTO
>
imageList
,
String
message
)
{
List
<
String
>
materialIdList
=
this
.
getImageMediaId
(
wxEnterpriseId
,
imageList
,
1
);
return
this
.
send
(
wxEnterpriseId
,
staffId
,
extendUserList
,
materialIdList
,
message
,
2
);
}
// 群发发送
private
ServiceResponse
<
String
>
send
(
String
wxEnterpriseId
,
String
staffId
,
List
<
String
>
extendUserList
,
List
<
String
>
materialIdList
,
String
message
,
int
from
)
{
TabHaobanStaff
tabHaobanStaff
=
staffService
.
selectById
(
staffId
);
if
(
null
==
tabHaobanStaff
)
{
log
.
info
(
"staff不存在,staffId={}"
,
staffId
);
return
ServiceResponse
.
failure
(
"9999"
,
"群发失败,成员不存在"
);
}
// 群发请求参数
QywxExternalMessageDTO
messageDTO
=
this
.
getMessage
(
from
,
message
,
materialIdList
);
if
(
messageDTO
.
getAttachments
().
isEmpty
()
&&
StringUtils
.
isBlank
(
messageDTO
.
getContent
()))
{
return
ServiceResponse
.
failure
(
"9999"
,
"群发素材不存在, 群发创建失败"
);
}
messageDTO
.
setExternalUserid
(
extendUserList
);
WxEnterpriseQwDTO
qwDTO
=
this
.
wxEnterpriseService
.
getQwInfo
(
wxEnterpriseId
);
if
(
qwDTO
.
needOpenUserId3th
())
{
messageDTO
.
setSenderUserId
(
tabHaobanStaff
.
getWxOpenUseId
());
}
else
{
messageDTO
.
setSenderUserId
(
tabHaobanStaff
.
getWxUserId
());
}
// 调接口执行创建群发
JSONResponse
respon
=
qywxSuiteApiService
.
sendExternalMessage
(
qwDTO
.
getThirdCorpid
(),
config
.
getWxSuiteid
(),
messageDTO
);
String
error
=
respon
.
getErrorMessage
()
;
Map
<
String
,
Object
>
returnMap
=
respon
.
getReturnMap
();
String
msgIdKey
=
"msgid"
;
String
msgId
=
returnMap
.
get
(
msgIdKey
)
==
null
?
""
:
returnMap
.
get
(
msgIdKey
).
toString
();
if
(
StringUtils
.
isEmpty
(
msgId
))
{
return
ServiceResponse
.
success
(
msgId
);
}
return
ServiceResponse
.
failure
(
"9999"
,
error
);
}
private
List
<
String
>
getImageMediaId
(
String
wxEnterpriseId
,
List
<
ContentMaterialDTO
>
imageList
,
int
mediaType
)
{
List
<
String
>
materialIdList
=
new
ArrayList
<>();
imageList
.
forEach
(
dto
->
{
String
imageUrl
=
dto
.
getImgUrl
();
int
type
=
dto
.
getMaterialType
();
String
md5
=
Md5Util
.
MD5
(
imageUrl
);
TabMaterialContent
tab
=
this
.
tabMaterialContentMapper
.
selectByUrl
(
wxEnterpriseId
,
md5
);
if
(
null
!=
tab
)
{
materialIdList
.
add
(
tab
.
getMaterialId
());
}
else
{
String
id
=
StringUtil
.
randomUUID
();
tab
=
new
TabMaterialContent
();
tab
.
setMaterialId
(
id
);
tab
.
setMaterialType
(
type
);
tab
.
setImgUrl
(
imageUrl
);
tab
.
setUrlMd5
(
md5
);
tab
.
setMediaType
(
mediaType
);
tab
.
setWxEnterpriseId
(
wxEnterpriseId
);
this
.
tabMaterialContentMapper
.
insert
(
tab
);
materialIdList
.
add
(
id
);
}
});
return
materialIdList
;
}
// 分享朋友圈
public
ServiceResponse
<
String
>
share
(
String
wxEnterpriseId
,
List
<
String
>
clerkIdList
,
String
message
,
List
<
ContentMaterialDTO
>
imageList
)
{
WxEnterpriseQwDTO
qwDTO
=
this
.
wxEnterpriseService
.
getQwInfo
(
wxEnterpriseId
);
List
<
String
>
materialIdList
=
this
.
getImageMediaId
(
wxEnterpriseId
,
imageList
,
2
);
QywxExternalMessageDTO
dto
=
this
.
getMessage
(
2
,
message
,
materialIdList
);
MomentTaskDTO
moment
=
EntityUtil
.
changeEntity
(
MomentTaskDTO
.
class
,
dto
);
Text
text
=
new
Text
();
text
.
setContent
(
dto
.
getContent
());
moment
.
setText
(
text
);
List
<
String
>
sendUser
=
new
ArrayList
<>();
List
<
StaffClerkRelationDTO
>
clerkList
=
this
.
tabHaobanStaffClerkRelationMapper
.
listByClerkIds
(
clerkIdList
,
wxEnterpriseId
);
if
(
CollectionUtils
.
isEmpty
(
clerkList
))
{
log
.
info
(
"无发送成员"
);
return
ServiceResponse
.
failure
(
"9999"
,
"无发送成员"
);
}
for
(
StaffClerkRelationDTO
item
:
clerkList
)
{
if
(
qwDTO
.
needOpenUserId3th
())
{
sendUser
.
add
(
item
.
getOpenUserId
());
}
else
{
sendUser
.
add
(
item
.
getQwUserId
());
}
}
SenderList
senderList
=
new
SenderList
();
senderList
.
setUser_list
(
sendUser
);
VisibleRange
range
=
new
VisibleRange
();
range
.
setSender_list
(
senderList
);
moment
.
setVisible_range
(
range
);
ServiceResponse
<
String
>
resp
=
this
.
qywxExternalUserService
.
addMomentTask
(
qwDTO
.
getThirdCorpid
(),
config
.
getWxSuiteid
(),
moment
);
log
.
info
(
"朋友圈消息={},返回={}"
,
JSON
.
toJSONString
(
moment
),
JSON
.
toJSONString
(
resp
));
return
resp
;
}
// from 1好办素材 2内容中台
private
QywxExternalMessageDTO
getMessage
(
int
from
,
String
message
,
List
<
String
>
materialIdList
)
{
QywxExternalMessageDTO
messageDTO
=
new
QywxExternalMessageDTO
();
messageDTO
.
setChatType
(
"single"
);
List
<
QywxMessageMaterialDTO
>
attachList
=
new
ArrayList
<>();
if
(
from
==
2
)
{
if
(
StringUtils
.
isNotBlank
(
message
))
{
messageDTO
.
setContent
(
message
);
}
}
if
(
CollectionUtils
.
isNotEmpty
(
materialIdList
))
{
materialIdList
.
forEach
(
materialId
->
{
MaterialDTO
material
=
materialService
.
getHasChangeMadieMaterialById
(
materialId
,
from
);
if
(
material
==
null
)
{
return
;
}
if
(
material
.
getMaterialType
()
==
1
)
{
messageDTO
.
setContent
(
material
.
getMaterialContent
());
}
else
{
attachList
.
add
(
this
.
getMessageMaterial
(
material
));
}
});
}
messageDTO
.
setAttachments
(
attachList
);
return
messageDTO
;
}
/**
* 素材发送对象构造
*/
private
QywxMessageMaterialDTO
getMessageMaterial
(
MaterialDTO
material
)
{
// 素材类型
Integer
materialType
=
material
.
getMaterialType
();
// 企微对应的id
String
maerialId
=
material
.
getMediaId
();
// 素材对象
QywxMessageMaterialDTO
dto
=
new
QywxMessageMaterialDTO
();
if
(
materialType
==
2
)
{
QywxImageMaterialDTO
imageMaterialDTO
=
new
QywxImageMaterialDTO
();
imageMaterialDTO
.
setMediaId
(
maerialId
);
dto
.
setMsgType
(
QywxMediaTypeEnum
.
IMAGE
.
getName
());
dto
.
setImage
(
imageMaterialDTO
);
}
else
if
(
materialType
==
3
)
{
QywxLinkMaterialDTO
linkMaterialDTO
=
new
QywxLinkMaterialDTO
();
linkMaterialDTO
.
setTitle
(
material
.
getMaterialTitle
());
linkMaterialDTO
.
setPicUrl
(
material
.
getWxImgUrl
());
linkMaterialDTO
.
setDesc
(
material
.
getMaterialDesc
());
linkMaterialDTO
.
setUrl
(
material
.
getLink
());
dto
.
setMsgType
(
QywxMediaTypeEnum
.
LINK
.
getName
());
dto
.
setLink
(
linkMaterialDTO
);
}
else
if
(
materialType
==
4
)
{
QywxVideoMaterialDTO
videoMaterialDTO
=
new
QywxVideoMaterialDTO
();
videoMaterialDTO
.
setMediaId
(
maerialId
);
dto
.
setMsgType
(
QywxMediaTypeEnum
.
VIDEO
.
getName
());
dto
.
setVideo
(
videoMaterialDTO
);
}
else
if
(
materialType
==
6
)
{
QywxMiniprogramMaterialDTO
miniprogramMaterialDTO
=
new
QywxMiniprogramMaterialDTO
();
miniprogramMaterialDTO
.
setTitle
(
material
.
getMaterialTitle
());
miniprogramMaterialDTO
.
setPicMediaId
(
maerialId
);
miniprogramMaterialDTO
.
setAppid
(
material
.
getAppId
());
miniprogramMaterialDTO
.
setPage
(
material
.
getLink
());
dto
.
setMsgType
(
QywxMediaTypeEnum
.
MINIPROGRAM
.
getName
());
dto
.
setMiniprogram
(
miniprogramMaterialDTO
);
}
return
dto
;
}
}
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