From e097b03e9032a8e884c36e6a28d8b5002780daeb Mon Sep 17 00:00:00 2001
From: mitao <2763622819@qq.com>
Date: 星期五, 14 二月 2025 17:02:46 +0800
Subject: [PATCH] Merge remote-tracking branch 'origin/dev-1.0.1' into dev-1.0.1

---
 ruoyi-modules/ruoyi-auction/src/main/java/com/ruoyi/auction/controller/management/MgtAuctionSalesroomController.java |  160 +++++++++++++++++++++++++++++++++++++++++++++++++++--
 1 files changed, 154 insertions(+), 6 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 80f5cd5..71eaa4b 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,28 +1,52 @@
 package com.ruoyi.auction.controller.management;
 
 
+import com.alibaba.excel.EasyExcel;
+import com.alibaba.excel.util.DateUtils;
+import com.alibaba.fastjson2.JSONObject;
+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.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.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.ApiImplicitParam;
 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.Date;
+import java.util.List;
+import java.util.Map;
+import java.util.Set;
+import java.util.stream.Collectors;
+
 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.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;
+import org.springframework.web.bind.annotation.*;
+
+import javax.servlet.http.HttpServletResponse;
 
 /**
  * <p>
@@ -40,6 +64,9 @@
 public class MgtAuctionSalesroomController {
 
     private final IAuctionSalesroomService auctionSalesroomService;
+    private final AuctionBidRecordMapper auctionBidRecordMapper;
+    private final IAuctionSalesroomGoodsService auctionSalesroomGoodsService;
+    private final GoodsSkuClient goodsSkuClient;
 
     /**
      * 分页查询拍卖场
@@ -114,4 +141,125 @@
             @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")
+    @ApiImplicitParam(name = "ids", value = "查询条件", required = true)
+    public void export(@RequestBody String query, HttpServletResponse response) {
+        // 验证输入是否为空或格式不正确
+        if (StringUtils.isEmpty(query)) {
+            throw new ServiceException("查询条件不能为空");
+        }
+
+        JSONObject jsonObject = JSONObject.parseObject(query);
+        List<String> ids = jsonObject.getList("ids", String.class);
+
+        // 验证ids是否为空
+        if (CollectionUtils.isEmpty(ids)) {
+            throw new ServiceException("ids不能为空");
+        }
+
+        List<AuctionBidRecord> auctionBidRecordList = auctionBidRecordMapper.selectList(
+                new LambdaQueryWrapper<AuctionBidRecord>()
+                        .in(!CollectionUtils.isEmpty(ids),AuctionBidRecord::getAuctionSalesroomId, ids)
+                        .eq(AuctionBidRecord::getAuctionType, AuctionOrderTypeEnum.AUCTION_ITEMS)
+        );
+
+        if (CollectionUtils.isEmpty(auctionBidRecordList)) {
+            return;
+        }
+
+        // 提取 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));
+
+        // 构建结果列表
+        List<AuctionBidRecordVO> 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