提交 2c7c424b authored 作者: hzh's avatar hzh

订单回调功能实现

上级 7b568604
......@@ -35,4 +35,12 @@ public interface RemoteYsOrderService {
*/
void updateHotelOrder();
/**
* 支付成功后调用
*
* @param orderType 订单类型
* @param orderNo 订单号
*/
void payed(String orderType, String orderNo);
}
......@@ -79,7 +79,7 @@
<dependency>
<groupId>org.dromara</groupId>
<artifactId>ruoyi-common-ys</artifactId>
<artifactId>ruoyi-api-server</artifactId>
</dependency>
<dependency>
......
......@@ -11,6 +11,7 @@ import io.seata.spring.annotation.GlobalTransactional;
import lombok.RequiredArgsConstructor;
import lombok.extern.slf4j.Slf4j;
import org.apache.commons.lang3.StringUtils;
import org.apache.dubbo.config.annotation.DubboReference;
import org.dromara.order.api.enums.OrderStatus;
import org.dromara.order.config.WechatPayConfiguration;
import org.dromara.order.domain.bo.OrderBo;
......@@ -20,6 +21,7 @@ import org.dromara.order.domain.vo.OrderVo;
import org.dromara.order.service.IOrderPayService;
import org.dromara.order.service.IOrderService;
import org.dromara.order.service.IOrderTradeService;
import org.dromara.server.api.RemoteYsOrderService;
import org.springframework.stereotype.Service;
import java.math.BigDecimal;
......@@ -40,6 +42,8 @@ public class WeChatOrderPayServiceImpl implements IOrderPayService {
private final WechatPayConfiguration config;
private final IOrderTradeService orderTradeService;
private final IOrderService orderService;
@DubboReference
private final RemoteYsOrderService ysOrderService;
@GlobalTransactional(rollbackFor = Exception.class)
@Override
......@@ -95,8 +99,10 @@ public class WeChatOrderPayServiceImpl implements IOrderPayService {
order.setPayTime(new Date());
order.setStatus(OrderStatus.PAYED.getCode());
orderService.updateByBo(BeanUtil.copyProperties(order, OrderBo.class));
}
//跟新云上相关信息
ysOrderService.payed(order.getOrderType(), order.getOrderNo());
}
return true;
} catch (Exception e) {
......
package org.dromara.server.base;
import cn.hutool.core.collection.CollectionUtil;
import com.baomidou.mybatisplus.core.conditions.query.LambdaQueryWrapper;
import com.baomidou.mybatisplus.core.toolkit.Wrappers;
import com.baomidou.mybatisplus.extension.plugins.pagination.Page;
......@@ -39,6 +40,13 @@ public abstract class AbstractBaseService<V, B, T> implements IBaseService<V, B,
return mapper().selectVoList(lqw);
}
@Override
public V queryOne(B bo) {
LambdaQueryWrapper<T> lqw = buildQueryWrapper(bo);
List<V> list = mapper().selectVoList(lqw);
return CollectionUtil.isEmpty(list) ? null : list.get(0);
}
@Override
public Boolean insertByBo(B bo) {
Class<T> clazz = (Class<T>) GenericsUtils.getSuperClassGenricType(this.getClass(), 2);
......
......@@ -34,10 +34,17 @@ public interface IBaseService<V, B, T> {
* 查询符合条件的列表
*
* @param bo 查询条件
* @return 雷彪
* @return 列表
*/
List<V> queryList(B bo);
/**
* 查询符合条件的对象
* @param bo 查询条件
* @return 对象
*/
V queryOne(B bo);
/**
* 新增
*
......
......@@ -2,9 +2,19 @@ package org.dromara.server.dubbo;
import lombok.RequiredArgsConstructor;
import lombok.extern.slf4j.Slf4j;
import org.apache.dubbo.config.annotation.DubboService;
import org.dromara.common.core.utils.StringUtils;
import org.dromara.common.ys.constant.airport.OrderStatus;
import org.dromara.common.ys.constant.train.RefundOrderStatus;
import org.dromara.common.ys.model.req.airport.OrderConfirmModel;
import org.dromara.common.ys.model.req.hotel.PayOrderModel;
import org.dromara.common.ys.model.req.train.ConfirmOrderModel;
import org.dromara.common.ys.service.IAirportService;
import org.dromara.common.ys.service.IHotelService;
import org.dromara.common.ys.service.ITrainService;
import org.dromara.common.ys.service.IVehiclesService;
import org.dromara.order.api.enums.OrderType;
import org.dromara.server.api.RemoteYsOrderService;
import org.dromara.server.domain.bo.*;
import org.dromara.server.domain.vo.*;
......@@ -13,6 +23,7 @@ import org.springframework.stereotype.Service;
import java.util.Arrays;
import java.util.List;
import java.util.Optional;
import java.util.stream.Collectors;
/**
......@@ -20,6 +31,7 @@ import java.util.stream.Collectors;
* @date 2024-11-18
* @desc 订单相关服务
**/
@Slf4j
@RequiredArgsConstructor
@Service
@DubboService
......@@ -31,6 +43,10 @@ public class RemoteYsOrderServiceImpl implements RemoteYsOrderService {
private final IOrderVehiclesService orderVehiclesService;
private final IOrderHotelService orderHotelService;
private final IOrderAirportRefundService orderAirportRefundService;
private final IAirportService airportService;
private final ITrainService trainService;
private final IVehiclesService vehiclesService;
private final IHotelService hotelService;
/**
......@@ -123,15 +139,47 @@ public class RemoteYsOrderServiceImpl implements RemoteYsOrderService {
/**
* 不需要更新的机票订单退款状态
*/
private static final List<String> AIRPORT_REFUND_ORDER_STATUS_LIST = List.of(
org.dromara.common.ys.constant.airport.RefundOrderStatus.REFUNDING.getCode()
);
private static final List<String> AIRPORT_REFUND_ORDER_STATUS_LIST = List.of(org.dromara.common.ys.constant.airport.RefundOrderStatus.REFUNDING.getCode());
@Override
public void updateAirportRefundOrder() {
List<OrderAirportRefundVo> orderList = orderAirportRefundService.queryList(new OrderAirportRefundBo());
orderAirportRefundService.updateOrderInfo(
orderList.stream().filter(item -> !AIRPORT_REFUND_ORDER_STATUS_LIST.contains(item.getRefundOrderStatus())).map(OrderAirportRefundVo::getRefundNo).collect(Collectors.toList())
);
orderAirportRefundService.updateOrderInfo(orderList.stream().filter(item -> !AIRPORT_REFUND_ORDER_STATUS_LIST.contains(item.getRefundOrderStatus())).map(OrderAirportRefundVo::getRefundNo).collect(Collectors.toList()));
}
/**
* 支付成功后确认出票
*
* @param orderType 订单类型
* @param orderNo 订单号
*/
@Override
public void payed(String orderType, String orderNo) {
log.info("支付成功后确认出票,orderType:{},orderNo:{}", orderType, orderNo);
if (StringUtils.equals(orderType, OrderType.AIRPORT.getType())) {
//飞机票
Optional.ofNullable(orderAirportService.queryOne(new OrderAirportBo().setOrderNo(orderNo))).ifPresent(vo -> {
//确认出票
airportService.confirmOrder(vo.getPersonCode(), new OrderConfirmModel().setOrderNo(orderNo).setAutoDraw(1));
orderAirportService.updateOrderInfo(List.of(orderNo));
});
} else if (StringUtils.equals(orderType, OrderType.TRAIN.getType())) {
//火车票
Optional.ofNullable(orderTrainService.queryOne(new OrderTrainBo().setOrderNo(orderNo))).ifPresent(vo -> {
//确认出票
trainService.confirmOrder(vo.getPersonCode(), new ConfirmOrderModel().setOrderNo(orderNo));
orderTrainService.updateOrderInfo(List.of(orderNo));
});
} else if (StringUtils.equals(orderType, OrderType.CAR.getType())) {
} else if (StringUtils.equals(orderType, OrderType.HOTEL.getType())) {
//酒店
Optional.ofNullable(orderHotelService.queryOne(new OrderHotelBo().setOrderNo(orderNo))).ifPresent(vo -> {
//确认出票
hotelService.orderPay(vo.getPersonCode(), new PayOrderModel().setOrderNo(orderNo));
orderHotelService.updateOrderInfo(List.of(orderNo));
});
}
}
}
Markdown 格式
0%
您添加了 0 到此讨论。请谨慎行事。
请先完成此评论的编辑!
注册 或者 后发表评论