|
|
@@ -139,9 +139,11 @@ import com.fs.wx.order.service.ExpressToWxService;
|
|
|
import com.fs.wx.order.service.ShippingService;
|
|
|
import com.fs.wxwork.dto.WxWorkResponseDTO;
|
|
|
import com.fs.wxwork.dto.WxWorkSendTextMsgDTO;
|
|
|
+import com.fs.wxwork.dto.WxWorkSendTextMsgRespDTO;
|
|
|
import com.fs.wxwork.dto.WxWorkUserId2VidDTO;
|
|
|
import com.fs.wxwork.dto.WxWorkVid2UserIdRespDTO;
|
|
|
import com.fs.wxwork.dto.WxwSendCDNImgMsgDTO;
|
|
|
+import com.fs.wxwork.dto.WxwSendCDNImgMsgRespDTO;
|
|
|
import com.fs.wxwork.dto.WxwUploadCdnLinkImgDTO;
|
|
|
import com.fs.wxwork.dto.WxwUploadCdnLinkImgRespDTO;
|
|
|
import com.fs.wxwork.service.WxWorkService;
|
|
|
@@ -506,6 +508,9 @@ public class FsStoreOrderScrmServiceImpl implements IFsStoreOrderScrmService {
|
|
|
"尊敬的VIP,感谢您的信任与购买~若后续遇到任何售后相关问题,欢迎您第一时间联系专属销售对接处理或拨打客服电话400-0909-575。我们将竭诚为您高效解决问题,保障您的权益。";
|
|
|
|
|
|
private static final String PAY_SUCCESS_MSG_REDIS_KEY = "fs:pay:success:msg:send:";
|
|
|
+
|
|
|
+ /** 同一企微账号 + 外部联系人,一天内只发一次支付成功消息 */
|
|
|
+ private static final String PAY_SUCCESS_MSG_CONTACT_REDIS_KEY = "fs:pay:success:msg:contact:";
|
|
|
@PostConstruct
|
|
|
public void initErpServiceMap() {
|
|
|
erpServiceMap = new HashMap<>();
|
|
|
@@ -7526,6 +7531,15 @@ public class FsStoreOrderScrmServiceImpl implements IFsStoreOrderScrmService {
|
|
|
|| qwUser.getServerStatus() != 1 || qwUser.getIpadStatus() != 1) {
|
|
|
continue;
|
|
|
}
|
|
|
+ String externalUserId = externalContact.getExternalUserId();
|
|
|
+ if (StringUtils.isEmpty(externalUserId)) {
|
|
|
+ continue;
|
|
|
+ }
|
|
|
+ if (isPaySuccessMsgSentToday(qwUserId, externalUserId)) {
|
|
|
+ log.info("支付成功企微消息今日已发送,跳过,qwUserId={},externalUserId={},orderId={}",
|
|
|
+ qwUserId, externalUserId, orderId);
|
|
|
+ continue;
|
|
|
+ }
|
|
|
WxWorkUserId2VidDTO wxWorkUserId2VidDTO = new WxWorkUserId2VidDTO();
|
|
|
wxWorkUserId2VidDTO.setOpenid(Collections.singletonList(externalContact.getExternalUserId()));
|
|
|
wxWorkUserId2VidDTO.setUuid(qwUser.getUid());
|
|
|
@@ -7540,26 +7554,24 @@ public class FsStoreOrderScrmServiceImpl implements IFsStoreOrderScrmService {
|
|
|
textMsgDto.setUuid(qwUser.getUid());
|
|
|
textMsgDto.setContent(PAY_SUCCESS_MSG);
|
|
|
textMsgDto.setIsRoom(false);
|
|
|
- wxWorkService.SendTextMsg(textMsgDto, qwUser.getServerId());
|
|
|
+ WxWorkResponseDTO<WxWorkSendTextMsgRespDTO> textResp = wxWorkService.SendTextMsg(textMsgDto, qwUser.getServerId());
|
|
|
/** 支付成功企微消息配图,在配置文件中设置 store.pay-success.image-url */
|
|
|
String paySuccessImageUrl = "https://bjzmky-1323137866.cos.ap-chongqing.myqcloud.com/vip-ele.jpg";
|
|
|
- if (StringUtils.isNotEmpty(paySuccessImageUrl)) {
|
|
|
- sendWxImageMsg(sendId, qwUser.getUid(), qwUser.getServerId(), paySuccessImageUrl);
|
|
|
- } else {
|
|
|
- log.warn("支付成功企微配图未配置,跳过图片发送,orderId:{}", orderId);
|
|
|
- }
|
|
|
+ sendWxImageMsg(sendId, qwUser.getUid(), qwUser.getServerId(), paySuccessImageUrl);
|
|
|
+
|
|
|
+ markPaySuccessMsgSentToday(qwUserId, externalUserId);
|
|
|
return;
|
|
|
}
|
|
|
}
|
|
|
|
|
|
- private void sendWxImageMsg(Long sendId, String uuid, Long serverId, String imageUrl) {
|
|
|
+ private boolean sendWxImageMsg(Long sendId, String uuid, Long serverId, String imageUrl) {
|
|
|
WxwUploadCdnLinkImgDTO uploadDto = new WxwUploadCdnLinkImgDTO();
|
|
|
uploadDto.setUuid(uuid);
|
|
|
uploadDto.setUrl(imageUrl);
|
|
|
WxWorkResponseDTO<WxwUploadCdnLinkImgRespDTO> uploadResp = wxWorkService.uploadCdnLinkImg(uploadDto, serverId);
|
|
|
if (uploadResp == null || !"成功".equals(uploadResp.getErrmsg()) || uploadResp.getData() == null) {
|
|
|
log.warn("支付成功消息图片上传CDN失败,sendId:{},imageUrl:{}", sendId, imageUrl);
|
|
|
- return;
|
|
|
+ return false;
|
|
|
}
|
|
|
WxwUploadCdnLinkImgRespDTO imgData = uploadResp.getData();
|
|
|
WxwSendCDNImgMsgDTO imgMsgDto = new WxwSendCDNImgMsgDTO();
|
|
|
@@ -7570,7 +7582,30 @@ public class FsStoreOrderScrmServiceImpl implements IFsStoreOrderScrmService {
|
|
|
imgMsgDto.setAeskey(imgData.getAes_key());
|
|
|
imgMsgDto.setMd5(imgData.getMd5());
|
|
|
imgMsgDto.setFileSize(imgData.getSize());
|
|
|
- wxWorkService.SendCDNImgMsg(imgMsgDto, serverId);
|
|
|
+ WxWorkResponseDTO<WxwSendCDNImgMsgRespDTO> imgResp = wxWorkService.SendCDNImgMsg(imgMsgDto, serverId);
|
|
|
+ return isWxWorkSuccess(imgResp);
|
|
|
+ }
|
|
|
+
|
|
|
+ private String buildPaySuccessMsgContactKey(Long qwUserId, String externalUserId) {
|
|
|
+ return PAY_SUCCESS_MSG_CONTACT_REDIS_KEY + qwUserId + ":" + externalUserId;
|
|
|
+ }
|
|
|
+
|
|
|
+ private boolean isPaySuccessMsgSentToday(Long qwUserId, String externalUserId) {
|
|
|
+ return redisCache.getCacheObject(buildPaySuccessMsgContactKey(qwUserId, externalUserId)) != null;
|
|
|
+ }
|
|
|
+
|
|
|
+ private void markPaySuccessMsgSentToday(Long qwUserId, String externalUserId) {
|
|
|
+ redisCache.setCacheObject(buildPaySuccessMsgContactKey(qwUserId, externalUserId), "1", 1, TimeUnit.DAYS);
|
|
|
+ }
|
|
|
+
|
|
|
+ private boolean isWxWorkSuccess(WxWorkResponseDTO<?> resp) {
|
|
|
+ if (resp == null) {
|
|
|
+ return false;
|
|
|
+ }
|
|
|
+ if (resp.getErrcode() != null && resp.getErrcode() == 0) {
|
|
|
+ return true;
|
|
|
+ }
|
|
|
+ return "成功".equals(resp.getErrmsg()) || "ok".equalsIgnoreCase(resp.getErrmsg());
|
|
|
}
|
|
|
|
|
|
@Override
|