From 4a9c1f1964a91a5426052f601d2c1074cdd5b338 Mon Sep 17 00:00:00 2001 From: peihao <1280253838@qq.com> Date: Wed, 1 Sep 2021 15:48:21 +0800 Subject: [PATCH] =?UTF-8?q?1.1.0=20=E6=96=B0=E5=A2=9E=E5=8F=82=E6=8B=8D?= =?UTF-8?q?=E8=AE=B0=E5=BD=95=E5=AF=BC=E5=87=BA=E6=8E=A5=E5=8F=A3=EF=BC=8C?= =?UTF-8?q?=E6=89=B9=E9=87=8F=E5=88=A0=E9=99=A4=E6=8E=A5=E5=8F=A3=EF=BC=9B?= =?UTF-8?q?=E4=BF=AE=E6=94=B9=E5=AF=BC=E5=87=BA=E6=96=B9=E6=B3=95?= MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit --- .../controller/AuctionRecordController.java | 36 +++++++++++++++--- .../land/controller/LandListedController.java | 6 +-- .../land/controller/LandToListController.java | 4 +- .../air/land/mapper/AuctionRecordMapper.java | 2 + .../land/service/AuctionRecordService.java | 2 + .../air/land/service/LandListedService.java | 10 +++++ .../air/land/service/LandToListService.java | 9 +++++ .../impl/AuctionRecordServiceImpl.java | 30 +++++++++++++++ .../service/impl/LandListedServiceImpl.java | 20 +++++++++- .../service/impl/LandToListServiceImpl.java | 18 +++++++++ .../main/java/com/air/utils/ExcelUtil.java | 18 ++++++--- .../resources/mapper/AuctionRecordMapper.xml | 15 ++++++++ .../templates/excel/auction_record.xlsx | Bin 0 -> 9106 bytes 13 files changed, 154 insertions(+), 16 deletions(-) create mode 100644 air/src/main/resources/templates/excel/auction_record.xlsx diff --git a/air/src/main/java/com/air/land/controller/AuctionRecordController.java b/air/src/main/java/com/air/land/controller/AuctionRecordController.java index 1322159..1863a21 100644 --- a/air/src/main/java/com/air/land/controller/AuctionRecordController.java +++ b/air/src/main/java/com/air/land/controller/AuctionRecordController.java @@ -5,6 +5,7 @@ import com.air.land.entity.AuctionRecord; import com.air.land.service.AuctionRecordService; import com.air.land.vo.AuctionRecordPageVo; import com.air.land.vo.AuctionRecordVo; +import com.air.utils.ExcelUtil; import com.baomidou.mybatisplus.core.conditions.query.LambdaQueryWrapper; import com.baomidou.mybatisplus.core.metadata.IPage; import com.baomidou.mybatisplus.core.toolkit.Wrappers; @@ -13,12 +14,17 @@ import com.cinderella.framework.common.data.mybatis.QueryPage; import io.swagger.annotations.Api; import io.swagger.annotations.ApiOperation; import lombok.AllArgsConstructor; +import org.apache.poi.xssf.usermodel.XSSFWorkbook; import org.springframework.transaction.annotation.Transactional; import org.springframework.validation.annotation.Validated; import org.springframework.web.bind.annotation.*; import org.springframework.web.multipart.MultipartFile; +import javax.servlet.http.HttpServletResponse; import javax.validation.Valid; +import java.io.IOException; +import java.io.InputStream; +import java.io.OutputStream; import java.util.List; @@ -91,13 +97,13 @@ public class AuctionRecordController { /** * 通过id删除参拍记录表 * - * @param id + * @param ids * @return R */ - @ApiOperation(value = "通过id删除参拍记录表", notes = "通过id删除参拍记录表") - @DeleteMapping("/{id}") - public R removeById(@PathVariable Long id) { - return R.ok(auctionRecordService.removeById(id)); + @ApiOperation(value = "通过ids删除参拍记录表", notes = "通过ids删除参拍记录表") + @DeleteMapping + public R removeByIds(@RequestBody List ids) { + return R.ok(auctionRecordService.removeByIds(ids)); } /** @@ -110,4 +116,24 @@ public class AuctionRecordController { public R> importRecordExcel(@RequestParam(value="uploadFile") MultipartFile file){ return R.ok(auctionRecordService.readRecordExcel(file)); } + + /** + * 导出地块参拍记录 + * + * @author peihao + * @date 2021/5/25 + **/ + @ApiOperation(value = "导出地块参拍记录", notes = "导出地块参拍记录") + @GetMapping("/exportRecordExcel") + public void exportLandListExcel(HttpServletResponse response, @RequestParam List auctionRecordIds) throws IOException { + List> recordList = auctionRecordService.getAuctionRecord(auctionRecordIds); + InputStream resourceAsStream = LandListedController.class.getClassLoader().getResourceAsStream("templates/excel/auction_record.xlsx"); + // 读取excel模板 + XSSFWorkbook wb = ExcelUtil.exportLandListedExcel(recordList,resourceAsStream,1); + response.setContentType("application/vnd.ms-excel;charset=utf-8"); + response.setHeader("Content-Disposition", "attachment;filename=report.xlsx"); + OutputStream outputStream = response.getOutputStream(); + wb.write(outputStream); + } + } diff --git a/air/src/main/java/com/air/land/controller/LandListedController.java b/air/src/main/java/com/air/land/controller/LandListedController.java index 9cb6c57..8648937 100644 --- a/air/src/main/java/com/air/land/controller/LandListedController.java +++ b/air/src/main/java/com/air/land/controller/LandListedController.java @@ -169,8 +169,8 @@ public class LandListedController { */ @ApiOperation(value = "通过id删除已挂牌地块", notes = "通过id删除已挂牌地块") @DeleteMapping - public R removeById(@RequestBody List landListedIds) { - return R.ok(landListedService.removeByIds(landListedIds)); + public R removeByIds(@RequestBody List landListedIds) { + return R.ok(landListedService.removeLandByIds(landListedIds),"删除成功"); } /** @@ -214,7 +214,7 @@ public class LandListedController { List> landList = landListedService.getLandList(ids); InputStream resourceAsStream = LandListedController.class.getClassLoader().getResourceAsStream("templates/excel/exportLandList.xlsx"); // 读取excel模板 - XSSFWorkbook wb = ExcelUtil.exportLandListedExcel(landList,resourceAsStream); + XSSFWorkbook wb = ExcelUtil.exportLandListedExcel(landList,resourceAsStream,2); response.setContentType("application/vnd.ms-excel;charset=utf-8"); response.setHeader("Content-Disposition", "attachment;filename=report.xlsx"); OutputStream outputStream = response.getOutputStream(); diff --git a/air/src/main/java/com/air/land/controller/LandToListController.java b/air/src/main/java/com/air/land/controller/LandToListController.java index a83643e..e0aaee6 100644 --- a/air/src/main/java/com/air/land/controller/LandToListController.java +++ b/air/src/main/java/com/air/land/controller/LandToListController.java @@ -155,7 +155,7 @@ public class LandToListController { @ApiOperation(value = "通过id删除拟挂牌地块", notes = "通过id删除拟挂牌地块") @DeleteMapping public R removeById(@RequestBody List proposedseriaIds) { - return R.ok(landToListService.removeByIds(proposedseriaIds)); + return R.ok(landToListService.removeLandToListByIds(proposedseriaIds)); } @@ -194,7 +194,7 @@ public class LandToListController { List> landList = landToListService.getLandList(ids); InputStream resourceAsStream = LandListedController.class.getClassLoader().getResourceAsStream("templates/excel/exportLandToList.xlsx"); // 读取excel模板 - XSSFWorkbook wb = ExcelUtil.exportLandListedExcel(landList,resourceAsStream); + XSSFWorkbook wb = ExcelUtil.exportLandListedExcel(landList,resourceAsStream,2); response.setContentType("application/vnd.ms-excel;charset=utf-8"); response.setHeader("Content-Disposition","attachment;filename=report.xlsx"); OutputStream outputStream = response.getOutputStream(); diff --git a/air/src/main/java/com/air/land/mapper/AuctionRecordMapper.java b/air/src/main/java/com/air/land/mapper/AuctionRecordMapper.java index f4593eb..f42252b 100644 --- a/air/src/main/java/com/air/land/mapper/AuctionRecordMapper.java +++ b/air/src/main/java/com/air/land/mapper/AuctionRecordMapper.java @@ -17,4 +17,6 @@ import java.util.List; public interface AuctionRecordMapper extends BaseMapper { List selectPages(Page page, @Param("param") AuctionRecordPageVo recordPageVo); + + List getAuctionRecords(@Param("ids") List ids); } diff --git a/air/src/main/java/com/air/land/service/AuctionRecordService.java b/air/src/main/java/com/air/land/service/AuctionRecordService.java index 8f72398..dcf560f 100644 --- a/air/src/main/java/com/air/land/service/AuctionRecordService.java +++ b/air/src/main/java/com/air/land/service/AuctionRecordService.java @@ -29,6 +29,8 @@ public interface AuctionRecordService extends IService { */ List readRecordExcel(MultipartFile file); + List> getAuctionRecord(List auctionRecordIds); + IPage selectPage(Page page, AuctionRecordPageVo recordPageVo); } diff --git a/air/src/main/java/com/air/land/service/LandListedService.java b/air/src/main/java/com/air/land/service/LandListedService.java index ea92103..19aa55d 100644 --- a/air/src/main/java/com/air/land/service/LandListedService.java +++ b/air/src/main/java/com/air/land/service/LandListedService.java @@ -80,4 +80,14 @@ public interface LandListedService extends IService { * @return **/ Integer selectId(); + + + /** + * 删除已挂牌地块及经纬度数据 + * @author peihao + * @param landListedIds 已挂牌id集合 + * @date 2021/9/1 + * @return + **/ + boolean removeLandByIds(List landListedIds); } diff --git a/air/src/main/java/com/air/land/service/LandToListService.java b/air/src/main/java/com/air/land/service/LandToListService.java index b5965c7..7aebda9 100644 --- a/air/src/main/java/com/air/land/service/LandToListService.java +++ b/air/src/main/java/com/air/land/service/LandToListService.java @@ -35,4 +35,13 @@ public interface LandToListService extends IService { **/ Integer selectId(); + /** + * 删除拟挂牌地块及经纬度数据 + * @author peihao + * @param landListedIds 拟挂牌id集合 + * @date 2021/9/1 + * @return + **/ + boolean removeLandToListByIds(List landListedIds); + } diff --git a/air/src/main/java/com/air/land/service/impl/AuctionRecordServiceImpl.java b/air/src/main/java/com/air/land/service/impl/AuctionRecordServiceImpl.java index 3891b4f..9496122 100644 --- a/air/src/main/java/com/air/land/service/impl/AuctionRecordServiceImpl.java +++ b/air/src/main/java/com/air/land/service/impl/AuctionRecordServiceImpl.java @@ -1,5 +1,6 @@ package com.air.land.service.impl; +import cn.hutool.core.collection.CollectionUtil; import cn.hutool.core.date.DateUtil; import cn.hutool.core.io.FileUtil; import cn.hutool.core.io.IoUtil; @@ -14,6 +15,7 @@ import com.air.land.vo.AuctionRecordPageVo; import com.baomidou.mybatisplus.core.metadata.IPage; import com.baomidou.mybatisplus.extension.plugins.pagination.Page; import com.baomidou.mybatisplus.extension.service.impl.ServiceImpl; +import com.cinderella.framework.common.core.exception.BusinessException; import lombok.SneakyThrows; import lombok.extern.slf4j.Slf4j; import org.apache.poi.xssf.usermodel.XSSFCell; @@ -75,6 +77,15 @@ public class AuctionRecordServiceImpl extends ServiceImpl> getAuctionRecord(List auctionRecordIds) { + List auctionRecords = baseMapper.getAuctionRecords(auctionRecordIds); + if (CollectionUtil.isEmpty(auctionRecords)){ + throw new BusinessException("未查询到企业参拍记录"); + } + return entityToList(auctionRecords); + } + @Override public IPage selectPage(Page page, AuctionRecordPageVo recordPageVo) { List auctionRecords = baseMapper.selectPages(page, recordPageVo); @@ -133,6 +144,25 @@ public class AuctionRecordServiceImpl extends ServiceImpl> entityToList(List auctionRecords){ + List> result = new ArrayList<>(auctionRecords.size()); + auctionRecords.forEach(auctionRecord -> { + List list = new ArrayList<>(); + list.add(auctionRecord.getLandCode()); + list.add(auctionRecord.getRanking()); + list.add(auctionRecord.getRaiseEnterprise()); + list.add(auctionRecord.getRaisePrice()); + list.add(auctionRecord.getNominalFloorPrice()); + list.add(auctionRecord.getPercentUnpaidTransfers()); + list.add(auctionRecord.getActualFloorPrice()); + list.add(auctionRecord.getPremiumRate()); + list.add(auctionRecord.getFinalRound()); + list.add(auctionRecord.getWinnerEnterprises()); + result.add(list); + }); + return result; + } + private String getCellValue(XSSFCell cell) { String value; try { diff --git a/air/src/main/java/com/air/land/service/impl/LandListedServiceImpl.java b/air/src/main/java/com/air/land/service/impl/LandListedServiceImpl.java index d105423..dd6e895 100644 --- a/air/src/main/java/com/air/land/service/impl/LandListedServiceImpl.java +++ b/air/src/main/java/com/air/land/service/impl/LandListedServiceImpl.java @@ -7,10 +7,13 @@ import com.air.applets.vo.LandVo; import com.air.land.dto.LandListedDto; import com.air.land.dto.LandListedStatisticsDto; import com.air.land.entity.LandListed; +import com.air.land.entity.LandListedLonLat; import com.air.land.mapper.LandListedMapper; +import com.air.land.service.LandListedLonLatService; import com.air.land.service.LandListedService; import com.air.land.vo.LandListedAppletsVo; import com.air.utils.DateUtil; +import com.baomidou.mybatisplus.core.toolkit.Wrappers; import com.baomidou.mybatisplus.extension.plugins.pagination.Page; import com.baomidou.mybatisplus.extension.service.impl.ServiceImpl; import com.cinderella.framework.common.core.exception.BusinessException; @@ -22,7 +25,9 @@ import org.apache.poi.xssf.usermodel.XSSFCell; import org.apache.poi.xssf.usermodel.XSSFRow; import org.apache.poi.xssf.usermodel.XSSFSheet; import org.apache.poi.xssf.usermodel.XSSFWorkbook; +import org.springframework.beans.factory.annotation.Autowired; import org.springframework.stereotype.Service; +import org.springframework.transaction.annotation.Transactional; import org.springframework.web.multipart.MultipartFile; import java.io.IOException; @@ -42,6 +47,9 @@ import java.util.List; @Service public class LandListedServiceImpl extends ServiceImpl implements LandListedService { + @Autowired + private LandListedLonLatService listedLonLatService; + @Override public R> getLandListedByDate(QueryPage page, LandListedAppletsVo appletsVo) { Page page1 = page.toPage(); @@ -104,8 +112,10 @@ public class LandListedServiceImpl extends ServiceImpl> getLandList(List ids) { -// List landListeds = this.list(); List landListeds = this.listByIds(ids); + if (CollectionUtil.isEmpty(landListeds)){ + throw new BusinessException("未查询到已挂牌地块数据!"); + } List> list = new ArrayList<>(); landListeds.forEach(landListed -> { list.add(entityToList(landListed)); @@ -136,6 +146,14 @@ public class LandListedServiceImpl extends ServiceImpl landListedIds){ + this.removeByIds(landListedIds); + listedLonLatService.remove(Wrappers.query().lambda().in(LandListedLonLat::getLandListedId,landListedIds)); + return true; + } + /** * 导入地块数据 * diff --git a/air/src/main/java/com/air/land/service/impl/LandToListServiceImpl.java b/air/src/main/java/com/air/land/service/impl/LandToListServiceImpl.java index dda7ab0..ca5a46e 100644 --- a/air/src/main/java/com/air/land/service/impl/LandToListServiceImpl.java +++ b/air/src/main/java/com/air/land/service/impl/LandToListServiceImpl.java @@ -1,6 +1,7 @@ package com.air.land.service.impl; import cn.hutool.core.bean.BeanUtil; +import cn.hutool.core.collection.CollectionUtil; import cn.hutool.core.util.ObjectUtil; import cn.hutool.core.util.StrUtil; import com.air.applets.dto.LandDto; @@ -9,12 +10,16 @@ import com.air.applets.vo.LandVo; import com.air.common.Constant; import com.air.enums.LandListStatusEnum; import com.air.land.entity.LandListed; +import com.air.land.entity.LandListedLonLat; import com.air.land.entity.LandToList; +import com.air.land.entity.LandToListLonLat; import com.air.land.mapper.LandListedMapper; import com.air.land.mapper.LandToListMapper; +import com.air.land.service.LandToListLonLatService; import com.air.land.service.LandToListService; import com.air.utils.DateUtil; import com.air.utils.ExcelUtil; +import com.baomidou.mybatisplus.core.toolkit.Wrappers; import com.baomidou.mybatisplus.extension.plugins.pagination.Page; import com.baomidou.mybatisplus.extension.service.impl.ServiceImpl; import com.cinderella.framework.common.core.exception.BusinessException; @@ -49,6 +54,8 @@ public class LandToListServiceImpl extends ServiceImpl sendLandList(String proposedseriaId) { @@ -69,6 +76,9 @@ public class LandToListServiceImpl extends ServiceImpl> getLandList(List ids) { List landListeds = this.listByIds(ids); + if (CollectionUtil.isEmpty(landListeds)){ + throw new BusinessException("未查询到拟挂牌地块数据!"); + } List> list = new ArrayList<>(); landListeds.forEach(landListed -> { list.add(entityToList(landListed)); @@ -103,6 +113,14 @@ public class LandToListServiceImpl extends ServiceImpl proposedseriaIds){ + this.removeByIds(proposedseriaIds); + landToListLonLatService.remove(Wrappers.query().lambda().in(LandToListLonLat::getProposedseriaId,proposedseriaIds)); + return true; + } + /** * 导入拟挂牌地块数据 * diff --git a/air/src/main/java/com/air/utils/ExcelUtil.java b/air/src/main/java/com/air/utils/ExcelUtil.java index ff67777..7f83427 100644 --- a/air/src/main/java/com/air/utils/ExcelUtil.java +++ b/air/src/main/java/com/air/utils/ExcelUtil.java @@ -22,25 +22,33 @@ public class ExcelUtil { /** - * 已挂牌地块数据导出 + * 数据导出 * * @param dataList 导出数据 * @param inputStream 模板流 + * @param startRow 开始导出行 * @return * @author peihao * @date 2021/6/17 **/ - public static XSSFWorkbook exportLandListedExcel(List> dataList, InputStream inputStream) throws IOException { + public static XSSFWorkbook exportLandListedExcel(List> dataList, InputStream inputStream,int startRow) throws IOException { // 读取excel模板 XSSFWorkbook wb = new XSSFWorkbook(inputStream); XSSFSheet sheet = wb.getSheetAt(0); - //获取表头 + //填充数据 for (int i = 0; i < dataList.size(); i++) { - XSSFRow sheetRow = sheet.getRow(i + 2); + XSSFRow sheetRow = sheet.getRow(i + startRow); + if (sheetRow == null){ + sheetRow = sheet.createRow(i+startRow); + } List list = dataList.get(i); for (int j = 0; j < list.size(); j++) { String value = list.get(j); - sheetRow.getCell(j).setCellValue(value); + XSSFCell cell = sheetRow.getCell(j); + if (cell == null){ + cell = sheetRow.createCell(j); + } + cell.setCellValue(value); } } return wb; diff --git a/air/src/main/resources/mapper/AuctionRecordMapper.xml b/air/src/main/resources/mapper/AuctionRecordMapper.xml index fc3d7af..11dd97e 100644 --- a/air/src/main/resources/mapper/AuctionRecordMapper.xml +++ b/air/src/main/resources/mapper/AuctionRecordMapper.xml @@ -37,4 +37,19 @@ order by ar.create_date desc + + + diff --git a/air/src/main/resources/templates/excel/auction_record.xlsx b/air/src/main/resources/templates/excel/auction_record.xlsx new file mode 100644 index 0000000000000000000000000000000000000000..2618974578636e8b8b03d83c4d92fb9f230df3fa GIT binary patch literal 9106 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 literal 0 HcmV?d00001