diff --git a/wms/nladmin-system/nlsso-server/pom.xml b/wms/nladmin-system/nlsso-server/pom.xml index 8ad737a..3e46026 100644 --- a/wms/nladmin-system/nlsso-server/pom.xml +++ b/wms/nladmin-system/nlsso-server/pom.xml @@ -236,17 +236,17 @@ org.apache.poi poi-ooxml-schemas - 3.17 + 4.0.0 org.apache.poi poi - 3.17 + 4.0.0 org.apache.poi poi-ooxml - 3.17 + 4.0.0 xerces diff --git a/wms/nladmin-system/nlsso-server/src/main/java/org/nl/common/utils/FileUtil.java b/wms/nladmin-system/nlsso-server/src/main/java/org/nl/common/utils/FileUtil.java index a03479e..b8eaaeb 100644 --- a/wms/nladmin-system/nlsso-server/src/main/java/org/nl/common/utils/FileUtil.java +++ b/wms/nladmin-system/nlsso-server/src/main/java/org/nl/common/utils/FileUtil.java @@ -1,4 +1,4 @@ -/* +package org.nl.common.utils;/* * Copyright 2019-2020 Zheng Jie * * Licensed under the Apache License, Version 2.0 (the "License"); @@ -13,18 +13,20 @@ * See the License for the specific language governing permissions and * limitations under the License. */ -package org.nl.common.utils; import cn.hutool.core.io.IoUtil; import cn.hutool.core.util.IdUtil; +import cn.hutool.core.util.ObjectUtil; import cn.hutool.poi.excel.BigExcelWriter; import cn.hutool.poi.excel.ExcelUtil; +import com.google.common.collect.Lists; +import lombok.extern.slf4j.Slf4j; +import org.apache.poi.ss.usermodel.*; import org.apache.poi.util.IOUtils; import org.apache.poi.xssf.streaming.SXSSFSheet; +import org.apache.poi.xssf.streaming.SXSSFWorkbook; import org.nl.common.exception.BadRequestException; -import org.nl.config.language.LangProcess; -import org.slf4j.Logger; -import org.slf4j.LoggerFactory; +import org.springframework.util.CollectionUtils; import org.springframework.web.multipart.MultipartFile; import javax.servlet.ServletOutputStream; @@ -34,6 +36,7 @@ import java.io.*; import java.security.MessageDigest; import java.text.DecimalFormat; import java.text.SimpleDateFormat; +import java.util.ArrayList; import java.util.Date; import java.util.List; import java.util.Map; @@ -44,9 +47,10 @@ import java.util.Map; * @author Zheng Jie * @date 2018-12-27 */ +@Slf4j public class FileUtil extends cn.hutool.core.io.FileUtil { - private static final Logger log = LoggerFactory.getLogger(FileUtil.class); + private Integer batchWriteExcelRowAmount = 500; /** * 系统临时目录 @@ -205,26 +209,116 @@ public class FileUtil extends cn.hutool.core.io.FileUtil { * 导出excel */ public static void downloadExcel(List> list, HttpServletResponse response) throws IOException { - String tempPath = SYS_TEM_DIR + IdUtil.fastSimpleUUID() + ".xlsx"; - File file = new File(tempPath); - BigExcelWriter writer = ExcelUtil.getBigWriter(file); - // 一次性写出内容,使用默认样式,强制输出标题 - writer.write(list, true); - SXSSFSheet sheet = (SXSSFSheet)writer.getSheet(); - //上面需要强转SXSSFSheet 不然没有trackAllColumnsForAutoSizing方法 - sheet.trackAllColumnsForAutoSizing(); - //列宽自适应 - writer.autoSizeColumnAll(); - //response为HttpServletResponse对象 - response.setContentType("application/vnd.openxmlformats-officedocument.spreadsheetml.sheet;charset=utf-8"); - //test.xls是弹出下载对话框的文件名,不能为中文,中文请自行编码 - response.setHeader("Content-Disposition", "attachment;filename=file.xlsx"); - ServletOutputStream out = response.getOutputStream(); - // 终止后删除临时文件 - file.deleteOnExit(); - writer.flush(out, true); - //此处记得关闭输出Servlet流 - IoUtil.close(out); + ServletOutputStream out = null; + BigExcelWriter writer; + try { + String tempPath = SYS_TEM_DIR + IdUtil.fastSimpleUUID() + ".xlsx"; + File file = new File(tempPath); + writer = ExcelUtil.getBigWriter(file); + // 一次性写出内容,使用默认样式,强制输出标题 + writer.write(list, true); + SXSSFSheet sheet = (SXSSFSheet) writer.getSheet(); + //上面需要强转SXSSFSheet 不然没有trackAllColumnsForAutoSizing方法 + sheet.trackAllColumnsForAutoSizing(); + //列宽自适应 + writer.autoSizeColumnAll(); + //response为HttpServletResponse对象 + response.setContentType("application/vnd.openxmlformats-officedocument.spreadsheetml.sheet;charset=utf-8"); + //test.xls是弹出下载对话框的文件名,不能为中文,中文请自行编码 + response.setHeader("Content-Disposition", "attachment;filename=file.xlsx"); + out = response.getOutputStream(); + // 终止后删除临时文件 + file.deleteOnExit(); + writer.flush(out, true); + } finally { + //此处记得关闭输出Servlet流 + if (ObjectUtil.isNotEmpty(out)) { + IoUtil.close(out); + } + } + + } + + /** + * 流导出:后续改成导出文件 + * @param list + * @param response + * @throws IOException + */ + public void downloadExcelIO(List> list, String[] columnExcelNameArr, HttpServletResponse response) { + List> lastRestDataList = list; + List>> dataPiece = Lists.partition(list, 5000); + int blockNum = 0; + int blockNumMax = dataPiece.size(); + List allFileLocations = new ArrayList<>(); + ServletOutputStream out = null; + try { + boolean allFinish = false; + while (!allFinish) { + int thisFileRowNumber = 1; + SXSSFWorkbook wb = null; + try { +// if (blockNum columnMap = lastRestDataList.get(i); + for (int cellNum = 0; cellNum < columnExcelNameArr.length; cellNum++) { + Cell cell = dataRow.createCell(cellNum); + String valueStr = columnMap.get(columnExcelNameArr[cellNum]); + cell.setCellValue(valueStr); + } + thisFileRowNumber++; + } + } + + String localFilePath = SYS_TEM_DIR + IdUtil.fastSimpleUUID()+ blockNum + ".xlsx"; + allFileLocations.add(localFilePath); + response.setContentType("application/vnd.openxmlformats-officedocument.spreadsheetml.sheet;charset=utf-8"); + response.setHeader("Content-Disposition", "attachment;filename="+localFilePath); + out = response.getOutputStream(); + wb.write(out); + // 必须清理流式写入Excel生成的临时文件 + wb.dispose(); + allFinish = true; + }catch (Exception ex){ + log.warn(ex.getMessage()); + throw new BadRequestException(ex.getMessage()); + } finally { + if (out != null) { + try { + out.flush(); + out.close(); + } catch (IOException e) {log.warn(e.getMessage());} + } + if (wb != null) { + try { + wb.dispose(); + } catch (Exception e) {log.warn(e.getMessage());} + } + } + } + }finally { + if (out != null) { + try { + out.flush(); + out.close(); + } catch (IOException e) {log.warn(e.getMessage());} + } + } } public static String getFileType(String type) { @@ -249,7 +343,7 @@ public class FileUtil extends cn.hutool.core.io.FileUtil { // 1M int len = 1024 * 1024; if (size > (maxSize * len)) { - throw new BadRequestException(LangProcess.msg("error_File_1")); + throw new BadRequestException("文件超出规定大小!"); } } @@ -343,5 +437,6 @@ public class FileUtil extends cn.hutool.core.io.FileUtil { public static String getMd5(File file) { return getMd5(getByte(file)); } - } + + diff --git a/wms/nladmin-system/nlsso-server/src/main/java/org/nl/system/controller/logging/SysLogController.java b/wms/nladmin-system/nlsso-server/src/main/java/org/nl/system/controller/logging/SysLogController.java index f9d98b8..13dd4ca 100644 --- a/wms/nladmin-system/nlsso-server/src/main/java/org/nl/system/controller/logging/SysLogController.java +++ b/wms/nladmin-system/nlsso-server/src/main/java/org/nl/system/controller/logging/SysLogController.java @@ -13,6 +13,8 @@ import org.springframework.http.HttpStatus; import org.springframework.http.ResponseEntity; import org.springframework.web.bind.annotation.*; +import javax.servlet.http.HttpServletResponse; +import java.io.IOException; import java.util.Map; /** @@ -67,5 +69,11 @@ public class SysLogController { logService.delAllByInfo(); return new ResponseEntity<>(HttpStatus.OK); } + + @Log("导出数据") + @GetMapping(value = "/download") + public void download(@RequestParam Map map, HttpServletResponse response, String[] product_area) throws IOException { + logService.download(map, response, product_area); + } } diff --git a/wms/nladmin-system/nlsso-server/src/main/java/org/nl/system/service/logging/ISysLogService.java b/wms/nladmin-system/nlsso-server/src/main/java/org/nl/system/service/logging/ISysLogService.java index 7300bd1..5701586 100644 --- a/wms/nladmin-system/nlsso-server/src/main/java/org/nl/system/service/logging/ISysLogService.java +++ b/wms/nladmin-system/nlsso-server/src/main/java/org/nl/system/service/logging/ISysLogService.java @@ -7,6 +7,8 @@ import org.nl.common.domain.query.PageQuery; import org.nl.system.service.logging.dao.SysLog; import org.springframework.scheduling.annotation.Async; +import javax.servlet.http.HttpServletResponse; +import java.io.IOException; import java.util.Map; /** @@ -54,4 +56,6 @@ public interface ISysLogService extends IService { */ @Async void save(String username, String browser, String ip, ProceedingJoinPoint joinPoint, SysLog log); + + void download(Map map, HttpServletResponse response, String[] product_area) throws IOException; } diff --git a/wms/nladmin-system/nlsso-server/src/main/java/org/nl/system/service/logging/impl/SysLogServiceImpl.java b/wms/nladmin-system/nlsso-server/src/main/java/org/nl/system/service/logging/impl/SysLogServiceImpl.java index eac87a4..b899b87 100644 --- a/wms/nladmin-system/nlsso-server/src/main/java/org/nl/system/service/logging/impl/SysLogServiceImpl.java +++ b/wms/nladmin-system/nlsso-server/src/main/java/org/nl/system/service/logging/impl/SysLogServiceImpl.java @@ -15,6 +15,8 @@ import org.aspectj.lang.ProceedingJoinPoint; import org.aspectj.lang.reflect.MethodSignature; import org.nl.common.domain.query.PageQuery; import org.nl.common.logging.annotation.Log; +import org.nl.common.utils.FileUtil; +import org.nl.common.utils.SecurityUtils; import org.nl.common.utils.StringUtils; import org.nl.common.utils.ValidationUtil; import org.nl.system.service.logging.ISysLogService; @@ -25,12 +27,11 @@ import org.springframework.stereotype.Service; import org.springframework.web.bind.annotation.RequestBody; import org.springframework.web.bind.annotation.RequestParam; +import javax.servlet.http.HttpServletResponse; +import java.io.IOException; import java.lang.reflect.Method; import java.lang.reflect.Parameter; -import java.util.ArrayList; -import java.util.HashMap; -import java.util.List; -import java.util.Map; +import java.util.*; /** *

@@ -112,6 +113,38 @@ public class SysLogServiceImpl extends ServiceImpl impleme logDto.setCreate_time(DateUtil.now()); logMapper.insert(logDto); } + + @Override + public void download(Map map, HttpServletResponse response, String[] product_area) throws IOException { + String blurry = ObjectUtil.isNotEmpty(map.get("blurry"))?map.get("blurry").toString():null; + String log_type = ObjectUtil.isNotEmpty(map.get("log_type"))?map.get("log_type").toString():null; + String username = ObjectUtil.isNotEmpty(map.get("username"))?map.get("username").toString():null; + String begin_time = ObjectUtil.isNotEmpty(map.get("begin_time"))?map.get("begin_time").toString():null; + String end_time = ObjectUtil.isNotEmpty(map.get("end_time"))?map.get("end_time").toString():null; + LambdaQueryWrapper lam = new LambdaQueryWrapper<>(); + lam.eq(ObjectUtil.isNotEmpty(log_type), SysLog::getLog_type, log_type) + .eq(ObjectUtil.isNotEmpty(username), SysLog::getUsername, username) + .like(ObjectUtil.isNotEmpty(blurry), SysLog::getDescription, blurry) + .le(ObjectUtil.isNotEmpty(end_time), SysLog::getCreate_time, end_time) + .ge(ObjectUtil.isNotEmpty(begin_time), SysLog::getCreate_time, begin_time) + .orderByDesc(SysLog::getCreate_time); + List dataList = this.list(lam); + List> list = new ArrayList<>(); + for (int i = 0; i < dataList.size(); i++) { + SysLog sysLog = dataList.get(i); + Map mp = new LinkedHashMap<>(); + mp.put("用户名", SecurityUtils.getCurrentNickName()); + mp.put("IP", sysLog.getRequest_ip()); + mp.put("IP来源", sysLog.getAddress()); + mp.put("描述", sysLog.getDescription()); + mp.put("浏览器", sysLog.getBrowser()); + mp.put("请求耗时", sysLog.getTime() + "ms"); + mp.put("创建日期", sysLog.getCreate_time()); + list.add(mp); + } + FileUtil.downloadExcel(list, response); + } + /** * 根据方法和传入的参数获取请求参数 */ diff --git a/wms/nladmin-system/nlsso-server/src/main/java/org/nl/wms/sch_manage/controller/SchBaseTaskController.java b/wms/nladmin-system/nlsso-server/src/main/java/org/nl/wms/sch_manage/controller/SchBaseTaskController.java index 4446e8f..8717982 100644 --- a/wms/nladmin-system/nlsso-server/src/main/java/org/nl/wms/sch_manage/controller/SchBaseTaskController.java +++ b/wms/nladmin-system/nlsso-server/src/main/java/org/nl/wms/sch_manage/controller/SchBaseTaskController.java @@ -14,6 +14,8 @@ import org.springframework.http.ResponseEntity; import org.springframework.validation.annotation.Validated; import org.springframework.web.bind.annotation.*; +import javax.servlet.http.HttpServletResponse; +import java.io.IOException; import java.util.Map; import java.util.Set; @@ -71,4 +73,10 @@ public class SchBaseTaskController { return new ResponseEntity<>(HttpStatus.NO_CONTENT); } + @Log("导出数据") + @GetMapping(value = "/download") + public void download(@RequestParam Map map, HttpServletResponse response, String[] product_area) throws IOException { + schBaseTaskService.download(map, response, product_area); + } + } diff --git a/wms/nladmin-system/nlsso-server/src/main/java/org/nl/wms/sch_manage/service/ISchBasePointService.java b/wms/nladmin-system/nlsso-server/src/main/java/org/nl/wms/sch_manage/service/ISchBasePointService.java index 90220ec..b222bea 100644 --- a/wms/nladmin-system/nlsso-server/src/main/java/org/nl/wms/sch_manage/service/ISchBasePointService.java +++ b/wms/nladmin-system/nlsso-server/src/main/java/org/nl/wms/sch_manage/service/ISchBasePointService.java @@ -150,6 +150,14 @@ public interface ISchBasePointService extends IService { */ List getNoTaskPointByRegionAndType(String region, String type, String pointStatus); + /** + * 获取可用点位(成品-需要按照入库顺序排序) + * @param region + * @param type + * @return + */ + List getNoTaskPointByRegionAndTypeCp(String region, String type, String pointStatus); + /** * 获取可以直接上料的缠绕机 * @return diff --git a/wms/nladmin-system/nlsso-server/src/main/java/org/nl/wms/sch_manage/service/ISchBaseTaskService.java b/wms/nladmin-system/nlsso-server/src/main/java/org/nl/wms/sch_manage/service/ISchBaseTaskService.java index 4ffc5b6..c80c8fc 100644 --- a/wms/nladmin-system/nlsso-server/src/main/java/org/nl/wms/sch_manage/service/ISchBaseTaskService.java +++ b/wms/nladmin-system/nlsso-server/src/main/java/org/nl/wms/sch_manage/service/ISchBaseTaskService.java @@ -8,6 +8,8 @@ import org.nl.common.domain.query.PageQuery; import org.nl.wms.sch_manage.service.dao.SchBaseTask; import org.nl.wms.sch_manage.service.dto.SchBaseTaskQuery; +import javax.servlet.http.HttpServletResponse; +import java.io.IOException; import java.util.List; import java.util.Map; import java.util.Set; @@ -81,4 +83,6 @@ public interface ISchBaseTaskService extends IService { List getTaskByQuery(LambdaQueryWrapper lam); Integer haveTaskAll(String deviceCode); + + void download(Map map, HttpServletResponse response, String[] product_area) throws IOException; } diff --git a/wms/nladmin-system/nlsso-server/src/main/java/org/nl/wms/sch_manage/service/dao/mapper/SchBasePointMapper.java b/wms/nladmin-system/nlsso-server/src/main/java/org/nl/wms/sch_manage/service/dao/mapper/SchBasePointMapper.java index 0257ca2..655f55a 100644 --- a/wms/nladmin-system/nlsso-server/src/main/java/org/nl/wms/sch_manage/service/dao/mapper/SchBasePointMapper.java +++ b/wms/nladmin-system/nlsso-server/src/main/java/org/nl/wms/sch_manage/service/dao/mapper/SchBasePointMapper.java @@ -81,5 +81,7 @@ public interface SchBasePointMapper extends BaseMapper { List getNoTaskPointByRegionAndType(String region, String type, String pointStatus); + List getNoTaskPointByRegionAndTypeCp(String region, String type, String pointStatus); + List getCRUsedDevice(); } diff --git a/wms/nladmin-system/nlsso-server/src/main/java/org/nl/wms/sch_manage/service/dao/mapper/SchBasePointMapper.xml b/wms/nladmin-system/nlsso-server/src/main/java/org/nl/wms/sch_manage/service/dao/mapper/SchBasePointMapper.xml index 3a2d8df..dc862b2 100644 --- a/wms/nladmin-system/nlsso-server/src/main/java/org/nl/wms/sch_manage/service/dao/mapper/SchBasePointMapper.xml +++ b/wms/nladmin-system/nlsso-server/src/main/java/org/nl/wms/sch_manage/service/dao/mapper/SchBasePointMapper.xml @@ -185,6 +185,21 @@ t.point_code2 = p.point_code OR t.point_code3 = p.point_code OR t.point_code4 = p.point_code) AND '5' > t.task_status) + +