ruoyi-modules/ruoyi-auction/src/main/java/com/ruoyi/auction/controller/management/MgtAuctionGoodsController.java
@@ -7,8 +7,10 @@ import com.ruoyi.auction.service.IAuctionGoodsService; import com.ruoyi.common.core.domain.R; import com.ruoyi.common.core.utils.page.PageDTO; import com.ruoyi.system.api.domain.dto.ListStatusDTO; import io.swagger.annotations.Api; import io.swagger.annotations.ApiOperation; import io.swagger.annotations.ApiParam; import lombok.RequiredArgsConstructor; import org.springframework.validation.annotation.Validated; import org.springframework.web.bind.annotation.GetMapping; @@ -56,7 +58,8 @@ */ @ApiOperation(value = "查看详情", notes = "查看详情") @GetMapping("/{id}") public R<MgtAuctionGoodsVO> getAuctionGoods(@PathVariable("id") Long id) { public R<MgtAuctionGoodsVO> getAuctionGoods( @ApiParam(name = "id", value = "拍卖商品id", required = true) @PathVariable("id") Long id) { return R.ok(auctionGoodsService.getAuctionGoodsById(id)); } @@ -72,10 +75,29 @@ return R.ok(); } /** * 立即结束 * * @param id 拍卖商品id */ @ApiOperation("立即结束") @PutMapping("/stop/{id}") public R<?> stopAuctionGoods(@PathVariable("id") Long id) { public R<?> stopAuctionGoods( @ApiParam(name = "id", value = "拍卖商品id", required = true) @PathVariable("id") Long id) { auctionGoodsService.stopAuctionGoods(id); return R.ok(); } /** * 下架/上架 拍卖商品 * * @param dto 商品上下架状态对象 */ @ApiOperation(value = "下架/上架 拍卖商品", notes = "下架/上架 拍卖商品") @PutMapping("/upd-status") public R<?> updStatus(@Validated @RequestBody ListStatusDTO dto) { auctionGoodsService.updStatus(dto); return R.ok(); } } ruoyi-modules/ruoyi-auction/src/main/java/com/ruoyi/auction/controller/management/MgtAuctionSalesroomController.java
@@ -11,6 +11,7 @@ import com.ruoyi.common.core.utils.page.PageDTO; import io.swagger.annotations.Api; import io.swagger.annotations.ApiOperation; import io.swagger.annotations.ApiParam; import lombok.RequiredArgsConstructor; import lombok.extern.slf4j.Slf4j; import org.springframework.validation.annotation.Validated; @@ -59,7 +60,8 @@ */ @GetMapping("/qr-code/{id}") @ApiOperation(value = "查看二维码", notes = "查看二维码") public R<String> getQrCode(@PathVariable("id") Long id) { public R<String> getQrCode( @ApiParam(name = "id", value = "拍卖场id", required = true) @PathVariable("id") Long id) { try { return R.ok(auctionSalesroomService.getQrCode(id)); } catch (Exception e) { @@ -89,7 +91,8 @@ */ @GetMapping("/{id}") @ApiOperation(value = "查看详情", notes = "查看详情") public R<MgtAuctionSalesroomVO> getAuctionSalesroom(@PathVariable("id") Long id) { public R<MgtAuctionSalesroomVO> getAuctionSalesroom( @ApiParam(name = "id", value = "拍卖会id", required = true) @PathVariable("id") Long id) { return R.ok(auctionSalesroomService.getAuctionSalesroom(id)); } ruoyi-modules/ruoyi-auction/src/main/java/com/ruoyi/auction/controller/management/MgtAuctionScreenController.java
@@ -2,19 +2,23 @@ import com.ruoyi.auction.controller.management.dto.MgtAuctionSalesroomQuery; import com.ruoyi.auction.controller.management.dto.MgtScreenBidPage; import com.ruoyi.auction.controller.management.vo.MgtAuctionBidRecordVO; import com.ruoyi.auction.controller.management.vo.MgtAuctionSalesroomScreenVO; import com.ruoyi.auction.controller.management.vo.MgtAuctionSalesroomVO; import com.ruoyi.auction.service.IAuctionSalesroomService; import com.ruoyi.common.core.domain.R; import com.ruoyi.common.core.utils.page.PageDTO; import com.ruoyi.common.core.web.page.BasePage; import io.swagger.annotations.Api; import io.swagger.annotations.ApiOperation; import io.swagger.annotations.ApiParam; import lombok.RequiredArgsConstructor; import org.springframework.validation.annotation.Validated; import org.springframework.web.bind.annotation.GetMapping; import org.springframework.web.bind.annotation.PathVariable; import org.springframework.web.bind.annotation.PostMapping; import org.springframework.web.bind.annotation.RequestBody; import org.springframework.web.bind.annotation.RequestMapping; import org.springframework.web.bind.annotation.RequestParam; import org.springframework.web.bind.annotation.RestController; /** @@ -52,10 +56,24 @@ * @param id 拍卖会id * @return 大屏操作台拍卖场视图对象 */ @PostMapping("/detail/{id}") @GetMapping("/detail/{id}") @ApiOperation(value = "进入详情", notes = "进入详情") public R<MgtAuctionSalesroomScreenVO> getAuctionSalesroomDetail(@PathVariable("id") Long id, @RequestParam("basePage") BasePage basePage) { return R.ok(auctionSalesroomService.getAuctionSalesroomDetail(id, basePage)); public R<MgtAuctionSalesroomScreenVO> getAuctionSalesroomDetail( @ApiParam(name = "id", value = "拍卖会id", required = true) @PathVariable("id") Long id) { return R.ok(auctionSalesroomService.getAuctionSalesroomDetail(id)); } /** * 进入详情-出价会员列表 * * @param mgtScreenBidPage 分页参数对象 * @return PageDTO<MgtAuctionBidRecordVO> */ @PostMapping("/bid-list") @ApiOperation(value = "进入详情-出价会员列表", notes = "进入详情-出价会员列表") public R<PageDTO<MgtAuctionBidRecordVO>> getAuctionSalesroomDetail( @Validated @RequestBody MgtScreenBidPage mgtScreenBidPage) { return R.ok(auctionSalesroomService.getScreenBidRecordList(mgtScreenBidPage)); } } ruoyi-modules/ruoyi-auction/src/main/java/com/ruoyi/auction/controller/management/dto/MgtScreenBidPage.java
New file @@ -0,0 +1,24 @@ package com.ruoyi.auction.controller.management.dto; import com.ruoyi.common.core.web.page.BasePage; import io.swagger.annotations.ApiModel; import io.swagger.annotations.ApiModelProperty; import javax.validation.constraints.NotNull; import lombok.Data; import lombok.EqualsAndHashCode; /** * @author mitao * @date 2024/6/3 */ @Data @EqualsAndHashCode(callSuper = true) @ApiModel(value = "分页参数对象") public class MgtScreenBidPage extends BasePage { private static final long serialVersionUID = 5385286841730866302L; @ApiModelProperty(value = "拍卖会id") @NotNull(message = "拍卖会id不能为空") private Long id; } ruoyi-modules/ruoyi-auction/src/main/java/com/ruoyi/auction/controller/management/vo/MgtAuctionGoodsVO.java
@@ -44,6 +44,9 @@ @ApiModelProperty(value = "拍品数量") private Integer auctionStock; @ApiModelProperty(value = "商品规格") private String spec; @ApiModelProperty(value = "保证金") private BigDecimal bond; @@ -59,6 +62,7 @@ @ApiModelProperty(value = "开始状态 0=预展中 1=拍卖中 2=已结束") private AuctionStartStatusEnum startStatus; @ApiModelProperty(value = "出价记录") private List<MgtAuctionBidRecordVO> recordList; } ruoyi-modules/ruoyi-auction/src/main/java/com/ruoyi/auction/controller/management/vo/MgtAuctionSalesroomScreenVO.java
@@ -2,7 +2,6 @@ import com.fasterxml.jackson.annotation.JsonFormat; import com.ruoyi.common.core.enums.AuctionStartStatusEnum; import com.ruoyi.common.core.utils.page.PageDTO; import io.swagger.annotations.ApiModel; import io.swagger.annotations.ApiModelProperty; import java.io.Serializable; @@ -44,6 +43,6 @@ @ApiModelProperty(value = "拍卖信息") private List<MgtAuctionSalesroomGoodsVO> auctionSalesroomGoodsVOS; @ApiModelProperty(value = "当前拍品出价信息") private PageDTO<MgtAuctionBidRecordVO> mgtAuctionBidRecordVOPageDTO; @ApiModelProperty(value = "出价会员列表") private List<MgtAuctionBidRecordVO> mgtAuctionBidRecordVOList; } ruoyi-modules/ruoyi-auction/src/main/java/com/ruoyi/auction/service/IAuctionGoodsService.java
@@ -8,6 +8,7 @@ import com.ruoyi.common.core.utils.page.PageDTO; import com.ruoyi.system.api.domain.AuctionGoods; import com.ruoyi.system.api.domain.dto.AuctionGoodsListDTO; import com.ruoyi.system.api.domain.dto.ListStatusDTO; import com.ruoyi.system.api.domain.vo.AuctionGoodsListVO; import com.ruoyi.system.api.domain.vo.AuctionGoodsinfoVO; import org.springframework.web.bind.annotation.RequestBody; @@ -44,6 +45,11 @@ */ MgtAuctionGoodsVO getAuctionGoodsById(Long id); /** * 立即结束 * * @param id 拍卖商品id */ void stopAuctionGoods(Long id); PageDTO<AuctionGoodsListVO> getAuctionGoodsList(AuctionGoodsListDTO auctionGoodsListDTO); @@ -55,4 +61,11 @@ void endAuctionGoods(Long id) throws JsonProcessingException; void startAuctionGoods(Long id) throws JsonProcessingException; /** * 下架/上架 拍卖商品 * * @param dto 商品上下架状态对象 */ void updStatus(ListStatusDTO dto); } ruoyi-modules/ruoyi-auction/src/main/java/com/ruoyi/auction/service/IAuctionSalesroomService.java
@@ -9,11 +9,11 @@ import com.ruoyi.auction.controller.management.dto.MgtAuctionSaleroomBidRecordQuery; import com.ruoyi.auction.controller.management.dto.MgtAuctionSalesroomDTO; import com.ruoyi.auction.controller.management.dto.MgtAuctionSalesroomQuery; import com.ruoyi.auction.controller.management.dto.MgtScreenBidPage; import com.ruoyi.auction.controller.management.vo.MgtAuctionBidRecordVO; import com.ruoyi.auction.controller.management.vo.MgtAuctionSalesroomScreenVO; import com.ruoyi.auction.controller.management.vo.MgtAuctionSalesroomVO; import com.ruoyi.common.core.utils.page.PageDTO; import com.ruoyi.common.core.web.page.BasePage; import com.ruoyi.system.api.domain.AppMiniLoginVO; import com.ruoyi.system.api.domain.AuctionSalesroom; import com.ruoyi.system.api.domain.dto.AppMiniLoginDTO; @@ -112,9 +112,16 @@ /** * 进入详情 * * @param id 拍卖会id * @param page * @param id 拍卖会id * @return 大屏操作台拍卖场视图对象 */ MgtAuctionSalesroomScreenVO getAuctionSalesroomDetail(Long id, BasePage basePage); MgtAuctionSalesroomScreenVO getAuctionSalesroomDetail(Long id); /** * 进入详情-出价会员列表 * * @param mgtScreenBidPage * @return PageDTO<MgtAuctionBidRecordVO> */ PageDTO<MgtAuctionBidRecordVO> getScreenBidRecordList(MgtScreenBidPage mgtScreenBidPage); } ruoyi-modules/ruoyi-auction/src/main/java/com/ruoyi/auction/service/impl/AuctionGoodsServiceImpl.java
@@ -44,6 +44,7 @@ import com.ruoyi.system.api.domain.dto.AuctionGoodsListDTO; import com.ruoyi.system.api.domain.dto.AuctionGoodsListPageDTO; import com.ruoyi.system.api.domain.dto.GoodsStockUpdDTO; import com.ruoyi.system.api.domain.dto.ListStatusDTO; import com.ruoyi.system.api.domain.dto.MemberAuctionSalesroomDTO; import com.ruoyi.system.api.domain.dto.OrderDTO; import com.ruoyi.system.api.domain.dto.RefundDTO; @@ -127,7 +128,28 @@ .eq(StringUtils.isNotNull(query.getStartStatus()), AuctionGoods::getStartStatus, query.getStartStatus()) .page(new Page<>(query.getPageCurr(), query.getPageSize())); return PageDTO.of(page, MgtAuctionGoodsVO.class); if (StringUtils.isEmpty(page.getRecords())) { return PageDTO.empty(page.getTotal(), page.getPages()); } // 查询商品信息 Set<Long> goodsIdList = page.getRecords().stream().map(AuctionGoods::getGoodsSkuId) .collect(Collectors.toSet()); List<GoodsSku> data = goodsSkuClient.getGoodsListByIds(goodsIdList, SecurityConstants.INNER) .getData(); PageDTO<MgtAuctionGoodsVO> pageDTO = PageDTO.of(page, MgtAuctionGoodsVO.class); if (StringUtils.isNotEmpty(data)) { Map<Long, GoodsSku> goodsSkuMap = data.stream() .collect(Collectors.toMap(GoodsSku::getId, e -> e)); for (MgtAuctionGoodsVO mgtAuctionGoodsVO : pageDTO.getList()) { GoodsSku goodsSku = goodsSkuMap.get(mgtAuctionGoodsVO.getGoodsSkuId()); if (StringUtils.isNotNull(goodsSku)) { mgtAuctionGoodsVO.setGoodsSkuName(goodsSku.getSkuName()); mgtAuctionGoodsVO.setSpec(goodsSku.getSpec()); } } } return pageDTO; } @Override @@ -567,4 +589,19 @@ log.info("===================>发送websocket通知,消息体{}", msg); } } /** * 下架/上架 拍卖商品 * * @param dto 商品上下架状态对象 */ @Override public void updStatus(ListStatusDTO dto) { AuctionGoods auctionGoods = this.getById(dto.getId()); if (StringUtils.isNull(auctionGoods)) { throw new ServiceException("拍卖商品不存在"); } auctionGoods.setListingStatus(dto.getListingStatus()); this.updateById(auctionGoods); } } ruoyi-modules/ruoyi-auction/src/main/java/com/ruoyi/auction/service/impl/AuctionSalesroomServiceImpl.java
@@ -24,6 +24,7 @@ import com.ruoyi.auction.controller.management.dto.MgtAuctionSalesroomDTO; import com.ruoyi.auction.controller.management.dto.MgtAuctionSalesroomGoodsDTO; import com.ruoyi.auction.controller.management.dto.MgtAuctionSalesroomQuery; import com.ruoyi.auction.controller.management.dto.MgtScreenBidPage; import com.ruoyi.auction.controller.management.vo.MgtAuctionBidRecordVO; import com.ruoyi.auction.controller.management.vo.MgtAuctionSalesroomGoodsVO; import com.ruoyi.auction.controller.management.vo.MgtAuctionSalesroomScreenVO; @@ -55,7 +56,6 @@ import com.ruoyi.common.core.utils.page.Checker; import com.ruoyi.common.core.utils.page.CollUtils; import com.ruoyi.common.core.utils.page.PageDTO; import com.ruoyi.common.core.web.page.BasePage; import com.ruoyi.system.api.domain.AppMiniLoginVO; import com.ruoyi.system.api.domain.AuctionGoods; import com.ruoyi.system.api.domain.AuctionSalesroom; @@ -84,6 +84,7 @@ import java.util.List; import java.util.Map; import java.util.Set; import java.util.concurrent.atomic.AtomicReference; import java.util.function.Function; import java.util.stream.Collectors; import javax.annotation.Resource; @@ -930,12 +931,11 @@ /** * 进入详情 * * @param id 拍卖会id * @param basePage * @param id 拍卖会id * @return 大屏操作台拍卖场视图对象 */ @Override public MgtAuctionSalesroomScreenVO getAuctionSalesroomDetail(Long id, BasePage basePage) { public MgtAuctionSalesroomScreenVO getAuctionSalesroomDetail(Long id) { MgtAuctionSalesroomVO mgtAuctionSalesroomVO = this.getAuctionSalesroom(id); MgtAuctionSalesroomScreenVO vo = BeanUtils.copyBean( mgtAuctionSalesroomVO, MgtAuctionSalesroomScreenVO.class); @@ -966,20 +966,55 @@ int index = collect.indexOf(vo.getCurrentAuctionSalesroomGoods()); vo.setNextAuctionSalesroomGoods(collect.get(index + 1)); // 分页查询当前拍品出价信息 Page<AuctionBidRecord> page = auctionBidRecordService.lambdaQuery() List<AuctionBidRecord> list = auctionBidRecordService.lambdaQuery() .eq(AuctionBidRecord::getTargetId, vo.getCurrentAuctionSalesroomGoods().getId()) .eq(AuctionBidRecord::getAuctionType, AuctionOrderTypeEnum.AUCTION_ITEMS) .page(new Page<>(basePage.getPageCurr(), basePage.getPageSize())); if (StringUtils.isNotEmpty(page.getRecords())) { vo.setMgtAuctionBidRecordVOPageDTO(PageDTO.empty(page)); .list(); if (StringUtils.isNotEmpty(list)) { vo.setMgtAuctionBidRecordVOList(CollUtils.emptyList()); } vo.setMgtAuctionBidRecordVOPageDTO(PageDTO.of(page, MgtAuctionBidRecordVO.class)); vo.setMgtAuctionBidRecordVOList( BeanUtils.copyList(list, MgtAuctionBidRecordVO.class)); } else { vo.setNextAuctionSalesroomGoods(collect.get(0)); } } return vo; } /** * 进入详情-出价会员列表 * * @param mgtScreenBidPage * @return PageDTO<MgtAuctionBidRecordVO> */ @Override public PageDTO<MgtAuctionBidRecordVO> getScreenBidRecordList( MgtScreenBidPage mgtScreenBidPage) { MgtAuctionSalesroomVO mgtAuctionSalesroomVO = this.getAuctionSalesroom( mgtScreenBidPage.getId()); List<MgtAuctionSalesroomGoodsVO> auctionSalesroomGoodsVOS = mgtAuctionSalesroomVO.getAuctionSalesroomGoodsVOS(); if (StringUtils.isEmpty(auctionSalesroomGoodsVOS)) { throw new ServiceException("该拍卖会暂无拍卖商品"); } AtomicReference<Long> currentAuctionGoodsId = new AtomicReference<>(); auctionSalesroomGoodsVOS.stream() .filter(item -> item.getStatus().equals(AuctionGoodsStatusEnum.IN_PROGRESS)) .findFirst().ifPresent(goods -> { currentAuctionGoodsId.set(goods.getId()); }); Page<AuctionBidRecord> page = auctionBidRecordService.lambdaQuery() .eq(StringUtils.isNotNull(currentAuctionGoodsId.get()), AuctionBidRecord::getTargetId, currentAuctionGoodsId.get()) .eq(AuctionBidRecord::getAuctionType, AuctionOrderTypeEnum.AUCTION_ITEMS) .page(new Page<>(mgtScreenBidPage.getPageCurr(), mgtScreenBidPage.getPageSize())); if (StringUtils.isNotEmpty(page.getRecords())) { return PageDTO.empty(page); } return PageDTO.of(page, MgtAuctionBidRecordVO.class); } } ruoyi-modules/ruoyi-goods/src/main/java/com/ruoyi/goods/controller/management/MgtGoodsSkuController.java
@@ -158,7 +158,7 @@ */ @ApiOperation(value = "下架/上架 商品", notes = "下架/上架 商品") @PutMapping("/upd-status") public R<Void> updStatus(@RequestBody ListStatusDTO dto) { public R<Void> updStatus(@Validated @RequestBody ListStatusDTO dto) { goodsSkuService.updStatus(dto); return R.ok(); }