Browse Source

多sheet导出,门店商品销售明细表导出,供应商信息接口修改

master
wangpengfei 2 years ago
parent
commit
5ac4813264
  1. 12
      yxt_supervise/supervise-portal/supervise-portal-api/src/main/java/com/yxt/supervise/portal/api/gdsalesreport/GoodsSalesReportExcelVo.java
  2. 87
      yxt_supervise/supervise-portal/supervise-portal-api/src/main/java/com/yxt/supervise/portal/api/gdsalesreport/MyHandler.java
  3. 9
      yxt_supervise/supervise-portal/supervise-portal-api/src/main/java/com/yxt/supervise/portal/api/gdsalesreport/StoreSalesReportExcelVo.java
  4. 4
      yxt_supervise/supervise-portal/supervise-portal-biz/src/main/java/com/yxt/supervise/portal/biz/gdsalesreport/GdSalesReportMapper.xml
  5. 221
      yxt_supervise/supervise-portal/supervise-portal-biz/src/main/java/com/yxt/supervise/portal/biz/gdsalesreport/GdSalesReportRest.java
  6. 2
      yxt_supervise/supervise-portal/supervise-portal-biz/src/main/java/com/yxt/supervise/portal/biz/supplierbankinfo/SupplierBankInfoService.java

12
yxt_supervise/supervise-portal/supervise-portal-api/src/main/java/com/yxt/supervise/portal/api/gdsalesreport/GoodsSalesReportExcelVo.java

@ -3,11 +3,23 @@ package com.yxt.supervise.portal.api.gdsalesreport;
import com.yxt.common.core.vo.Vo;
import lombok.Data;
import java.math.BigDecimal;
/**
* @author wangpengfei
* @date 2023/4/17 9:07
*/
@Data
public class GoodsSalesReportExcelVo implements Vo {
private String serialNumber;
private String prodName;
private String storeName;
private String saleNum;
private String salePrice;
private BigDecimal total;
private String orderType;
private String orderNo;
private String prodCode;
}

87
yxt_supervise/supervise-portal/supervise-portal-api/src/main/java/com/yxt/supervise/portal/api/gdsalesreport/MyHandler.java

@ -0,0 +1,87 @@
package com.yxt.supervise.portal.api.gdsalesreport;
import com.alibaba.excel.metadata.Head;
import com.alibaba.excel.write.merge.AbstractMergeStrategy;
import org.apache.poi.ss.usermodel.*;
import org.apache.poi.ss.util.CellRangeAddress;
import org.apache.poi.ss.util.RegionUtil;
import java.util.List;
/**
* 合并单元格处理类
*/
public class MyHandler extends AbstractMergeStrategy {
/**
* 合并开始行
*/
private Integer startRow = 0;
/**
* list表格所有的合并列集合
*/
private List<CellRangeAddress> cellRangeAddressList = null;
public MyHandler() {
}
public MyHandler(int startRow, List<CellRangeAddress> cellRangeAddressList) {
this.startRow = startRow;
this.cellRangeAddressList = cellRangeAddressList;
}
@Override
protected void merge(Sheet sheet, Cell cell, Head head, Integer relativeRowIndex) {
// 设置样式
CellStyle cellStyle = cell.getCellStyle();
//水平居中
cellStyle.setAlignment(HorizontalAlignment.CENTER);
//自动换行
cellStyle.setWrapText(true);
//在这里判断从哪一行开始调用合并的方法
if (cell.getRowIndex() > this.startRow) {
if (relativeRowIndex == null || relativeRowIndex == 0) {
return;
}
mergeColumn(sheet, cell, head, relativeRowIndex);
}
}
/**
* 合并单元格
*
* @param sheet
* @param cell
* @param head
* @param relativeRowIndex
*/
protected void mergeColumn(Sheet sheet, Cell cell, Head head, Integer relativeRowIndex) {
int rowIndex = cell.getRowIndex();
int colIndex = cell.getColumnIndex();
sheet = cell.getSheet();
// 获取前一行
Row preRow = sheet.getRow(rowIndex - 1);
//获取前一列
Cell preCell = preRow.getCell(colIndex);
List<CellRangeAddress> list = this.cellRangeAddressList;
for (int i = 0; i < list.size(); i++) {
CellRangeAddress cellRangeAddress = list.get(i);
if (cellRangeAddress.containsColumn(preCell.getColumnIndex())) {
int lastColIndex = cellRangeAddress.getLastColumn();
int firstColIndex = cellRangeAddress.getFirstColumn();
CellRangeAddress cra = new CellRangeAddress(cell.getRowIndex(), cell.getRowIndex(), firstColIndex, lastColIndex);
sheet.addMergedRegion(cra);
// 加边框
RegionUtil.setBorderBottom(BorderStyle.THIN, cra, sheet);
RegionUtil.setBorderLeft(BorderStyle.THIN, cra, sheet);
RegionUtil.setBorderRight(BorderStyle.THIN, cra, sheet);
RegionUtil.setBorderTop(BorderStyle.THIN, cra, sheet);
return;
}
}
}
}

