| | |
| | | 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> |
| | |
| | | public class MgtAuctionSalesroomController { |
| | | |
| | | private final IAuctionSalesroomService auctionSalesroomService; |
| | | private final AuctionBidRecordMapper auctionBidRecordMapper; |
| | | private final IAuctionSalesroomGoodsService auctionSalesroomGoodsService; |
| | | private final GoodsSkuClient goodsSkuClient; |
| | | |
| | | /** |
| | | * 分页查询拍卖场 |
| | |
| | | @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); |
| | | } |
| | | } |
| | | } |