mitao
2024-05-28 e43e290ac0fdbfdf4187ccae8e9af02bec517911
提交【管理后台】拍卖商品管理 立即结束接口
6个文件已修改
75 ■■■■ 已修改文件
ruoyi-api/ruoyi-api-system/src/main/java/com/ruoyi/system/api/factory/OrderFallbackFactory.java 4 ●●●● 补丁 | 查看 | 原始文档 | blame | 历史
ruoyi-modules/ruoyi-auction/src/main/java/com/ruoyi/auction/domain/AuctionBidRecord.java 12 ●●●●● 补丁 | 查看 | 原始文档 | blame | 历史
ruoyi-modules/ruoyi-auction/src/main/java/com/ruoyi/auction/domain/MemberBond.java 2 ●●● 补丁 | 查看 | 原始文档 | blame | 历史
ruoyi-modules/ruoyi-auction/src/main/java/com/ruoyi/auction/service/IAuctionBidRecordService.java 2 ●●●●● 补丁 | 查看 | 原始文档 | blame | 历史
ruoyi-modules/ruoyi-auction/src/main/java/com/ruoyi/auction/service/impl/AuctionBidRecordServiceImpl.java 9 ●●●●● 补丁 | 查看 | 原始文档 | blame | 历史
ruoyi-modules/ruoyi-auction/src/main/java/com/ruoyi/auction/service/impl/AuctionGoodsServiceImpl.java 46 ●●●●● 补丁 | 查看 | 原始文档 | blame | 历史
ruoyi-api/ruoyi-api-system/src/main/java/com/ruoyi/system/api/factory/OrderFallbackFactory.java
@@ -21,13 +21,13 @@
            @Override
            public R<Boolean> saveOrderOne(OrderDTO orderDTO, String source) {
                return R.fail("通过视频集合查询用户失败:" + cause.getMessage());
                return R.fail("保存订单失败:" + cause.getMessage());
            }
            @Override
            public R<Boolean> getOrderAuctionBond(OrderAuctionBondDTO orderAuctionBondDTO,
                    String source) {
                return R.fail("通过视频集合查询用户失败:" + cause.getMessage());
                return R.fail("查询拍卖订单佣金失败:" + cause.getMessage());
            }
            @Override
            public R<Integer> getSeckillMembers(Long id, String source) {
ruoyi-modules/ruoyi-auction/src/main/java/com/ruoyi/auction/domain/AuctionBidRecord.java
@@ -6,6 +6,7 @@
import com.baomidou.mybatisplus.annotation.TableId;
import com.baomidou.mybatisplus.annotation.TableLogic;
import com.baomidou.mybatisplus.annotation.TableName;
import com.ruoyi.common.core.enums.AuctionOrderTypeEnum;
import com.ruoyi.common.core.enums.BidStatusEnum;
import io.swagger.annotations.ApiModel;
import io.swagger.annotations.ApiModelProperty;
@@ -37,17 +38,14 @@
    @TableId(value = "id", type = IdType.ASSIGN_ID)
    private Long id;
    @ApiModelProperty(value = "拍卖场id")
    private Long auctionSalesroomId;
    @ApiModelProperty(value = "商品id")
    private Long goodsSkuId;
    @ApiModelProperty(value = "目标商品id(普通拍品id 或 拍卖会拍品id)")
    private Long targetId;
    @ApiModelProperty(value = "会员id")
    private Long memberId;
    @ApiModelProperty(value = "商品名称")
    private String goodsSkuName;
    @ApiModelProperty("拍卖类型 (1=普通拍品 2=拍卖会拍品)")
    private AuctionOrderTypeEnum auctionType;
    @ApiModelProperty(value = "最终出价时间")
    private LocalDateTime lastBidTime;
ruoyi-modules/ruoyi-auction/src/main/java/com/ruoyi/auction/domain/MemberBond.java
@@ -34,7 +34,7 @@
    private static final long serialVersionUID = 1L;
    @ApiModelProperty(value = "主键id")
    @TableId(value = "id", type = IdType.AUTO)
    @TableId(value = "id", type = IdType.ASSIGN_ID)
    private Long id;
    @ApiModelProperty(value = "会员id")
ruoyi-modules/ruoyi-auction/src/main/java/com/ruoyi/auction/service/IAuctionBidRecordService.java
@@ -19,4 +19,6 @@
     *
     */
    public List<AuctionBidRecord> getAuctionBidRecordList(AuctionSalesroomGoodsDTO auctionSalesroomGoodsDTO);
    List<AuctionBidRecord> getBidRecordByGoodsId(Long id);
}
ruoyi-modules/ruoyi-auction/src/main/java/com/ruoyi/auction/service/impl/AuctionBidRecordServiceImpl.java
@@ -9,6 +9,7 @@
import com.ruoyi.auction.mapper.AuctionBidRecordMapper;
import com.ruoyi.auction.service.IAuctionBidRecordService;
import com.ruoyi.auction.service.IAuctionSalesroomGoodsService;
import com.ruoyi.common.core.enums.AuctionOrderTypeEnum;
import com.ruoyi.common.core.enums.BidStatusEnum;
import java.util.ArrayList;
import java.util.List;
@@ -65,4 +66,12 @@
    }
    @Override
    public List<AuctionBidRecord> getBidRecordByGoodsId(Long id) {
        return this.lambdaQuery().eq(AuctionBidRecord::getTargetId, id)
                .eq(AuctionBidRecord::getAuctionType,
                        AuctionOrderTypeEnum.REGULAR_ITEMS)
                .orderByDesc(AuctionBidRecord::getLastBidAmount).list();
    }
}
ruoyi-modules/ruoyi-auction/src/main/java/com/ruoyi/auction/service/impl/AuctionGoodsServiceImpl.java
@@ -12,16 +12,23 @@
import com.ruoyi.auction.service.IAuctionBidRecordService;
import com.ruoyi.auction.service.IAuctionGoodsService;
import com.ruoyi.common.core.constant.SecurityConstants;
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.OrderFromEnum;
import com.ruoyi.common.core.exception.ServiceException;
import com.ruoyi.common.core.utils.StringUtils;
import com.ruoyi.common.core.utils.page.BeanUtils;
import com.ruoyi.common.core.utils.page.PageDTO;
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.dto.OrderDTO;
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.List;
import java.util.Map;
import java.util.Set;
@@ -47,6 +54,7 @@
    private final GoodsSkuClient goodsSkuClient;
    private final IAuctionBidRecordService auctionBidRecordService;
    private final MemberClient memberClient;
    private final OrderClient orderClient;
    /**
     * 获取拍卖商品列表的分页数据
     *
@@ -154,7 +162,8 @@
        AuctionGoodsVO auctionGoodsVO = BeanUtils.copyBean(auctionGoods, AuctionGoodsVO.class);
        if (!auctionGoods.getStartStatus().equals(AuctionStartStatusEnum.IN_PREVIEW)) {
            List<AuctionBidRecord> list = auctionBidRecordService.lambdaQuery()
                    .eq(AuctionBidRecord::getGoodsSkuId, auctionGoods.getGoodsSkuId())
                    .eq(AuctionBidRecord::getTargetId, auctionGoodsVO.getId())
                    .eq(AuctionBidRecord::getAuctionType, AuctionOrderTypeEnum.REGULAR_ITEMS)
                    .orderByDesc(AuctionBidRecord::getLastBidAmount).list();
            if (StringUtils.isNotEmpty(list)) {
                Set<Long> collect = list.stream().map(AuctionBidRecord::getMemberId)
@@ -181,12 +190,47 @@
     * @param id 拍卖商品id
     */
    @Override
    @GlobalTransactional(rollbackFor = Exception.class)
    @Transactional
    public void stopAuctionGoods(Long id) {
        AuctionGoods auctionGoods = this.lambdaQuery().eq(AuctionGoods::getId, id)
                .eq(AuctionGoods::getStartStatus, AuctionStartStatusEnum.IN_AUCTION).one();
        if (StringUtils.isNull(auctionGoods)) {
            throw new ServiceException("拍卖商品不存在");
        }
        if (auctionGoods.getStartStatus().equals(AuctionStartStatusEnum.IN_AUCTION)) {
            // 查询出价记录
            List<AuctionBidRecord> auctionBidRecords = auctionBidRecordService.getBidRecordByGoodsId(
                    id);
            if (StringUtils.isNotEmpty(auctionBidRecords)) {
                // 中标
                AuctionBidRecord auctionBidRecord = auctionBidRecords.get(0);
                auctionBidRecord.setStatus(BidStatusEnum.SUCCESSFUL);
                auctionBidRecordService.updateById(auctionBidRecord);
        
                // 创建待支付订单
                OrderDTO orderDTO = new OrderDTO();
                orderDTO.setAuctionType(AuctionOrderTypeEnum.REGULAR_ITEMS);
                orderDTO.setGoodsQuantity(auctionGoods.getAuctionStock());
                orderDTO.setGoodsSkuId(auctionGoods.getGoodsSkuId());
                orderDTO.setBound(auctionGoods.getBond());
                orderDTO.setMemberId(auctionBidRecord.getMemberId());
                orderDTO.setTotalAmount(auctionBidRecord.getLastBidAmount());
                orderDTO.setOrderFrom(OrderFromEnum.AUCTION_ORDERS);
                orderDTO.setOrderTime(LocalDateTime.now());
                MemberAddress data = memberClient.getMemberAddressOne(
                        auctionBidRecord.getMemberId(), SecurityConstants.INNER).getData();
                if (StringUtils.isNotNull(data)) {
                    orderDTO.setReceiverName(data.getRecipientName());
                    orderDTO.setReceiverCity(data.getReceiverCity());
                    orderDTO.setReceiverDetailAddress(data.getDetailedAddress());
                    orderDTO.setReceiverphone(data.getRecipientPhone());
                }
                orderClient.saveOrderOne(orderDTO, SecurityConstants.INNER);
            }
            // 结束拍卖
            this.lambdaUpdate().set(AuctionGoods::getStartStatus, AuctionStartStatusEnum.ENDED)
                    .eq(AuctionGoods::getId, id).update();
        }
    }
}