9
yxt_supervise/supervise-portal/supervise-portal-api/src/main/java/com/yxt/supervise/portal/api/gdsalesreport/StoreSalesReportExcelVo.java

@ -5,6 +5,8 @@ import com.yxt.common.core.vo.Vo;
import io.swagger.annotations.ApiModelProperty;
import lombok.Data;
import java.math.BigDecimal;
/**
* @author wangpengfei
* @date 2023/4/17 9:03
@ -12,15 +14,16 @@ import lombok.Data;
@Data
public class StoreSalesReportExcelVo implements Vo {
// private String id;
private String serialNumber;
@ExcelProperty(value = "渠道")
@ApiModelProperty("渠道")
private String storeName;
@ExcelProperty(value = "销售额")
@ApiModelProperty("销售额")
private String salesVolume;
private BigDecimal salesVolume;
//@ApiModelProperty("渠道数量")
//private String storeNum;
//private String sum;
//private String date;
private String sum;
private String date;
}

4
yxt_supervise/supervise-portal/supervise-portal-biz/src/main/java/com/yxt/supervise/portal/biz/gdsalesreport/GdSalesReportMapper.xml

@ -18,7 +18,9 @@
<select id="getAllStoreSalesReport" resultType="com.yxt.supervise.portal.api.gdsalesreport.StoreSalesReportExcelVo">
SELECT
ROUND( SUM( s.saleNum * s.salePrice ), 2 ) AS salesVolume,
i.NAME AS storeName
i.NAME AS storeName,
rank() over(order by s.storeCode) as serialNumber,
s.dataDate as date
FROM
gd_sales_gd s
LEFT JOIN store_info i ON i.`code` = s.storeCode

221
yxt_supervise/supervise-portal/supervise-portal-biz/src/main/java/com/yxt/supervise/portal/biz/gdsalesreport/GdSalesReportRest.java

@ -3,9 +3,14 @@ package com.yxt.supervise.portal.biz.gdsalesreport;
import cn.hutool.core.io.resource.ClassPathResource;
import com.alibaba.excel.EasyExcel;
import com.alibaba.excel.ExcelWriter;
import com.alibaba.excel.converters.Converter;
import com.alibaba.excel.util.ListUtils;
import com.alibaba.excel.util.MapUtils;
import com.alibaba.excel.write.builder.ExcelWriterBuilder;
import com.alibaba.excel.write.builder.ExcelWriterSheetBuilder;
import com.alibaba.excel.write.metadata.WriteSheet;
import com.alibaba.excel.write.metadata.fill.FillConfig;
import com.alibaba.excel.write.metadata.fill.FillWrapper;
import com.sun.deploy.net.URLEncoder;
import com.yxt.common.core.query.PagerQuery;
import com.yxt.common.core.result.ResultBean;
@ -13,6 +18,7 @@ import com.yxt.supervise.portal.api.gdsalesreport.*;
import io.swagger.annotations.ApiOperation;
import org.apache.catalina.connector.Response;
import org.apache.commons.compress.utils.IOUtils;
import org.apache.poi.ss.util.CellRangeAddress;
import org.junit.Test;
import org.springframework.beans.factory.annotation.Autowired;
import org.springframework.web.bind.annotation.PostMapping;
@ -24,9 +30,10 @@ import javax.servlet.ServletOutputStream;
import javax.servlet.http.HttpServletResponse;
import java.io.IOException;
import java.io.InputStream;
import java.util.ArrayList;
import java.util.List;
import java.util.Map;
import java.math.BigDecimal;
import java.text.SimpleDateFormat;
import java.util.*;
import java.util.stream.Collectors;
import static io.netty.handler.codec.smtp.SmtpRequests.data;
@ -37,7 +44,8 @@ import static io.netty.handler.codec.smtp.SmtpRequests.data;
@RestController
@RequestMapping("/report")
public class GdSalesReportRest {
private static final String EXCEL_FILE_NAME="门店销售明细报表"+ System.currentTimeMillis() +".xlsx";
private static final String TEMPLATE_FILE_NAME="C:\\Users\\www19\\Desktop\\1.xlsx";
@Autowired
GdSalesReportService gdSalesReportService;
@ -50,138 +58,95 @@ public class GdSalesReportRest {
@PostMapping("/exportStoreSalesReport")
@ApiOperation(value = "门店销售明细报表")
public void exportStoreSalesReport(@RequestBody PagerQuery<GdSalesReportQuery> pq, HttpServletResponse response) throws IOException {
String excelFileName = "门店销售明细报表" + System.currentTimeMillis() + ".xlsx";
String templateFileName = "C:\\Users\\www19\\Desktop\\1.xlsx";
List<StoreSalesReportExcelVo> excelVos =gdSalesReportService.getAllStoreSalesReport(pq);
//获取模板(模板你可以放在任何位置,前提是你能获取到。这里放在resource下)
response.setContentType( "application/vnd.ms-excel");
response.setCharacterEncoding("utf8");
response.setHeader("Content-disposition","attachment;filename="+ excelFileName);
response.setHeader("Content-disposition","attachment;filename="+ EXCEL_FILE_NAME );
ServletOutputStream outputStream = response.getOutputStream();
try (ExcelWriter excelWriter = EasyExcel.write(excelFileName).withTemplate(templateFileName).build()) {
WriteSheet writeSheet = EasyExcel.writerSheet().build();
//writeSheet.setSheetName("门店销售明细报表");
// 这里注意 入参用了forceNewRow 代表在写入list的时候不管list下面有没有空行 都会创建一行,然后下面的数据往后移动。默认 是false,会直接使用下一行,如果没有则创建。
// forceNewRow 如果设置了true,有个缺点 就是他会把所有的数据都放到内存了,所以慎用
// 简单的说 如果你的模板有list,且list不是最后一行,下面还有数据需要填充 就必须设置 forceNewRow=true 但是这个就会把所有数据放到内存 会很耗内存
// 如果数据量大 list不是最后一行 参照下一个
FillConfig fillConfig = FillConfig.builder().forceNewRow(Boolean.TRUE).build();
List<StoreSalesReportExcelVo> excelVos = gdSalesReportService.getAllStoreSalesReport(pq);
excelWriter.fill(excelVos, writeSheet);
TotalSales totalSales=new TotalSales();
totalSales.setDate("2023-04-17");
totalSales.setSum("3");
totalSales.setStoreNum("100");
excelWriter.fill(totalSales,writeSheet);
excelWriter.finish();
}
List<CellRangeAddress> list = new ArrayList<>();
//new CellRangeAddress(开始行,结束行,开始列,结束列)
list.add(new CellRangeAddress(3, excelVos.size(), 1, 3));
// 创建ExcelWriterBuilder
ExcelWriterBuilder excelWriterBuilder = EasyExcel.write(outputStream).withTemplate(TEMPLATE_FILE_NAME);
ExcelWriter excelWriter = excelWriterBuilder.build();
// 创建writeSheet,并注册合并单元格handler
WriteSheet writeSheet = EasyExcel.writerSheet(0).registerWriteHandler(new MyHandler(0,list)).build();
// 填写配置,forceNewRow true表示自动创建一行,后面的数据后移
FillConfig fillConfig = FillConfig.builder().forceNewRow(Boolean.TRUE).build();
//填写数据
excelWriter.fill(excelVos, fillConfig, writeSheet);
// 写入list之前的数据
Map<String, Object> map = new HashMap<String, Object>();
Date date = new Date();
SimpleDateFormat dateFormat= new SimpleDateFormat("yyyy-MM-dd");
map.put("date",excelVos.get(1).getDate());
map.put("storeNum",excelVos.size());
map.put("number","mdxsmxb"+dateFormat.format(date));
excelWriter.fill(map, writeSheet);
// list 后面还有个统计 想办法手动写入
// 这里偷懒直接用list 也可以用对象
List<List<String>> totalListList = ListUtils.newArrayList();
List<String> totalList = ListUtils.newArrayList();
totalListList.add(totalList);
BigDecimal total=new BigDecimal("0");
for(StoreSalesReportExcelVo i:excelVos){
total=total.add(i.getSalesVolume());
}
totalList.add("");
totalList.add("");
totalList.add("");
totalList.add("统计:");
totalList.add(String.valueOf(total));
// 这里是write 别和fill 搞错了
List<CellRangeAddress> list1 = new ArrayList<>();
//new CellRangeAddress(开始行,结束行,开始列,结束列)
list1.add(new CellRangeAddress(excelVos.size()+1, excelVos.size()+2, 0, 4));
WriteSheet writeSheet1 = EasyExcel.writerSheet(0).registerWriteHandler(new MyHandler(0,list1)).build();
excelWriter.write(totalListList,writeSheet1);
//2
List<GoodsSalesReportExcelVo>goodsSalesReportExcelVos= gdSalesReportService.getAllGoodsSalesReport(pq);
List<CellRangeAddress> Goodlist = new ArrayList<>();
WriteSheet writeSheetGood = EasyExcel.writerSheet(1).build();
// 填写配置,forceNewRow true表示自动创建一行,后面的数据后移
//FillConfig fillConfig = FillConfig.builder().forceNewRow(Boolean.TRUE).build();
//填写数据
excelWriter.fill(goodsSalesReportExcelVos, fillConfig, writeSheetGood);
// 写入list之前的数据
map.put("storeNum",goodsSalesReportExcelVos.size());
excelWriter.fill(map, writeSheet);
// list 后面还有个统计 想办法手动写入
// 这里偷懒直接用list 也可以用对象
List<List<String>> totalListList1 = ListUtils.newArrayList();
List<String> totalList1 = ListUtils.newArrayList();
totalListList1.add(totalList1);
for(GoodsSalesReportExcelVo i:goodsSalesReportExcelVos){
total=total.add(i.getTotal());
}
totalList1.add("");
totalList1.add("");
totalList1.add("");
totalList1.add("");
totalList1.add("");
totalList1.add("");
totalList1.add("统计:");
totalList1.add(String.valueOf(total));
// 这里是write 别和fill 搞错了
List<CellRangeAddress> list7 = new ArrayList<>();
//new CellRangeAddress(开始行,结束行,开始列,结束列)
list7.add(new CellRangeAddress(excelVos.size()+1, excelVos.size()+2, 0, 4));
WriteSheet writeSheet7 = EasyExcel.writerSheet(1).registerWriteHandler(new MyHandler(0,list7)).build();
excelWriter.write(totalListList1,writeSheet7);
//excelWriter.fill(totalList,writeSheet1);
excelWriter.finish();
outputStream.flush();
outputStream.close();
}
@Test
public void edd(){
String excelFileName = "门店销售明细报表" + System.currentTimeMillis() + ".xlsx";
String templateFileName = "C:\\Users\\www19\\Desktop\\1.xlsx";
//获取模板(模板你可以放在任何位置,前提是你能获取到。这里放在resource下)
// response.setContentType( "application/vnd.ms-excel");
// response.setCharacterEncoding("utf8");
// response.setHeader("Content-disposition","attachment;filename="+ excelFileName);
// ServletOutputStream outputStream = response.getOutputStream();
// try (ExcelWriter excelWriter = EasyExcel.write(excelFileName).withTemplate(templateFileName).build()) {
// WriteSheet writeSheet = EasyExcel.writerSheet("门店销售明细报表").build();
// // 这里注意 入参用了forceNewRow 代表在写入list的时候不管list下面有没有空行 都会创建一行,然后下面的数据往后移动。默认 是false,会直接使用下一行,如果没有则创建。
// // forceNewRow 如果设置了true,有个缺点 就是他会把所有的数据都放到内存了,所以慎用
// // 简单的说 如果你的模板有list,且list不是最后一行,下面还有数据需要填充 就必须设置 forceNewRow=true 但是这个就会把所有数据放到内存 会很耗内存
// // 如果数据量大 list不是最后一行 参照下一个
// FillConfig fillConfig = FillConfig.builder().forceNewRow(Boolean.TRUE).build();
// List<StoreSalesReportExcelVo> excelVos =new ArrayList<>();
// StoreSalesReportExcelVo storeSalesReportExcelVo=new StoreSalesReportExcelVo();
// storeSalesReportExcelVo.setStoreName("1231313");
// storeSalesReportExcelVo.setSalesVolume("1313");
// storeSalesReportExcelVo.setStoreNum("123132");
// storeSalesReportExcelVo.setDate("12313");
// excelVos.add(storeSalesReportExcelVo);
// excelWriter.fill(excelVos, writeSheet);
// //excelWriter.finish();
// }
// try (ExcelWriter excelWriter = EasyExcel.write(excelFileName).withTemplate(templateFileName).build()) {
// WriteSheet writeSheet = EasyExcel.writerSheet().build();
// WriteSheet writeSheet = EasyExcel.writerSheet("目录").registerWriteHandler(new LinkStyleHandler(linkMap)).build();
// // 这里注意 入参用了forceNewRow 代表在写入list的时候不管list下面有没有空行 都会创建一行,然后下面的数据往后移动。默认 是false,会直接使用下一行,如果没有则创建。
// // forceNewRow 如果设置了true,有个缺点 就是他会把所有的数据都放到内存了,所以慎用
// // 简单的说 如果你的模板有list,且list不是最后一行,下面还有数据需要填充 就必须设置 forceNewRow=true 但是这个就会把所有数据放到内存 会很耗内存
// // 如果数据量大 list不是最后一行 参照下一个
// FillConfig fillConfig = FillConfig.builder().forceNewRow(Boolean.TRUE).build();
// excelWriter.fill(data(), fillConfig, writeSheet);
// excelWriter.fill(data(), fillConfig, writeSheet);
// Map<String, Object> map = MapUtils.newHashMap();
// List<StoreSalesReportExcelVo> excelVos =new ArrayList<>();
// StoreSalesReportExcelVo storeSalesReportExcelVo=new StoreSalesReportExcelVo();
// storeSalesReportExcelVo.setStoreName("1231313");
// storeSalesReportExcelVo.setSalesVolume("1313");
// storeSalesReportExcelVo.setStoreNum("123132");
// storeSalesReportExcelVo.setDate("12313");
// excelVos.add(storeSalesReportExcelVo);
// writeSheet = EasyExcel.writerSheet("门店销售明细报表").build();
// excelWriter.fill(map, writeSheet);
// }
//response.setContentType("application/vnd.ms-excel");
//setCharacterEncoding("utf-8");
//response.setHeader("Access-Control-Expose-Headers", "Content-Disposition");
// attachment这个代表要下载的,如果去掉就直接打开了(attachment-作为附件下载,inline-在线打开)
// excelFileName是文件名,另存为或者下载时,为默认的文件名
//response.setHeader("Content-disposition","attachment;filename=" + excelFileName + ".xlsx");
//response.setHeader("Content-Type","application/octet-stream;charset=utf-8");
InputStream templateInputStream = null;
ExcelWriter excelWriter = null;
WriteSheet userSheet = null;
WriteSheet branchSheet = null;
ServletOutputStream outputStream = null;
// try {
// outputStream = response.getOutputStream();
// templateInputStream = couponOrderTemplateResource.getInputStream();
// } catch (IOException e) {
// log.error("获取模板失败");
// }
// 这里注意 入参用了forceNewRow 代表在写入list的时候不管list下面有没有空行 都会创建一行,然后下面的数据往后移动。默认 是false,会直接使用下一行,如果没有则创建。
// forceNewRow 如果设置了true,有个缺点 就是他会把所有的数据都放到内存了,所以慎用
// 简单的说 如果你的模板有list,且list不是最后一行,下面还有数据需要填充 就必须设置 forceNewRow=true 但是这个就会把所有数据放到内存 会很耗内存
// 如果数据量大 list不是最后一行 参照下一个
FillConfig fillConfig = FillConfig.builder().forceNewRow(Boolean.TRUE).build();
List<StoreSalesReportExcelVo> excelVos =new ArrayList<>();
StoreSalesReportExcelVo storeSalesReportExcelVo=new StoreSalesReportExcelVo();
storeSalesReportExcelVo.setStoreName("1231313");
storeSalesReportExcelVo.setSalesVolume("1313");
//storeSalesReportExcelVo.setStoreNum("123132");
//storeSalesReportExcelVo.setDate("12313");
excelVos.add(storeSalesReportExcelVo);
EasyExcel.write(excelFileName).withTemplate(templateFileName).sheet(1).doWrite(excelVos);
//创建第一个sheet
userSheet = EasyExcel.writerSheet().build();
//填充
//excelWriter.fill(excelVos,fillConfig,userSheet);//员工基础信息
//excelWriter.fill(gradeAvgDTO,userSheet);//员工平均成绩
// //创建第二个sheet
// branchSheet = EasyExcel.writerSheet("部门信息").build();
// //填充
// excelWriter.fill(ftBranchDTOS,fillConfig,branchSheet);//部门基础信息
// excelWriter.fill(peopleSumDTO,branchSheet);//总人数
//关闭
//excelWriter.finish();
IOUtils.closeQuietly(templateInputStream);
IOUtils.closeQuietly(outputStream);
IOUtils.closeQuietly(excelWriter);
public void publicExport(){
}
@PostMapping("/getGoodsSalesReport")

2
yxt_supervise/supervise-portal/supervise-portal-biz/src/main/java/com/yxt/supervise/portal/biz/supplierbankinfo/SupplierBankInfoService.java

@ -113,7 +113,7 @@ public class SupplierBankInfoService extends MybatisBaseService<SupplierBankInfo
SupplierBankInfo entity = new SupplierBankInfo();
BeanUtil.copyProperties(dto, entity, "id", "sid");
baseMapper.insert(entity);
baseMapper.insertSUpplierIndex(entity.getName(),entity.getCodeUnified(),entity.getSid());
baseMapper.insertSUpplierIndex(entity.getCodeUnified(),entity.getName(),entity.getSid());
baseMapper.deleteSupplierFiles(entity.getSid(),"1");
String[] businessLicenseFiles = dto.getBusinessLicenseFiles();
if(businessLicenseFiles!=null){

Loading…
Cancel
Save