PushPaySuccessMsgService.java 2.95 KB
package com.zteits.ipay.biz;

import org.apache.commons.collections4.CollectionUtils;
import org.apache.commons.lang3.StringUtils;
import com.alibaba.fastjson.JSON;
import com.aliyun.openservices.ons.api.SendResult;
import com.zteits.clouds.api.apibase.constants.OrderStateEnum;
import com.zteits.clouds.api.dto.order.payorder.dto.PayOrderDTO;
import com.zteits.clouds.api.dto.rocketmq.constants.MQTopicConstants;
import com.zteits.clouds.api.dto.rocketmq.constants.tags.OrderTags;
import com.zteits.clouds.api.dto.rocketmq.order.payorder.PayOrderSuccess;
import com.zteits.clouds.api.dto.rocketmq.order.payorder.PayOrderSuccessMsgVO;
import zteits.rocketmq.spring.starter.core.RocketMQTemplate;
import org.slf4j.Logger;
import org.slf4j.LoggerFactory;
import org.springframework.beans.BeanUtils;
import org.springframework.beans.factory.annotation.Autowired;
import org.springframework.stereotype.Service;

import java.util.ArrayList;
import java.util.List;

/**
 * 公共推送支付成功消息服务
 */
@Service
public class PushPaySuccessMsgService {
    private static final Logger logger = LoggerFactory.getLogger(PushPaySuccessMsgService.class);
    @Autowired
    private RocketMQTemplate rocketMQTemplate;
    /**
     * 发送支付成功消息,用于处理其他非紧急事件,例如激光推送支付消息,根据赠送规则赠送积分,代金券等
     * 2018/11/21 15:05 zhaowg
     * @param payOrders
     */
    public void sendPaySuccessMsg(List<PayOrderDTO> payOrders) {
        if(CollectionUtils.isEmpty(payOrders)){
            return;
        }
        List<PayOrderSuccess> payOrderSuccessS = new ArrayList<>();
        String keys = "";
        for (PayOrderDTO payOrder:payOrders){
            if(payOrder.getPayOrderState().intValue() != OrderStateEnum.PAYED.value().intValue()){
                continue;
            }
            keys += payOrder.getPayOrderId()+",";
            PayOrderSuccess payOrderSuccessMsgVO = new PayOrderSuccess();
            BeanUtils.copyProperties(payOrder,payOrderSuccessMsgVO);
            payOrderSuccessS.add(payOrderSuccessMsgVO);
        }
        try{
            PayOrderSuccessMsgVO payOrderSuccessMsgVO = new PayOrderSuccessMsgVO();
            payOrderSuccessMsgVO.setPayOrderSuccessList(payOrderSuccessS);
            logger.info("发送支付成功消息,参数:"+ JSON.toJSONString(payOrderSuccessMsgVO));
            SendResult sendResult = rocketMQTemplate.syncSend(MQTopicConstants.ZTEITS_RNT_CLOUD, OrderTags.PAY_SUCCESS, keys, payOrderSuccessMsgVO);
            logger.info("发送结果:"+JSON.toJSONString(sendResult));
            if(StringUtils.isBlank(sendResult.getMessageId())){
                //发送失败,后期可以使用定时任务辅助,针对发送失败的,定时重发
            }
        }catch (Exception e){
            //发送失败,后期可以使用定时任务辅助,针对发送失败的,定时重发
            logger.error("支付成功消息发送失败",e);
        }
    }
}