库存报表导出异常,超时。改为异步。
一、库存报表异步导出
1、生成库存报表
@Override
public BaseResultVo generateReport(WarehouseInventoryDTO dto) {
String billPath = "/app/upload/bill";
Long loginUserId = LoginUserUtil.getLoginUserId();
Callable<BaseResultVo> c = () -> {
log.info("生成库存报表,用户id:" + loginUserId);
BaseResultVo baseResultVo = list(dto);
return baseResultVo;
}; //等待结果
Future<BaseResultVo> ft = ThreadPoolService.submit(c); //阻塞,等待结果。这里有问题。需要改成非阻塞的。
try {
BaseResultVo baseResultVo = ft.get();
if (baseResultVo.getData() != null) {
List<Object[]> objects = new ArrayList<>();
List<String> rowNameList = Arrays.asList("仓库名称", "所属货主", "商品编码", "商品大类", "商品名称", "单位",
"实际库存", "可用库存", "占用库存", "冻结库存");
StringBuffer buffer = new StringBuffer();
buffer.append(billPath).append("/").append(loginUserId).append("-").append(DateUtil.formatShort(new Date())).append(ExcelConstants.XLS);
String fileName = buffer.toString();
ExcelUtils.export("即时库存报表", fileName, rowName, objects);
//把文件写到文件服务器
File file = new File(fileName);
//内部上传
String url = fileUploadUtil.fileUpload(file.getName(), file);
if (null != url) {
//推送消息
Map<String, String> map = Maps.newHashMap();
map.put("url", url);
map.put("message", "库存报表已生成完毕");