sync_pay_state

This commit is contained in:
sxu 2025-02-20 17:49:45 +08:00
parent 1d65abcff2
commit 1b63872d7e
6 changed files with 60 additions and 24 deletions

View File

@ -24,6 +24,7 @@ import com.bonus.core.pay.api.dto.UnifyPaySelectDTO;
import com.bonus.core.pay.api.vo.UnifyPaySelectVO;
import com.bonus.core.pay.api.vo.UnifyPayVO;
import com.bonus.core.pay.common.constants.PayStateEnum;
import com.bonus.core.pay.common.model.TradeOrderRecharge;
import com.bonus.core.pay.common.model.TradeRecord;
import com.bonus.core.pay.common.po.PayResultPO;
import org.slf4j.Logger;
@ -403,30 +404,30 @@ public class OrderResultBusinessImpl implements OrderResultBusiness {
}
}
// public boolean orderRepeatPayCheck(PayResultPO payResultPO, List<OrderInfo> orderInfoList) {
// if (!PayStateEnum.isPaidState(payResultPO.getTradeState())) {
// log.warn("本次交易不成功,跳过重复交易检查 tradeId={}", payResultPO.getTradeId());
// return false;
// } else {
// List<Long> orderIds = (List)orderInfoList.stream().map(OrderInfo::getOrderId).collect(Collectors.toList());
// List<TradeOrderRecharge> repeatPaidTrades = (List)this.tradeRecordApi.listSuccessByOrderIds(orderIds).stream().filter((s) -> {
// return !s.getTradeId().equals(payResultPO.getTradeId());
// }).collect(Collectors.toList());
// if (CollUtil.isNotEmpty(repeatPaidTrades)) {
// log.warn("订单产生多笔支付成功的交易 {}", repeatPaidTrades);
// OrderSavePO orderSavePO = this.orderRepairService.packageNewPaidOrderInfo(orderInfoList);
// this.tradeRecordApi.updateOrderRechargeId(payResultPO.getTradeId(), orderSavePO.getMacOrderId(), (List)orderSavePO.getOrderInfoList().stream().map(OrderInfo::getOrderId).collect(Collectors.toList()));
// this.orderPlaceBusiness.save(orderSavePO, false, false);
// CollUtil.clear(new Collection[]{orderInfoList});
// orderInfoList.addAll(orderSavePO.getOrderInfoList());
// return true;
// } else {
// log.warn("订单未产生多笔支付成功的交易,跳过 orderId={}", orderInfoList.stream().map(OrderInfo::getOrderId).collect(Collectors.toList()));
// return false;
// }
// }
// }
//
public boolean orderRepeatPayCheck(PayResultPO payResultPO, List<OrderInfo> orderInfoList) {
if (!PayStateEnum.isPaidState(payResultPO.getTradeState())) {
log.warn("本次交易不成功,跳过重复交易检查 tradeId={}", payResultPO.getTradeId());
return false;
} else {
List<Long> orderIds = (List)orderInfoList.stream().map(OrderInfo::getOrderId).collect(Collectors.toList());
List<TradeOrderRecharge> repeatPaidTrades = (List)this.tradeRecordApi.listSuccessByOrderIds(orderIds).stream().filter((s) -> {
return !s.getTradeId().equals(payResultPO.getTradeId());
}).collect(Collectors.toList());
if (CollUtil.isNotEmpty(repeatPaidTrades)) {
log.warn("订单产生多笔支付成功的交易 {}", repeatPaidTrades);
OrderSavePO orderSavePO = this.orderRepairService.packageNewPaidOrderInfo(orderInfoList);
this.tradeRecordApi.updateOrderRechargeId(payResultPO.getTradeId(), orderSavePO.getMacOrderId(), (List)orderSavePO.getOrderInfoList().stream().map(OrderInfo::getOrderId).collect(Collectors.toList()));
this.orderPlaceBusiness.save(orderSavePO, false, false);
CollUtil.clear(new Collection[]{orderInfoList});
orderInfoList.addAll(orderSavePO.getOrderInfoList());
return true;
} else {
log.warn("订单未产生多笔支付成功的交易,跳过 orderId={}", orderInfoList.stream().map(OrderInfo::getOrderId).collect(Collectors.toList()));
return false;
}
}
}
// public OrderRefund orderRepeatRefundCheck(RefundResultPO refundResultPO, OrderRefund orderRefund) {
// List<TradeRecord> paidTradeRecords = (List)this.tradeRecordApi.listTradeRecordByOrderRechargeId(orderRefund.getOrderRefundId()).stream().filter((s) -> {
// return PayStateEnum.isPaidState(s.getTradeState());

