From b669014e87140bf24f8f7a2de6bde63ff4105fc1 Mon Sep 17 00:00:00 2001
From: mitao <2763622819@qq.com>
Date: 星期二, 11 三月 2025 18:08:44 +0800
Subject: [PATCH] 拍卖结果弹窗消息
---
ruoyi-modules/ruoyi-auction/src/main/java/com/ruoyi/auction/controller/management/MgtAuctionSalesroomController.java | 260 ++++++++++++++++++++++++++++++++++++++++++++++++++++
1 files changed, 260 insertions(+), 0 deletions(-)
diff --git a/ruoyi-modules/ruoyi-auction/src/main/java/com/ruoyi/auction/controller/management/MgtAuctionSalesroomController.java b/ruoyi-modules/ruoyi-auction/src/main/java/com/ruoyi/auction/controller/management/MgtAuctionSalesroomController.java
index 1e4f465..b9d1a29 100644
--- a/ruoyi-modules/ruoyi-auction/src/main/java/com/ruoyi/auction/controller/management/MgtAuctionSalesroomController.java
+++ b/ruoyi-modules/ruoyi-auction/src/main/java/com/ruoyi/auction/controller/management/MgtAuctionSalesroomController.java
@@ -1,6 +1,56 @@
package com.ruoyi.auction.controller.management;
+import com.alibaba.excel.EasyExcel;
+import com.alibaba.excel.util.DateUtils;
+import com.baomidou.mybatisplus.core.conditions.query.LambdaQueryWrapper;
+import com.google.zxing.WriterException;
+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.vo.AuctionBidRecordVO;
+import com.ruoyi.auction.controller.management.vo.MgtAuctionBidRecordVO;
+import com.ruoyi.auction.controller.management.vo.MgtAuctionSalesroomVO;
+import com.ruoyi.auction.domain.AuctionBidRecord;
+import com.ruoyi.auction.mapper.AuctionBidRecordMapper;
+import com.ruoyi.auction.service.IAuctionSalesroomGoodsService;
+import com.ruoyi.auction.service.IAuctionSalesroomService;
+import com.ruoyi.auction.util.weChat.EnvVersion;
+import com.ruoyi.auction.util.weChat.WeChatUtil;
+import com.ruoyi.common.core.constant.SecurityConstants;
+import com.ruoyi.common.core.domain.R;
+import com.ruoyi.common.core.enums.AuctionOrderTypeEnum;
+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.CollUtils;
+import com.ruoyi.common.core.utils.page.PageDTO;
+import com.ruoyi.system.api.domain.AuctionSalesroom;
+import com.ruoyi.system.api.domain.AuctionSalesroomGoods;
+import com.ruoyi.system.api.domain.GoodsSku;
+import com.ruoyi.system.api.feignClient.GoodsSkuClient;
+import io.swagger.annotations.Api;
+import io.swagger.annotations.ApiOperation;
+import io.swagger.annotations.ApiParam;
+import java.io.IOException;
+import java.math.BigDecimal;
+import java.net.URLEncoder;
+import java.util.Collections;
+import java.util.Date;
+import java.util.List;
+import java.util.Map;
+import java.util.Set;
+import java.util.stream.Collectors;
+import javax.servlet.http.HttpServletResponse;
+import lombok.RequiredArgsConstructor;
+import lombok.extern.slf4j.Slf4j;
+import org.springframework.util.CollectionUtils;
+import org.springframework.validation.annotation.Validated;
+import org.springframework.web.bind.annotation.DeleteMapping;
+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.RestController;
@@ -12,8 +62,218 @@
* @author mitao
* @since 2024-05-16
*/
+@Slf4j
@RestController
@RequestMapping("/mgt/auction-salesroom")
+@RequiredArgsConstructor
+@Api(value = "拍卖场管理相关接口", tags = {"管理后台-拍卖场管理相关接口"})
public class MgtAuctionSalesroomController {
+ private final IAuctionSalesroomService auctionSalesroomService;
+ private final AuctionBidRecordMapper auctionBidRecordMapper;
+ private final IAuctionSalesroomGoodsService auctionSalesroomGoodsService;
+ private final GoodsSkuClient goodsSkuClient;
+ private final WeChatUtil weChatUtil;
+
+ /**
+ * 分页查询拍卖场
+ *
+ * @param query 拍卖场查询对象
+ * @return PageDTO<MgtAuctionSalesroomVO>
+ */
+ @PostMapping("/page")
+ @ApiOperation(value = "获取拍卖场列表的分页数据", notes = "获取拍卖场列表的分页数据")
+ public R<PageDTO<MgtAuctionSalesroomVO>> getAuctionSalesroomPage(
+ @Validated @RequestBody MgtAuctionSalesroomQuery query) {
+ return R.ok(auctionSalesroomService.getAuctionSalesroomPage(query));
+ }
+
+ /**
+ * 查看二维码
+ *
+ * @param id 拍卖场id
+ * @return 二维码
+ */
+ @GetMapping("/qr-code/{id}")
+ @ApiOperation(value = "查看二维码", notes = "查看二维码")
+ public R<String> getQrCode(
+ @ApiParam(name = "id", value = "拍卖场id", required = true) @PathVariable("id") Long id) {
+
+ AuctionSalesroom auctionSalesroom = auctionSalesroomService.getById(id);
+ if (StringUtils.isNotEmpty(auctionSalesroom.getQrCode())){
+ return R.ok(auctionSalesroom.getQrCode());
+ }
+ try {
+
+ String qrCode = weChatUtil.getwxacodeunlimit("pages/mall/mall",
+ "id=" + auctionSalesroom.getAuctionSalesroomNo() + "&t="
+ + auctionSalesroom.getType().getCode(),
+ EnvVersion.TRIAL, null); // TODO 上线需要修改为正式环境
+ auctionSalesroom.setQrCode(qrCode);
+ auctionSalesroomService.updateById(auctionSalesroom);
+ return R.ok(qrCode);
+ } catch (Exception e) {
+ log.info("查看二维码异常", e);
+ return R.fail();
+ }
+ }
+
+ /**
+ * 添加/编辑 拍卖场
+ *
+ * @param dto 拍卖场数据传输对象
+ */
+ @PostMapping("/save")
+ @ApiOperation(value = "添加/编辑 拍卖场", notes = "添加/编辑 拍卖场")
+ public R<?> saveAuctionSalesroom(
+ @Validated @RequestBody MgtAuctionSalesroomDTO dto) {
+ try {
+ auctionSalesroomService.saveAuctionSalesroom(dto);
+ } catch (IOException | WriterException e) {
+ throw new RuntimeException(e);
+ }
+ return R.ok();
+ }
+
+ /**
+ * 查看详情
+ *
+ * @param id 拍卖会id
+ * @return 拍卖场视图对象
+ */
+ @GetMapping("/{id}")
+ @ApiOperation(value = "查看详情", notes = "查看详情")
+ public R<MgtAuctionSalesroomVO> getAuctionSalesroom(
+ @ApiParam(name = "id", value = "拍卖会id", required = true) @PathVariable("id") Long id) {
+ return R.ok(auctionSalesroomService.getAuctionSalesroom(id, Boolean.FALSE));
+ }
+
+ /**
+ * 查看详情-出价记录
+ *
+ * @param query 拍卖场出价记录查询对象
+ * @return PageDTO<MgtAuctionBidRecordVO>
+ */
+ @PostMapping("/bid-record")
+ @ApiOperation(value = "查看详情-出价记录", notes = "查看详情-出价记录")
+ public R<PageDTO<MgtAuctionBidRecordVO>> getAuctionSalesroomBidRecordList(
+ @Validated @RequestBody MgtAuctionSaleroomBidRecordQuery query) {
+ return R.ok(auctionSalesroomService.getAuctionSalesroomBidRecordList(query));
+ }
+
+ /**
+ * 删除拍卖场
+ */
+ @DeleteMapping("/{id}")
+ @ApiOperation(value = "删除拍卖场", notes = "删除拍卖场")
+ public R<?> deleteAuctionSalesroom(@PathVariable("id") Long id){
+ auctionSalesroomService.removeById(id);
+ return R.ok();
+ }
+
+
+ /**
+ * 导出列表
+ */
+ @ApiOperation("导出列表")
+ @PostMapping("/export")
+ public void export(@RequestBody MgtAuctionSalesroomQuery query, HttpServletResponse response) {
+ List<AuctionBidRecordVO> result = Collections.emptyList();
+ List<MgtAuctionSalesroomVO> list = auctionSalesroomService.getAuctionSalesroomList(query);
+ List<Long> ids = list.stream().map(MgtAuctionSalesroomVO::getId).collect(Collectors.toList());
+
+
+ List<AuctionBidRecord> auctionBidRecordList = auctionBidRecordMapper.selectList(
+ new LambdaQueryWrapper<AuctionBidRecord>()
+ .in(!CollectionUtils.isEmpty(ids),AuctionBidRecord::getAuctionSalesroomId, ids)
+ .eq(AuctionBidRecord::getAuctionType, AuctionOrderTypeEnum.AUCTION_ITEMS)
+ );
+ if (CollUtils.isNotEmpty(auctionBidRecordList)) {
+ // 提取 goodsIds 和 auctionSalesroomIds
+ Set<Long> goodsIds = auctionBidRecordList.stream()
+ .map(AuctionBidRecord::getTargetId)
+ .collect(Collectors.toSet());
+
+ Set<Long> auctionSalesroomIds = auctionBidRecordList.stream()
+ .map(AuctionBidRecord::getAuctionSalesroomId)
+ .collect(Collectors.toSet());
+
+ // 查询拍卖场商品信息
+ List<AuctionSalesroomGoods> salesroomGoodss = auctionSalesroomGoodsService.list(
+ new LambdaQueryWrapper<AuctionSalesroomGoods>()
+ .in(AuctionSalesroomGoods::getAuctionSalesroomId, auctionSalesroomIds)
+ .in(AuctionSalesroomGoods::getGoodsSkuId, goodsIds)
+ );
+
+ Map<String, AuctionSalesroomGoods> roomMap = salesroomGoodss.stream()
+ .collect(Collectors.toMap(
+ i -> String.format("%s-%s", i.getAuctionSalesroomId(),
+ i.getGoodsSkuId()),
+ i -> i
+ ));
+
+ // 查询拍卖场信息
+ List<AuctionSalesroom> auctionSalesroomList = auctionSalesroomService.listByIds(
+ auctionSalesroomIds);
+ Map<Long, AuctionSalesroom> auctionSalesroomMap = auctionSalesroomList.stream()
+ .collect(Collectors.toMap(AuctionSalesroom::getId, e -> e));
+
+ // 查询商品信息
+ R<List<GoodsSku>> goodsListByIdsR = goodsSkuClient.getGoodsListByIds(goodsIds,
+ SecurityConstants.INNER);
+ if (R.isError(goodsListByIdsR)) {
+ throw new ServiceException("查询商品信息失败");
+ }
+ List<GoodsSku> goodsSkuList = goodsListByIdsR.getData();
+ Map<Long, GoodsSku> goodsSkuMap = goodsSkuList.stream()
+ .collect(Collectors.toMap(GoodsSku::getId, e -> e));
+
+ // 构建结果列表
+ result = auctionBidRecordList.stream().map(auctionBidRecord -> {
+ AuctionBidRecordVO auctionBidRecordVO = BeanUtils.copyBean(auctionBidRecord,
+ AuctionBidRecordVO.class);
+ auctionBidRecordVO.setNum(auctionBidRecordList.indexOf(auctionBidRecord) + 1);
+
+ AuctionSalesroomGoods salesroomGoods = roomMap.get(
+ String.format("%s-%s", auctionBidRecord
+ .getAuctionSalesroomId(), auctionBidRecord.getTargetId()));
+ if (salesroomGoods != null) {
+ BigDecimal totalAmount = auctionBidRecord.getLastBidAmount()
+ .multiply(new BigDecimal(salesroomGoods
+ .getDealQuantity()));
+ auctionBidRecordVO.setTotalAmount(totalAmount);
+ }
+
+ AuctionSalesroom auctionSalesroom = auctionSalesroomMap.get(
+ auctionBidRecord.getAuctionSalesroomId());
+ if (auctionSalesroom != null) {
+ auctionBidRecordVO.setAuctionSalesroomName(auctionSalesroom.getSalesroomName());
+ }
+
+ GoodsSku goodsSku = goodsSkuMap.get(auctionBidRecord.getTargetId());
+ if (goodsSku != null) {
+ auctionBidRecordVO.setGoodsSkuName(goodsSku.getSkuName());
+ }
+
+ return auctionBidRecordVO;
+ }).collect(Collectors.toList());
+ }
+
+ response.setContentType(
+ "application/vnd.openxmlformats-officedocument.spreadsheetml.sheet");
+ response.setCharacterEncoding("utf-8");
+ // 这里URLEncoder.encode可以防止中文乱码 当然和easyexcel没有关系
+ try {
+ String fileName = URLEncoder.encode(
+ "拍卖场出价记录" + DateUtils.format(new Date(), "yyyyMMddHHmmss"), "UTF-8")
+ .replaceAll("\\+", "%20");
+ response.setHeader("Content-disposition",
+ "attachment;filename*=utf-8''" + fileName + ".xlsx");
+ EasyExcel.write(response.getOutputStream(), AuctionBidRecordVO.class)
+ .sheet("拍卖场出价记录")
+ .doWrite(result);
+ } catch (IOException e) {
+ throw new RuntimeException(e);
+ }
+ }
}
--
Gitblit v1.7.1