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 payOrders) { if(CollectionUtils.isEmpty(payOrders)){ return; } List 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); } } }