View File

@ -68,4 +68,8 @@ public class TradeRecordApi {
public List<TradeOrderRecharge> listOrderRechargeByTradeId(Long tradeId) {
return this.tradeRecordService.queryOrderRechargeTrade(tradeId);
}
public List<TradeOrderRecharge> listSuccessByOrderIds(List<Long> orderIds) {
return this.tradeRecordService.listSuccessByOrderIds(orderIds);
}
}

View File

@ -6,10 +6,13 @@ import com.bonus.core.pay.common.model.TradeOrderRecharge;
import org.apache.ibatis.annotations.Mapper;
import org.apache.ibatis.annotations.Param;
import java.time.LocalDateTime;
import java.util.List;
@Mapper
@InterceptorIgnore
public interface TradeOrderRechargeMapper extends BaseMapper<TradeOrderRecharge> {
void batchInsert(@Param("tradeOrderRechargeList") List<TradeOrderRecharge> tradeOrderRechargeList);
List<TradeOrderRecharge> listSuccessByOrderIds(@Param("orderIds") List<Long> orderIds, @Param("stratTime") LocalDateTime stratTime, @Param("endTime") LocalDateTime endTime);
}

View File

@ -21,6 +21,8 @@ public interface TradeRecordService {
List<TradeOrderRecharge> queryOrderRechargeTrade(Long tradeId);
List<TradeOrderRecharge> listSuccessByOrderIds(List<Long> orderIds);
TradeRecord getTradeRecordByOrderRechargeId(Long orderRechargeId, Integer... tradeState);
void insertTradeRecord(TradeRecord tradeRecord);

View File

@ -97,6 +97,15 @@ public class TradeRecordServiceImpl extends ServiceImpl<TradeRecordMapper, Trade
return tradeOrderRechargeList;
}
public List<TradeOrderRecharge> listSuccessByOrderIds(List<Long> orderIds) {
if (CollUtil.isEmpty(orderIds)) {
return CollUtil.newArrayList(new TradeOrderRecharge[0]);
} else {
List<LocalDateTime> timeRange = LeOrderUtil.queryCreateTimeRange();
return this.tradeOrderRechargeMapper.listSuccessByOrderIds(orderIds, (LocalDateTime)timeRange.get(0), (LocalDateTime)timeRange.get(1));
}
}
@Override
public TradeRecord getTradeRecordByOrderRechargeId(Long orderRechargeId, Integer... tradeState) {
log.info("[交易记录] getTradeRecordByOrderRechargeId 开始");

View File

@ -12,4 +12,21 @@
</foreach>
</insert>
<select id="listSuccessByOrderIds" resultType="com.bonus.core.pay.common.model.TradeOrderRecharge">
SELECT tor.trade_id, tor.order_recharge_id, tor.mac_order_id
FROM trade_order_recharge tor
LEFT JOIN trade_record tr ON tor.trade_id = tr.id
WHERE tr.trade_state IN (3,6)
AND tor.order_recharge_id IN
<foreach collection="orderIds" item="orderId" open="(" separator="," close=")">
#{orderId}
</foreach>
<if test="stratTime != null">
AND tr.create_time <![CDATA[ >= ]]> #{stratTime}
</if>
<if test="endTime != null">
AND tr.create_time <![CDATA[ <= ]]> #{endTime}
</if>
</select>
</mapper>