mitao
2025-03-11 ab34ef62429262bcde69186f1e5edecc5f66c001
ruoyi-modules/ruoyi-auction/src/main/java/com/ruoyi/auction/controller/management/MgtAuctionSalesroomController.java
@@ -3,9 +3,7 @@
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.baomidou.mybatisplus.core.conditions.update.LambdaUpdateWrapper;
import com.google.zxing.WriterException;
import com.ruoyi.auction.controller.management.dto.MgtAuctionSaleroomBidRecordQuery;
import com.ruoyi.auction.controller.management.dto.MgtAuctionSalesroomDTO;
@@ -25,29 +23,36 @@
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.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.*;
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.*;
import javax.annotation.Resource;
import javax.servlet.http.HttpServletResponse;
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;
/**
 * <p>
@@ -171,27 +176,8 @@
    @ApiOperation("导出列表")
    @PostMapping("/export")
    public void export(@RequestBody MgtAuctionSalesroomQuery query, HttpServletResponse response) {
        PageDTO<MgtAuctionSalesroomVO> page = auctionSalesroomService.getAuctionSalesroomPage(query);
        if (page.isEmpty()){
            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(new ArrayDeque<>());
            } catch (IOException e) {
                throw new RuntimeException(e);
            }
        }
        List<MgtAuctionSalesroomVO> list = page.getList();
        List<AuctionBidRecordVO> result = Collections.emptyList();
        List<MgtAuctionSalesroomVO> list = auctionSalesroomService.getAuctionSalesroomList(query);
        List<Long> ids = list.stream().map(MgtAuctionSalesroomVO::getId).collect(Collectors.toList());
@@ -200,11 +186,7 @@
                        .in(!CollectionUtils.isEmpty(ids),AuctionBidRecord::getAuctionSalesroomId, ids)
                        .eq(AuctionBidRecord::getAuctionType, AuctionOrderTypeEnum.AUCTION_ITEMS)
        );
        if (CollectionUtils.isEmpty(auctionBidRecordList)) {
            return;
        }
        if (CollUtils.isNotEmpty(auctionBidRecordList)) {
        // 提取 goodsIds 和 auctionSalesroomIds
        Set<Long> goodsIds = auctionBidRecordList.stream()
                .map(AuctionBidRecord::getTargetId)
@@ -223,37 +205,45 @@
        Map<String, AuctionSalesroomGoods> roomMap = salesroomGoodss.stream()
                .collect(Collectors.toMap(
                        i -> String.format("%s-%s", i.getAuctionSalesroomId(), i.getGoodsSkuId()),
                            i -> String.format("%s-%s", i.getAuctionSalesroomId(),
                                    i.getGoodsSkuId()),
                        i -> i
                ));
        // 查询拍卖场信息
        List<AuctionSalesroom> auctionSalesroomList = auctionSalesroomService.listByIds(auctionSalesroomIds);
            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);
            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));
            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);
            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
                AuctionSalesroomGoods salesroomGoods = roomMap.get(
                        String.format("%s-%s", auctionBidRecord
                    .getAuctionSalesroomId(), auctionBidRecord.getTargetId()));
            if (salesroomGoods != null) {
                BigDecimal totalAmount = auctionBidRecord.getLastBidAmount().multiply(new BigDecimal(salesroomGoods
                    BigDecimal totalAmount = auctionBidRecord.getLastBidAmount()
                            .multiply(new BigDecimal(salesroomGoods
                        .getDealQuantity()));
                auctionBidRecordVO.setTotalAmount(totalAmount);
            }
            AuctionSalesroom auctionSalesroom = auctionSalesroomMap.get(auctionBidRecord.getAuctionSalesroomId());
                AuctionSalesroom auctionSalesroom = auctionSalesroomMap.get(
                        auctionBidRecord.getAuctionSalesroomId());
            if (auctionSalesroom != null) {
                auctionBidRecordVO.setAuctionSalesroomName(auctionSalesroom.getSalesroomName());
            }
@@ -265,7 +255,7 @@
            return auctionBidRecordVO;
        }).collect(Collectors.toList());
        }
        response.setContentType(
                "application/vnd.openxmlformats-officedocument.spreadsheetml.sheet");
@@ -273,12 +263,12 @@
        // 这里URLEncoder.encode可以防止中文乱码 当然和easyexcel没有关系
        try {
            String fileName = URLEncoder.encode(
                            "优惠券领取明细" + DateUtils.format(new Date(), "yyyyMMddHHmmss"), "UTF-8")
                            "拍卖场出价记录" + 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("优惠券领取明细")
                    .sheet("拍卖场出价记录")
                    .doWrite(result);
        } catch (IOException e) {
            throw new RuntimeException(e);