TemplateMessageService.java 2.73 KB
package cn.fw.hestia.rpc.passport;

import cn.fw.data.base.domain.common.Message;
import cn.fw.hestia.common.constant.MessageStr;
import cn.fw.hestia.common.utils.StringUtils;
import cn.fw.hestia.rpc.passport.dto.TMParam;
import cn.fw.passport.sdk.api.WxMpTemplateMessageApi;
import cn.fw.passport.sdk.api.param.WxMpTempMessageData;
import cn.fw.passport.sdk.api.param.WxMpTempMessageParam;
import com.alibaba.fastjson.JSONArray;
import lombok.extern.slf4j.Slf4j;
import org.springframework.stereotype.Service;

import java.util.List;

/**
 * passport系统-模板消息服务
 * <p>
 * create at 2019-05-15
 *
 * @author kurisu
 */
@Slf4j
@Service
public class TemplateMessageService {

    private final WxMpTemplateMessageApi wxMpTemplateMessageApi;

    public TemplateMessageService(final WxMpTemplateMessageApi wxMpTemplateMessageApi) {
        this.wxMpTemplateMessageApi = wxMpTemplateMessageApi;
    }

    /**
     * 发送消息通知
     *
     * @param messageParam
     */
    public String sendTemplateMessage(TMParam messageParam) {
        log.info("开始发送通知,入参:{}", messageParam);
        try {
            WxMpTempMessageParam param = new WxMpTempMessageParam();
            param.setCusId(messageParam.getMemberId());
            param.setTempCode(messageParam.getTemplateCode());
            WxMpTempMessageData remark = new WxMpTempMessageData();
            remark.setValue(messageParam.getRemark());
            param.setRemark(remark);
            param.setTitle(new WxMpTempMessageData(messageParam.getTitle()));
            if (StringUtils.isValid(messageParam.getKeywords())) {
                List<WxMpTempMessageData> keywords = JSONArray.parseArray(messageParam.getKeywords(), WxMpTempMessageData.class);
                param.setKeyWordList(keywords);
            }
            String pagePath = getPagePath(messageParam.getPath(), messageParam.getSceneToken());
            if (StringUtils.isValid(pagePath)) {
                param.setPagePath(pagePath);
            }
            Message<?> msg = wxMpTemplateMessageApi.send(param);
            if (!msg.isSuccess()) {
                log.error("【passport系统】发送模板消息失败:{}", msg.getResult());
                return msg.getResult();
            }
            return MessageStr.SUCCEED_STR;
        } catch (Exception e) {
            log.error("发送模板消息失败", e);
            return "系统调用异常";
        }
    }


    private String getPagePath(String path, Long sceneToken) {
        if (StringUtils.isEmpty(path)) {
            return null;
        }
        StringBuilder sb = new StringBuilder(path);
        if (StringUtils.isValid(path)) {
            sb.append("?sceneToken=").append(sceneToken);
        }
        return sb.toString();
    }
}