导出excel
parent
5653ecac41
commit
7d6341a9c2
@ -0,0 +1,100 @@
|
||||
package com.glxp.api.controller.inv;
|
||||
|
||||
import com.glxp.api.common.res.BaseResponse;
|
||||
import com.glxp.api.entity.inout.IoStatDayEntity;
|
||||
import com.glxp.api.req.inout.FilterStatDataDetailRequest;
|
||||
import com.glxp.api.service.inout.ExcelService;
|
||||
import io.swagger.annotations.Api;
|
||||
import io.swagger.annotations.ApiOperation;
|
||||
import org.springframework.web.bind.annotation.*;
|
||||
import org.springframework.web.multipart.MultipartFile;
|
||||
|
||||
import javax.annotation.Resource;
|
||||
import javax.servlet.http.HttpServletResponse;
|
||||
import java.util.List;
|
||||
|
||||
/**
|
||||
* @author : zhangsan
|
||||
* @date : 2023/4/17 11:14
|
||||
* @modyified By :
|
||||
*/
|
||||
|
||||
@RestController
|
||||
@Api(tags = "文件接口")
|
||||
public class ApiExcelController {
|
||||
|
||||
@Resource
|
||||
private ExcelService excelService;
|
||||
|
||||
/**
|
||||
* excel导入-单个sheet
|
||||
*
|
||||
* @param multipartFile 文件流
|
||||
* @return
|
||||
* @throws Exception
|
||||
*/
|
||||
@PostMapping("/excelImport")
|
||||
@ApiOperation(value = "excel导入")
|
||||
public BaseResponse<Object> excelImport(@RequestParam("file") MultipartFile multipartFile){
|
||||
excelService.excelImport(multipartFile);
|
||||
return new BaseResponse<>();
|
||||
}
|
||||
|
||||
/**
|
||||
* excel导出-单个sheet
|
||||
*
|
||||
* @param response 响应流
|
||||
*/
|
||||
@GetMapping("/udiwms/inv/excelExportOut")
|
||||
public void export(HttpServletResponse response,String billNo) {
|
||||
excelService.excelExport(response,billNo);
|
||||
}
|
||||
|
||||
/**
|
||||
* excel导入-多个sheet
|
||||
*
|
||||
* @param multipartFile 文件流
|
||||
* @return 响应体
|
||||
*/
|
||||
@PostMapping("/excelSheetImport")
|
||||
@ApiOperation(value = "excel导入-多个sheet")
|
||||
public BaseResponse<Object> excelSheetImport(@RequestParam("file") MultipartFile multipartFile){
|
||||
excelService.excelSheetImport(multipartFile);
|
||||
return new BaseResponse<>();
|
||||
}
|
||||
|
||||
/**
|
||||
* excel导出-多个sheet
|
||||
*
|
||||
* @param response 响应流
|
||||
*/
|
||||
@ApiOperation(value = "excel导出-多个sheet", httpMethod = "GET")
|
||||
@GetMapping("/excelSheetExport")
|
||||
public void excelSheetExport(HttpServletResponse response) {
|
||||
excelService.excelSheetExport(response);
|
||||
}
|
||||
|
||||
/**
|
||||
* excel模板导出-单个sheet
|
||||
*
|
||||
* @param response 响应流
|
||||
*/
|
||||
@ApiOperation(value = "excel模板导出", httpMethod = "GET")
|
||||
@GetMapping("/excelTemplate")
|
||||
public void excelTemplate(HttpServletResponse response) {
|
||||
|
||||
excelService.excelTemplate(response);
|
||||
}
|
||||
|
||||
/**
|
||||
* excel模板导出-多个sheet
|
||||
*
|
||||
* @param response 响应流
|
||||
*/
|
||||
@ApiOperation(value = "excel模板导出-多个sheet", httpMethod = "GET")
|
||||
@GetMapping("/excelSheetTemplate")
|
||||
public void excelSheetTemplate(HttpServletResponse response) throws Exception {
|
||||
excelService.excelSheetTemplate(response);
|
||||
}
|
||||
|
||||
}
|
@ -0,0 +1,104 @@
|
||||
package com.glxp.api.entity.inout;
|
||||
|
||||
import com.alibaba.excel.annotation.ExcelProperty;
|
||||
import com.alibaba.excel.annotation.write.style.ColumnWidth;
|
||||
import io.swagger.annotations.ApiModel;
|
||||
import io.swagger.annotations.ApiModelProperty;
|
||||
import lombok.Data;
|
||||
|
||||
import java.math.BigDecimal;
|
||||
|
||||
/**
|
||||
* @author : zhangsan
|
||||
* @date : 2023/4/17 11:11
|
||||
* @modyified By :
|
||||
*/
|
||||
|
||||
@Data
|
||||
@ApiModel(value = "导出实体")
|
||||
public class ExcelVO {
|
||||
|
||||
@ColumnWidth(80)
|
||||
@ExcelProperty("序号")
|
||||
@ApiModelProperty(value = "序号")
|
||||
private Integer id;
|
||||
|
||||
@ColumnWidth(80)
|
||||
@ExcelProperty("产品通用名")
|
||||
@ApiModelProperty(value = "产品通用名")
|
||||
private String productName;
|
||||
|
||||
@ColumnWidth(80)
|
||||
@ExcelProperty("规格型号")
|
||||
@ApiModelProperty(value = "规格型号")
|
||||
private String ggxh;
|
||||
|
||||
@ColumnWidth(80)
|
||||
@ExcelProperty("批次号")
|
||||
@ApiModelProperty(value = "批次号")
|
||||
private String batchNo;
|
||||
|
||||
@ColumnWidth(80)
|
||||
@ExcelProperty("数量")
|
||||
@ApiModelProperty(value = "数量")
|
||||
private Integer beginCount;
|
||||
|
||||
@ColumnWidth(80)
|
||||
@ExcelProperty("价格")
|
||||
@ApiModelProperty(value = "价格")
|
||||
private BigDecimal beginPrice;
|
||||
|
||||
@ColumnWidth(80)
|
||||
@ExcelProperty("金额")
|
||||
@ApiModelProperty(value = "金额")
|
||||
private BigDecimal beginAmount;
|
||||
|
||||
@ColumnWidth(80)
|
||||
@ExcelProperty("数量")
|
||||
@ApiModelProperty(value = "数量")
|
||||
private Integer inCount;
|
||||
|
||||
@ColumnWidth(80)
|
||||
@ExcelProperty("价格")
|
||||
@ApiModelProperty(value = "价格")
|
||||
private BigDecimal inPrice;
|
||||
|
||||
@ColumnWidth(80)
|
||||
@ExcelProperty("金额")
|
||||
@ApiModelProperty(value = "金额")
|
||||
private BigDecimal inAmount;
|
||||
|
||||
@ColumnWidth(80)
|
||||
@ExcelProperty("数量")
|
||||
@ApiModelProperty(value = "数量")
|
||||
private Integer outCount;
|
||||
|
||||
@ColumnWidth(80)
|
||||
@ExcelProperty("价格")
|
||||
@ApiModelProperty(value = "价格")
|
||||
private BigDecimal outPrice;
|
||||
|
||||
@ColumnWidth(80)
|
||||
@ExcelProperty("金额")
|
||||
@ApiModelProperty(value = "金额")
|
||||
private BigDecimal outAmount;
|
||||
|
||||
@ColumnWidth(80)
|
||||
@ExcelProperty("数量")
|
||||
@ApiModelProperty(value = "数量")
|
||||
private Integer balanceCount;
|
||||
|
||||
@ColumnWidth(80)
|
||||
@ExcelProperty("价格")
|
||||
@ApiModelProperty(value = "价格")
|
||||
private BigDecimal balancePrice;
|
||||
|
||||
@ColumnWidth(80)
|
||||
@ExcelProperty("金额")
|
||||
@ApiModelProperty(value = "金额")
|
||||
private BigDecimal balanceAmount;
|
||||
|
||||
//无需导出字段使用此注解
|
||||
//@JsonSerialize(using = ToStringSerializer.class)
|
||||
|
||||
}
|
@ -0,0 +1,14 @@
|
||||
package com.glxp.api.req.inout;
|
||||
|
||||
import lombok.Data;
|
||||
|
||||
/**
|
||||
* @author : zhangsan
|
||||
* @date : 2023/4/17 13:52
|
||||
* @modyified By :
|
||||
*/
|
||||
|
||||
@Data
|
||||
public class ExcelRequest {
|
||||
|
||||
}
|
@ -0,0 +1,63 @@
|
||||
package com.glxp.api.service.inout;
|
||||
|
||||
/**
|
||||
* @author : zhangsan
|
||||
* @date : 2023/4/17 11:12
|
||||
* @modyified By :
|
||||
*/
|
||||
|
||||
import com.glxp.api.entity.inout.IoStatDayEntity;
|
||||
import com.glxp.api.req.inout.FilterStatDataDetailRequest;
|
||||
import org.springframework.web.multipart.MultipartFile;
|
||||
|
||||
import javax.servlet.http.HttpServletResponse;
|
||||
import java.util.List;
|
||||
|
||||
/**
|
||||
* 导出业务接口
|
||||
*/
|
||||
public interface ExcelService {
|
||||
|
||||
/**
|
||||
* excel导入-单个sheet
|
||||
*
|
||||
* @param multipartFile 文件流
|
||||
*/
|
||||
void excelImport(MultipartFile multipartFile);
|
||||
|
||||
/**
|
||||
* excel导出-单个sheet
|
||||
*
|
||||
* @param response 响应体
|
||||
*/
|
||||
void excelExport(HttpServletResponse response,String billNo);
|
||||
|
||||
/**
|
||||
* excel多入-多个sheet
|
||||
*
|
||||
* @param multipartFile 文件流
|
||||
*/
|
||||
void excelSheetImport(MultipartFile multipartFile);
|
||||
|
||||
/**
|
||||
* excel导出-多个sheet
|
||||
*
|
||||
* @param response 响应体
|
||||
*/
|
||||
void excelSheetExport(HttpServletResponse response);
|
||||
|
||||
/**
|
||||
* excel模板导出-单个sheet
|
||||
*
|
||||
* @param response 响应流
|
||||
*/
|
||||
void excelTemplate(HttpServletResponse response);
|
||||
|
||||
/**
|
||||
* excel模板导出-多个sheet
|
||||
*
|
||||
* @param response 响应流
|
||||
*/
|
||||
void excelSheetTemplate(HttpServletResponse response) throws Exception;
|
||||
}
|
||||
|
@ -0,0 +1,223 @@
|
||||
package com.glxp.api.service.inout.impl;
|
||||
|
||||
/**
|
||||
* @author : zhangsan
|
||||
* @date : 2023/4/17 11:13
|
||||
* @modyified By :
|
||||
*/
|
||||
|
||||
import com.alibaba.fastjson.JSON;
|
||||
import com.alibaba.fastjson.JSONObject;
|
||||
import com.baomidou.mybatisplus.core.toolkit.CollectionUtils;
|
||||
import com.glxp.api.entity.inout.ExcelVO;
|
||||
import com.glxp.api.entity.inout.IoStatDayEntity;
|
||||
import com.glxp.api.req.inout.FilterStatDataDetailRequest;
|
||||
import com.glxp.api.service.inout.ExcelService;
|
||||
import com.glxp.api.service.inout.IoStatDayService;
|
||||
import com.glxp.api.util.Excel.ExcelHandler;
|
||||
import com.glxp.api.util.Excel.ExcelTemplateEnum;
|
||||
import com.glxp.api.util.Excel.Exception.RenException;
|
||||
import lombok.extern.slf4j.Slf4j;
|
||||
import org.springframework.stereotype.Service;
|
||||
import org.springframework.web.multipart.MultipartFile;
|
||||
|
||||
import javax.annotation.Resource;
|
||||
import javax.servlet.http.HttpServletResponse;
|
||||
import java.util.*;
|
||||
|
||||
/**
|
||||
* 导出业务实现
|
||||
*/
|
||||
@Slf4j
|
||||
@Service
|
||||
public class ExcelServiceImpl implements ExcelService {
|
||||
|
||||
@Resource
|
||||
ExcelHandler excelHandler;
|
||||
|
||||
@Resource
|
||||
private IoStatDayService statDayService;
|
||||
|
||||
/**
|
||||
* excel导入-单个sheet
|
||||
*
|
||||
* @param multipartFile 文件流
|
||||
*/
|
||||
@Override
|
||||
public void excelImport(MultipartFile multipartFile) {
|
||||
try {
|
||||
List<ExcelVO> voList = excelHandler.importExcel(multipartFile, ExcelVO.class, null);
|
||||
if (CollectionUtils.isNotEmpty(voList)) {
|
||||
System.out.println("本次成功导出:" + voList.size() + "条,数据如下---------------");
|
||||
voList.forEach(vo -> {
|
||||
System.out.println("vo=" + vo.toString());
|
||||
});
|
||||
|
||||
}
|
||||
} catch (Exception e) {
|
||||
throw new RenException("导入失败");
|
||||
}
|
||||
}
|
||||
|
||||
/**
|
||||
* excel导出-单个sheet
|
||||
*
|
||||
* @param response 响应体
|
||||
*/
|
||||
@Override
|
||||
public void excelExport(HttpServletResponse response, String billNo) {
|
||||
try {
|
||||
List<ExcelVO> excelVOS = structureDate(billNo);
|
||||
excelHandler.exportExcel(response, excelVOS, ExcelVO.class, "excel导出-单et", "excel导出heet");
|
||||
} catch (Exception e) {
|
||||
throw new RenException("导出失败");
|
||||
}
|
||||
}
|
||||
|
||||
/**
|
||||
* excel导入-多个sheet
|
||||
*
|
||||
* @param multipartFile 文件流
|
||||
*/
|
||||
@Override
|
||||
public void excelSheetImport(MultipartFile multipartFile) {
|
||||
try {
|
||||
List<Integer> indexList = new ArrayList<>();
|
||||
indexList.add(0);
|
||||
indexList.add(1);
|
||||
indexList.add(2);
|
||||
indexList.add(3);
|
||||
indexList.add(4);
|
||||
indexList.add(5);
|
||||
List<Object> objList = new ArrayList<>();
|
||||
objList.add(new ExcelVO());
|
||||
objList.add(new ExcelVO());
|
||||
objList.add(new ExcelVO());
|
||||
objList.add(new ExcelVO());
|
||||
objList.add(new ExcelVO());
|
||||
objList.add(new ExcelVO());
|
||||
List<List<Object>> resultList = excelHandler.importExcelsByIndex(multipartFile, objList, 6, indexList);
|
||||
System.out.println("resultList="+resultList.size());
|
||||
resultList.forEach(vo->{
|
||||
List<ExcelVO> voList = JSON.parseArray(JSON.toJSONString(vo), ExcelVO.class);
|
||||
System.out.println("voList="+voList.size()+"条数据");
|
||||
});
|
||||
} catch (Exception e) {
|
||||
throw new RenException("导入失败");
|
||||
}
|
||||
}
|
||||
|
||||
/**
|
||||
* excel导出-多个sheet
|
||||
*
|
||||
* @param response 响应体
|
||||
*/
|
||||
@Override
|
||||
public void excelSheetExport(HttpServletResponse response) {
|
||||
// try {
|
||||
// //构建多集合集合
|
||||
// List<List<?>> lists = new ArrayList<>();
|
||||
// lists.add(structureDate(10));
|
||||
// lists.add(structureDate(20));
|
||||
// lists.add(structureDate(30));
|
||||
// lists.add(structureDate(40));
|
||||
// lists.add(structureDate(50));
|
||||
// lists.add(structureDate(60));
|
||||
// //Sheet页初始化
|
||||
// Map<Integer, String> clazzMap = new HashMap<>();
|
||||
// clazzMap.put(0, "一年级成绩表");
|
||||
// clazzMap.put(1, "二年级成绩表");
|
||||
// clazzMap.put(2, "三年级成绩表");
|
||||
// clazzMap.put(3, "四年级成绩表");
|
||||
// clazzMap.put(4, "五年级成绩表");
|
||||
// clazzMap.put(5, "六年级成绩表");
|
||||
// excelHandler.exportExcels(response, Collections.singletonList(lists), clazzMap, "excel导出-单sheet");
|
||||
// } catch (Exception e) {
|
||||
// throw new RenException("导出失败");
|
||||
// }
|
||||
}
|
||||
|
||||
/**
|
||||
* excel模板导出-单个sheet
|
||||
*
|
||||
* @param response 响应流
|
||||
*/
|
||||
@Override
|
||||
public void excelTemplate(HttpServletResponse response) {
|
||||
// try {
|
||||
// //准备数据
|
||||
// JSONObject obj = new JSONObject();
|
||||
// obj.put("date","2022年");
|
||||
// obj.put("season","秋季");
|
||||
// obj.put("user","王远");
|
||||
// obj.put("userDate",new Date());
|
||||
// List<ExcelVO> list = structureDate(20);
|
||||
// excelHandler.exportTemplateExcels(response,list,obj, ExcelTemplateEnum.TEMPLATE_1.getDesc(),ExcelTemplateEnum.TEMPLATE_1.getDesc());
|
||||
// }catch (Exception e){
|
||||
// log.error("导出错误:{}", e.getMessage());
|
||||
// throw new RenException("导出错误");
|
||||
// }
|
||||
}
|
||||
|
||||
/**
|
||||
* excel模板导出-多个sheet
|
||||
*
|
||||
* @param response 响应流
|
||||
*/
|
||||
@Override
|
||||
public void excelSheetTemplate(HttpServletResponse response) throws Exception {
|
||||
// 准备数据
|
||||
// JSONObject obj = new JSONObject();
|
||||
// obj.put("date","2022年");
|
||||
// obj.put("season","秋季");
|
||||
// obj.put("user","王远");
|
||||
// obj.put("userDate",new Date());
|
||||
// List<ExcelVO> list = structureDate(20);
|
||||
// excelHandler.exportSheetTemplateExcels(response,list,list,obj,obj, ExcelTemplateEnum.TEMPLATE_1.getDesc(),ExcelTemplateEnum.TEMPLATE_1.getDesc());
|
||||
}
|
||||
|
||||
/**
|
||||
* 构造数据
|
||||
*
|
||||
* @return 数据集合
|
||||
*/
|
||||
private List<ExcelVO> structureDate(String billNo) {
|
||||
List<ExcelVO> list = new ArrayList<>();
|
||||
|
||||
List<IoStatDayEntity> ioStatDayEntities = statDayService.filterListByRecordKey(billNo);
|
||||
ExcelVO vo = new ExcelVO();
|
||||
for (int i=0; i < ioStatDayEntities.size(); i++) {
|
||||
vo.setId(i+1);
|
||||
vo.setProductName(ioStatDayEntities.get(i).getProductName());
|
||||
vo.setGgxh(ioStatDayEntities.get(i).getGgxh());
|
||||
vo.setBatchNo(ioStatDayEntities.get(i).getBatchNo());
|
||||
vo.setBeginCount(ioStatDayEntities.get(i).getBeginCount());
|
||||
vo.setBeginPrice(ioStatDayEntities.get(i).getBeginPrice());
|
||||
vo.setBeginAmount(ioStatDayEntities.get(i).getBeginAmount());
|
||||
vo.setInCount(ioStatDayEntities.get(i).getInCount());
|
||||
vo.setInPrice(ioStatDayEntities.get(i).getInPrice());
|
||||
vo.setInAmount(ioStatDayEntities.get(i).getInAmount());
|
||||
vo.setOutCount(ioStatDayEntities.get(i).getOutCount());
|
||||
|
||||
vo.setOutPrice(ioStatDayEntities.get(i).getOutPrice());
|
||||
vo.setOutAmount(ioStatDayEntities.get(i).getOutAmount());
|
||||
vo.setBalanceCount(ioStatDayEntities.get(i).getBalanceCount());
|
||||
vo.setBalancePrice(ioStatDayEntities.get(i).getBalancePrice());
|
||||
vo.setBalanceAmount(ioStatDayEntities.get(i).getBalanceAmount());
|
||||
list.add(vo);
|
||||
}
|
||||
|
||||
|
||||
// for (int i = 0; i < size; i++) {
|
||||
// ExcelVO vo = new ExcelVO();
|
||||
// vo.setId(i);
|
||||
//// vo.setAge(i);
|
||||
//// vo.setName("张三" + i);
|
||||
//// vo.setWen(new Random().nextInt(99));
|
||||
//// vo.setRichard(new Random().nextInt(99));
|
||||
//// vo.setSum(vo.getWen() + vo.getRichard());
|
||||
// list.add(vo);
|
||||
// }
|
||||
return list;
|
||||
}
|
||||
}
|
@ -0,0 +1,66 @@
|
||||
package com.glxp.api.util.Excel;
|
||||
|
||||
import lombok.Getter;
|
||||
|
||||
/**
|
||||
* @author : zhangsan
|
||||
* @date : 2023/4/17 11:09
|
||||
* @modyified By :
|
||||
*/
|
||||
|
||||
@Getter
|
||||
public enum ExcelTemplateEnum {
|
||||
/**单sheet导出*/
|
||||
TEMPLATE_1("1","complex"),
|
||||
|
||||
/**模板格式*/
|
||||
TEMPLATE_SUFFIX("xlsx",".xlsx"),
|
||||
TEMPLATE_SUFFIX_XLS("xls",".xls"),
|
||||
TEMPLATE_SUFFIX_DOCX("docx",".docx"),
|
||||
/**模板路径*/
|
||||
TEMPLATE_PATH("path","excel"),
|
||||
;
|
||||
|
||||
private final String code;
|
||||
private final String desc;
|
||||
|
||||
ExcelTemplateEnum(String code, String desc) {
|
||||
this.code = code;
|
||||
this.desc = desc;
|
||||
}
|
||||
|
||||
/**
|
||||
* 通过code获取msg
|
||||
*
|
||||
* @param code 枚举值
|
||||
* @return
|
||||
*/
|
||||
public static String getMsgByCode(String code) {
|
||||
if (code == null) {
|
||||
return null;
|
||||
}
|
||||
ExcelTemplateEnum enumList = getByCode(code);
|
||||
if (enumList == null) {
|
||||
return null;
|
||||
}
|
||||
return enumList.getDesc();
|
||||
}
|
||||
|
||||
public static String getCode(ExcelTemplateEnum enumList) {
|
||||
if (enumList == null) {
|
||||
return null;
|
||||
}
|
||||
return enumList.getCode();
|
||||
}
|
||||
|
||||
public static ExcelTemplateEnum getByCode(String code) {
|
||||
for (ExcelTemplateEnum enumList : values()) {
|
||||
if (enumList.getCode().equals(code)) {
|
||||
return enumList;
|
||||
}
|
||||
}
|
||||
return null;
|
||||
}
|
||||
|
||||
}
|
||||
|
@ -0,0 +1,56 @@
|
||||
package com.glxp.api.util.Excel.Exception;
|
||||
|
||||
/**
|
||||
* @author : zhangsan
|
||||
* @date : 2023/4/17 11:21
|
||||
* @modyified By :
|
||||
*/
|
||||
|
||||
|
||||
public class RenException extends RuntimeException {
|
||||
private static final long serialVersionUID = 1L;
|
||||
|
||||
private String msg;
|
||||
private int code = 500;
|
||||
|
||||
public RenException(String msg) {
|
||||
super(msg);
|
||||
this.msg = msg;
|
||||
}
|
||||
|
||||
public RenException(String msg, Throwable e) {
|
||||
super(msg, e);
|
||||
this.msg = msg;
|
||||
}
|
||||
|
||||
public RenException(String msg, int code) {
|
||||
super(msg);
|
||||
this.msg = msg;
|
||||
this.code = code;
|
||||
}
|
||||
|
||||
public RenException(String msg, int code, Throwable e) {
|
||||
super(msg, e);
|
||||
this.msg = msg;
|
||||
this.code = code;
|
||||
}
|
||||
|
||||
public String getMsg() {
|
||||
return msg;
|
||||
}
|
||||
|
||||
public void setMsg(String msg) {
|
||||
this.msg = msg;
|
||||
}
|
||||
|
||||
public int getCode() {
|
||||
return code;
|
||||
}
|
||||
|
||||
public void setCode(int code) {
|
||||
this.code = code;
|
||||
}
|
||||
|
||||
|
||||
}
|
||||
|
Loading…
Reference in New Issue