Commit 19f14c80 by 墨竹

fix:欢迎语发送修改

parent f8ce4929
......@@ -18,13 +18,13 @@ public class MemberUnionidWechatAccountQDTO implements Serializable {
*/
private String unionid;
/**
* 导购id
* openId
*/
private String clerkId;
private String openId;
/**
* 微信企业id
* 参数
*/
private String wxEnterpriseId;
private String sceneStr;
public String getEnterpriseId() {
return enterpriseId;
......@@ -42,19 +42,19 @@ public class MemberUnionidWechatAccountQDTO implements Serializable {
this.unionid = unionid;
}
public String getClerkId() {
return clerkId;
public String getOpenId() {
return openId;
}
public void setClerkId(String clerkId) {
this.clerkId = clerkId;
public void setOpenId(String openId) {
this.openId = openId;
}
public String getWxEnterpriseId() {
return wxEnterpriseId;
public String getSceneStr() {
return sceneStr;
}
public void setWxEnterpriseId(String wxEnterpriseId) {
this.wxEnterpriseId = wxEnterpriseId;
public void setSceneStr(String sceneStr) {
this.sceneStr = sceneStr;
}
}
......@@ -14,7 +14,9 @@ import com.gic.clerk.api.service.PowerService;
import com.gic.commons.util.DateUtil;
import com.gic.commons.util.EntityUtil;
import com.gic.commons.util.GICMQClientUtil;
import com.gic.enterprise.api.dto.EnterpriseDTO;
import com.gic.enterprise.api.dto.StoreDTO;
import com.gic.enterprise.api.service.EnterpriseService;
import com.gic.enterprise.api.service.StoreService;
import com.gic.haoban.app.customer.dto.ChildDTO;
import com.gic.haoban.app.customer.dto.CustomerDTO;
......@@ -53,6 +55,7 @@ import com.gic.wechat.api.dto.qywx.welcome.QywxImageExternalBaseDTO;
import com.gic.wechat.api.dto.qywx.welcome.QywxMiniprogramExternalBaseDTO;
import com.gic.wechat.api.dto.qywx.welcome.QywxWelcomeMsgDTO;
import com.gic.wechat.api.enums.QywxMediaTypeEnum;
import com.gic.wechat.api.service.fwh.WeixinBaseFunService;
import com.gic.wechat.api.service.qywx.QywxSuiteApiService;
import com.gic.wechat.api.service.qywx.QywxUserApiService;
import com.github.pagehelper.PageHelper;
......@@ -62,6 +65,9 @@ import org.apache.commons.io.IOUtils;
import org.apache.commons.lang3.StringUtils;
import org.apache.logging.log4j.LogManager;
import org.apache.logging.log4j.Logger;
import org.redisson.api.RRateLimiter;
import org.redisson.api.RateIntervalUnit;
import org.redisson.api.RateType;
import org.springframework.beans.factory.annotation.Autowired;
import org.springframework.stereotype.Service;
......@@ -128,6 +134,10 @@ public class MemberUnionidRelatedApiServiceImpl implements MemberUnionidRelatedA
private WxApplicationMapper wxApplicationMapper;
@Autowired
private MemberApiService memberApiService;
@Autowired
private WeixinBaseFunService weixinBaseFunService;
@Autowired
private EnterpriseService enterpriseService;
@Override
public void dealQywxExternalUser(String params) {
......@@ -425,7 +435,7 @@ public class MemberUnionidRelatedApiServiceImpl implements MemberUnionidRelatedA
exsitDTO.setStatusFlag(1);
externalClerkRelatedService.update(exsitDTO);
}
sendWelcome(dto, wxEnterpriseId,enterpriseId,staffId, false);
sendWelcome(dto, wxEnterpriseId, enterpriseId, staffId, false);
//同步好友标签
pushTagSync(memberId, wxEnterpriseId, enterpriseId);
//回调给会员
......@@ -436,8 +446,7 @@ public class MemberUnionidRelatedApiServiceImpl implements MemberUnionidRelatedA
private static byte[] getFileByte(String url) {
try {
InputStream in = new URL(url).openStream();
byte[] data = IOUtils.toByteArray(in);
return data;
return IOUtils.toByteArray(in);
} catch (Exception e) {
log.info("【异常】" + e.getMessage(), e);
}
......@@ -455,7 +464,7 @@ public class MemberUnionidRelatedApiServiceImpl implements MemberUnionidRelatedA
String wxEnterpriseId = staffClerkRelationDTO.getWxEnterpriseId();
String enterpriseId = staffClerkRelationDTO.getEnterpriseId();
//发送欢迎语
sendWelcome(dto, wxEnterpriseId, enterpriseId, staffId, true);
sendWelcome(dto, wxEnterpriseId, enterpriseId, staffId, true);
//保存好友关系
List<TabHaobanExternalClerkRelated> externalClerkRelateds = externalClerkRelatedService.listByExTernalUseridAndWxUserIdAllStatus(wxEnterpriseId, dto.getExternalUserid(), dto.getWxUserId());
......@@ -494,6 +503,7 @@ public class MemberUnionidRelatedApiServiceImpl implements MemberUnionidRelatedA
/**
* 发送欢迎语
*
* @param dto
* @param wxEnterpriseId
* @param enterpriseId
......@@ -514,37 +524,56 @@ public class MemberUnionidRelatedApiServiceImpl implements MemberUnionidRelatedA
return;
}
String externalName = dto.getExternalName();
//内容
String content = tabWelcome.getWelcomeContent().replaceAll("<微信昵称>", externalName);
QywxWelcomeMsgDTO qywxWelcomeMsgDTO = new QywxWelcomeMsgDTO();
qywxWelcomeMsgDTO.setText(content);
//欢迎语类型
List<QywxExternalMessageBaseDTO> attachments = new ArrayList<>();
//发送小程序
if (sendApp) {
log.info("发送小程序:{}", 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);
}
//发送图片
String welcomeImg = tabWelcome.getWelcomeImg();
if (StringUtils.isNotBlank(welcomeImg)) {
String[] arr = welcomeImg.split("/");
int count = arr.length;
JSONResponse jp = qywxSuiteApiService.uploadMedia(wxEnterpriseDTO.getCorpid(), config.getWxSuiteid(), getFileByte(welcomeImg), arr[count - 1], QywxMediaTypeEnum.IMAGE.getCode());
log.info("欢迎语发送图片返回:{}", JSON.toJSONString(jp));
// TODO: 2022/2/9 带参数的公众号二维码等配置
if (false) {
//带参数的公众号二维码
EnterpriseDTO enterpriseDTO = enterpriseService.getEnterpriseById(enterpriseId);
String sceneStr = "QWHY_" + relationKey;
//7天失效
String temporaryQRcodeURL = weixinBaseFunService.getTemporaryQRcodeURL(enterpriseDTO.getAppkey(), sceneStr, 604800);
JSONResponse jp = qywxSuiteApiService.uploadMedia(wxEnterpriseDTO.getCorpid(), config.getWxSuiteid(), getFileByte(temporaryQRcodeURL),sceneStr, QywxMediaTypeEnum.IMAGE.getCode());
log.info("欢迎语发送带参数的公众号二维码返回:{}", JSON.toJSONString(jp));
if (jp.getErrorCode() == 0) {
QywxImageExternalBaseDTO qywxImageExternalBaseDTO = new QywxImageExternalBaseDTO();
qywxImageExternalBaseDTO.setMediaId(jp.getResult().toString());
attachments.add(qywxImageExternalBaseDTO);
}
} else {
//小程序
//发送小程序
if (sendApp) {
log.info("发送小程序:{}", 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);
}
//发送图片
String welcomeImg = tabWelcome.getWelcomeImg();
if (StringUtils.isNotBlank(welcomeImg)) {
String[] arr = welcomeImg.split("/");
int count = arr.length;
JSONResponse jp = qywxSuiteApiService.uploadMedia(wxEnterpriseDTO.getCorpid(), config.getWxSuiteid(), getFileByte(welcomeImg), arr[count - 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);
}
}
}
if (CollectionUtils.isNotEmpty(attachments)) {
qywxWelcomeMsgDTO.setAttachments(attachments);
......@@ -1538,7 +1567,7 @@ public class MemberUnionidRelatedApiServiceImpl implements MemberUnionidRelatedA
String clerkId = dto.getClerkId();
String selfExternalUserId = dto.getSelfExternalUserId();
if (StringUtils.isAnyBlank(wxUserId, selfExternalUserId, wxEnterpriseId, name, createTime, externalUserId, storeId, enterpriseId, staffId, clerkId)) {
log.error("参数不对:{}",JSON.toJSONString(dto));
log.error("参数不对:{}", JSON.toJSONString(dto));
return "参数不对";
}
String relationKey = SecureUtil.md5(staffId + externalUserId);
......@@ -1689,11 +1718,48 @@ public class MemberUnionidRelatedApiServiceImpl implements MemberUnionidRelatedA
@Override
public void addMemberUnionidWechatAccount(String res) {
log.info("通过查询unionid关联导购对外联系人id接口,res:{}", res);
JSONObject jsonObject = JSON.parseObject(res);
String unionid = jsonObject.getString("unionid");
String openid = jsonObject.getString("openid");
String enterpriseId = jsonObject.getString("enterpriseId");
List<TabHaobanWxEnterprise> tabHaobanWxEnterprises = wxEnterpriseRelatedService.listByEnterpriseId(enterpriseId);
if (CollectionUtils.isEmpty(tabHaobanWxEnterprises)) {
log.error("企业为空");
return;
}
RRateLimiter rateLimiter = RedisUtil.getRedisClient().getRateLimiter("member:weChat:add:limit");
// 每1小时产生10000个令牌
rateLimiter.trySetRate(RateType.OVERALL, 9500, 1, RateIntervalUnit.HOURS);
for (TabHaobanWxEnterprise tabHaobanWxEnterpris : tabHaobanWxEnterprises) {
if (!rateLimiter.tryAcquire(1)) {
log.error("请求unionidToExternalUserid3rd超过限制,丢入消息队列,重新消费");
GicMQClient clientInstance = GICMQClientUtil.getClientInstance();
try {
clientInstance.sendMessage("addMemberUnionidWechatAccountMq", res, 60 * 60);
} catch (Exception e) {
log.info("addMemberUnionidWechatAccount 发送失败:{}", e.getMessage(), e);
}
return;
}
List<UnionidToExternalUseridDTO> unionidToExternalUseridDTOS = qywxUserApiService.unionidToExternalUserid3rd(unionid, openid, tabHaobanWxEnterpris.getCorpid(), config.getWxSuiteid());
if (CollectionUtils.isEmpty(unionidToExternalUseridDTOS)) {
log.error("请求unionidToExternalUserid3rd返回为空");
return;
}
for (UnionidToExternalUseridDTO unionidToExternalUseridDTO : unionidToExternalUseridDTOS) {
unionidToExternalUseridDTO.getExternalUserid();
}
}
}
@Override
public ServiceResponse<Boolean> addMemberUnionidWechatAccountByClerk(MemberUnionidWechatAccountQDTO memberUnionidWechatAccountQDTO) {
return null;
}
}
......@@ -144,4 +144,6 @@
<dubbo:reference interface="com.gic.enterprise.api.service.AuthorizeService" id="authorizeService"/>
<dubbo:reference id="quartzService" interface="com.gic.quartz.api.service.QuartzService" timeout="10000"/>
<dubbo:reference id="memberApiService" interface="com.gic.member.api.service.MemberApiService" timeout="10000"/>
<dubbo:reference id="weixinBaseFunService" interface="com.gic.wechat.api.service.fwh.WeixinBaseFunService" timeout="10000"/>
</beans>
\ No newline at end of file
......@@ -189,7 +189,7 @@
from tab_haoban_miniprogram_setting
where wx_enterprise_id = #{wxEnterpriseId,jdbcType=VARCHAR}
and enterprise_id=#{enterpriseId}
and status_flag=1
and status_flag=1 order by create_time desc limit 1
</select>
<select id="listMiniprogramSetting" resultMap="BaseResultMap">
......
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