package com.peanut.modules.common.controller; import com.baomidou.mybatisplus.core.conditions.query.LambdaQueryWrapper; import com.baomidou.mybatisplus.core.toolkit.IdWorker; import com.peanut.common.utils.R; import com.peanut.common.utils.ShiroUtils; import com.peanut.config.Constants; import com.peanut.config.DelayQueueConfig; import com.peanut.modules.book.service.BuyOrderService; import com.peanut.modules.common.entity.BuyOrder; import com.peanut.modules.common.entity.MyUserEntity; import com.peanut.modules.common.service.MyUserService; import com.peanut.modules.common.service.OfflineActivityService; import com.peanut.modules.common.service.OfflineActivityToUserService; import com.peanut.modules.pay.weChatPay.dto.WechatPaymentInfo; import com.peanut.modules.pay.weChatPay.service.WxpayService; import lombok.extern.slf4j.Slf4j; import org.springframework.amqp.core.MessagePostProcessor; import org.springframework.amqp.rabbit.core.RabbitTemplate; import org.springframework.beans.factory.annotation.Autowired; import org.springframework.transaction.annotation.Transactional; import org.springframework.web.bind.annotation.RequestBody; import org.springframework.web.bind.annotation.RequestMapping; import org.springframework.web.bind.annotation.RestController; import java.math.BigDecimal; import java.util.Date; import java.util.Map; /** * 线下活动 */ @Slf4j @RestController("commonOfflineActivity") @RequestMapping("common/offlineActivity") public class OfflineActivityController { @Autowired private OfflineActivityService offlineActivityService; @Autowired private OfflineActivityToUserService toUserService; @Autowired private BuyOrderService buyOrderService; @Autowired private WxpayService wxpayService; @Autowired private RabbitTemplate rabbitTemplate; @RequestMapping("/getOfflineActivityInfo") public R getOfflineActivityInfo(@RequestBody Map params) { return R.ok().put("result", offlineActivityService.getById(params.get("id").toString())); } //线下活动报名 @RequestMapping("/offlineActivityPaySave") @Transactional public R relearnSave(@RequestBody BuyOrder buyOrder){ int uid = ShiroUtils.getUId(); buyOrder.setOrderStatus("0"); buyOrder.setOrderType("offlineActivity"); String timeId = IdWorker.getTimeId().substring(0, 32); buyOrder.setOrderSn(timeId); buyOrder.setUserId(uid); buyOrderService.save(buyOrder); BigDecimal totalPrice = buyOrder.getRealMoney(); //微信支付预付款订单 if(Constants.PAYMENT_METHOD_WECHAT_PAY.equals(buyOrder.getPaymentMethod())){ BuyOrder buyOrderEntity = buyOrderService.getBaseMapper().selectOne(new LambdaQueryWrapper() .eq(BuyOrder::getOrderSn, timeId)); WechatPaymentInfo paymentInfo = new WechatPaymentInfo(); paymentInfo.setOrderSn(buyOrderEntity.getOrderSn()); paymentInfo.setBuyOrderId(buyOrder.getOrderId()); paymentInfo.setTotalAmount(buyOrderEntity.getRealMoney()); if (buyOrder.getCome()==2){ paymentInfo.setAppName("wumen"); } else if (buyOrder.getCome()==1) { paymentInfo.setAppName("zmzm"); } else if (buyOrder.getCome()==3) { paymentInfo.setAppName("xlkj"); } else if (buyOrder.getCome()==4) { paymentInfo.setAppName("thyy"); }else { paymentInfo.setAppName(buyOrder.getAppName()); } wxpayService.prepay(paymentInfo); } rabbitTemplate.convertAndSend( DelayQueueConfig.ORDER_TO_BE_PAY_EXCHANGE, DelayQueueConfig.ORDER_TO_BE_PAY_ROUTING_KEY, buyOrder.getOrderId(), messagePostProcessor() ); return R.ok().put("orderSn", timeId).put("money", totalPrice); } private MessagePostProcessor messagePostProcessor() { return message -> { //设置有效期30分钟 message.getMessageProperties().setExpiration(String.valueOf(30 * 60 * 1000)); return message; }; } }