| | |
| | | import com.ruoyi.common.core.enums.AuctionOrderTypeEnum; |
| | | import com.ruoyi.common.core.enums.AuctionStartStatusEnum; |
| | | import com.ruoyi.common.core.enums.BidStatusEnum; |
| | | import com.ruoyi.common.core.enums.BondStatusEnum; |
| | | import com.ruoyi.common.core.enums.OrderFromEnum; |
| | | import com.ruoyi.common.core.exception.ServiceException; |
| | | import com.ruoyi.common.core.utils.StringUtils; |
| | |
| | | import com.ruoyi.system.api.domain.GoodsSku; |
| | | import com.ruoyi.system.api.domain.Member; |
| | | import com.ruoyi.system.api.domain.MemberAddress; |
| | | import com.ruoyi.system.api.domain.OrderAuctionBond; |
| | | import com.ruoyi.system.api.domain.dto.OrderDTO; |
| | | import com.ruoyi.system.api.domain.dto.RefundDTO; |
| | | import com.ruoyi.system.api.feignClient.GoodsSkuClient; |
| | | import com.ruoyi.system.api.feignClient.MemberClient; |
| | | import com.ruoyi.system.api.feignClient.OrderClient; |
| | | import io.seata.spring.annotation.GlobalTransactional; |
| | | import java.time.LocalDateTime; |
| | | import java.util.ArrayList; |
| | | import java.util.List; |
| | | import java.util.Map; |
| | | import java.util.Objects; |
| | | import java.util.Set; |
| | | import java.util.stream.Collectors; |
| | | import lombok.RequiredArgsConstructor; |
| | |
| | | // 查询出价记录 |
| | | List<AuctionBidRecord> auctionBidRecords = auctionBidRecordService.getBidRecordByGoodsId( |
| | | id); |
| | | Long memberId = null; |
| | | if (StringUtils.isNotEmpty(auctionBidRecords)) { |
| | | // 中标 |
| | | AuctionBidRecord auctionBidRecord = auctionBidRecords.get(0); |
| | | auctionBidRecord.setStatus(BidStatusEnum.SUCCESSFUL); |
| | | auctionBidRecordService.updateById(auctionBidRecord); |
| | | |
| | | memberId = auctionBidRecord.getMemberId(); |
| | | // 创建待支付订单 |
| | | OrderDTO orderDTO = new OrderDTO(); |
| | | orderDTO.setAuctionType(AuctionOrderTypeEnum.REGULAR_ITEMS); |
| | |
| | | // 结束拍卖 |
| | | this.lambdaUpdate().set(AuctionGoods::getStartStatus, AuctionStartStatusEnum.ENDED) |
| | | .eq(AuctionGoods::getId, id).update(); |
| | | // 查询已支付保证基记录 |
| | | // TODO 退还保证金 |
| | | |
| | | // 查询已支付保证金记录 |
| | | List<OrderAuctionBond> auctionBondList = orderClient.getOrderAuctionBondList(id, |
| | | AuctionOrderTypeEnum.REGULAR_ITEMS, |
| | | BondStatusEnum.PAID, |
| | | SecurityConstants.INNER).getData(); |
| | | if (StringUtils.isNotEmpty(auctionBondList)) { |
| | | List<RefundDTO> refundDTOList = new ArrayList<>(); |
| | | for (OrderAuctionBond orderAuctionBond : auctionBondList) { |
| | | // 已中标需在订单完成后退保证金 |
| | | if (orderAuctionBond.getMemberId().equals(memberId)) { |
| | | continue; |
| | | } |
| | | RefundDTO refundDTO = new RefundDTO(); |
| | | refundDTO.setOrderNo(orderAuctionBond.getOrderNo()); |
| | | refundDTO.setAmount(orderAuctionBond.getBond()); |
| | | } |
| | | // 远程调用订单服务进行退款 |
| | | Map<String, Object> data = orderClient.refund(refundDTOList, |
| | | SecurityConstants.INNER).getData(); |
| | | // 处理退款返回结果 |
| | | List<String> successfulOrders = new ArrayList<>(); |
| | | List<String> failedOrders = new ArrayList<>(); |
| | | |
| | | data.forEach((key, value) -> { |
| | | if ((boolean) value) { |
| | | successfulOrders.add(key); |
| | | } else { |
| | | failedOrders.add(key); |
| | | } |
| | | }); |
| | | log.info("订单号:{},退款失败", failedOrders); |
| | | // 退款成功的订单修改状态 |
| | | List<Long> ids = auctionBondList.stream().map(bond -> { |
| | | if (successfulOrders.contains(bond.getOrderNo())) { |
| | | return bond.getId(); |
| | | } |
| | | return null; |
| | | }).filter(Objects::nonNull).collect(Collectors.toList()); |
| | | // 远程调用订单服务修改订单状态 |
| | | orderClient.updateOrderAuctionBondStatus(ids, BondStatusEnum.PAID); |
| | | } |
| | | } |
| | | } |
| | | } |