Commit f8c642ce by 徐高华

群发

parent 95f510a5
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;
}
}
...@@ -60,19 +60,6 @@ public interface MemberUnionidRelatedApiService { ...@@ -60,19 +60,6 @@ public interface MemberUnionidRelatedApiService {
List<MemberStoreDTO> listByExTernalUseridAndWxUserId(String externalUserid, String staffId, String storeId); 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 * @param wxEnterpriseId : 微信企业id
...@@ -81,10 +68,7 @@ public interface MemberUnionidRelatedApiService { ...@@ -81,10 +68,7 @@ public interface MemberUnionidRelatedApiService {
* @param materialIdList : 素材id列表 * @param materialIdList : 素材id列表
* @return : 返回群发执行结果 * @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 planId);
JSONResponse sendMessage(String wxEnterpriseId, String staffId, List<String> extendUserList, List<String> materialIdList , String ecmPlanId);
/** /**
* 获取群发成员发送任务列表 * 获取群发成员发送任务列表
......
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
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
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);
}
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;
}
}
Markdown is supported
0% or
You are about to add 0 people to the discussion. Proceed with caution.
Finish editing this message first!
Please register or to comment