package com.kym.service.impl;
import com.baomidou.mybatisplus.extension.service.impl.ServiceImpl;
import com.kym.common.enums.MsgTemplateType;
import com.kym.common.utils.wx.WxPbUtil;
import com.kym.entity.MpMsgTemplate;
import com.kym.entity.MpRelation;
import com.kym.entity.PayLog;
import com.kym.entity.WashOrder;
import com.kym.mapper.MpMsgTemplateMapper;
import com.kym.service.MpMsgTemplateService;
import com.kym.service.MpRelationService;
import com.kym.service.wechat.TemplateParamBuilder;
import org.springframework.scheduling.annotation.Async;
import org.springframework.stereotype.Service;
import java.util.Map;
/**
*
* 微信公众号消息模版表 服务实现类
*
*
* @author skyline
* @since 2024-08-07
*/
@Service
public class MpMsgTemplateServiceImpl extends ServiceImpl implements MpMsgTemplateService {
private final Map paramBuilders;
private final MpRelationService mpRelationService;
public MpMsgTemplateServiceImpl(Map paramBuilders, MpRelationService mpRelationService) {
this.paramBuilders = paramBuilders;
this.mpRelationService = mpRelationService;
}
/**
* 发送充值成功消息
*
* @param payLog
* @param balance
*/
@Override
public void sendPaymentSuccessMsg(PayLog payLog, Integer balance) {
sendTemplateMessage(MsgTemplateType.PAYMENT_SUCCESS, payLog.getUserId(), payLog, balance);
}
/**
* 发送订单完成提醒
*
* @param washOrder
* @param balance
*/
@Override
public void sendOrderCompletedMsg(WashOrder washOrder, Integer balance) {
sendTemplateMessage(MsgTemplateType.ORDER_COMPLETED, washOrder.getUserId(), washOrder, balance);
}
/**
* 发送停车优惠券
*
* @param washOrder
*/
@Override
public void sendParkingCouponMsg(WashOrder washOrder, String parkingCouponUrl) {
sendTemplateMessage(MsgTemplateType.PARKING_COUPON, washOrder.getUserId(), washOrder, parkingCouponUrl);
}
@Override
@Async
public void sendTemplateMessage(MsgTemplateType templateType, Long userId, Object... args) {
try {
var mpMsgTemplate = lambdaQuery().eq(MpMsgTemplate::getBizType, templateType.getBizType()).one();
if (mpMsgTemplate == null) {
return;
}
mpRelationService.lambdaQuery().eq(MpRelation::getUserId, userId).oneOpt().ifPresent(mpRelation -> {
TemplateParamBuilder builder = paramBuilders.get(templateType);
Map params = builder.buildParams(args);
WxPbUtil.sendPublicTemplateMessage(
mpRelation.getMpOpenid(),
mpMsgTemplate.getTemplateId(),
params,
templateType.equals(MsgTemplateType.PARKING_COUPON) ? args[1].toString() : "",
""
);
});
} catch (Exception e) {
log.error("发送模板消息失败", e);
}
}
}