From bcd9cb83cbbb36217cb99ced7bf1fa3cb26bd53c Mon Sep 17 00:00:00 2001 From: zjj <3272660260@qq.com> Date: 星期一, 28 四月 2025 16:59:51 +0800 Subject: [PATCH] #wms端生成任务优化 --- rsf-server/src/main/java/com/vincent/rsf/server/common/utils/ExcelUtil.java | 243 ++++++++++++++++++++++++++++++------------------ 1 files changed, 152 insertions(+), 91 deletions(-) diff --git a/rsf-server/src/main/java/com/vincent/rsf/server/common/utils/ExcelUtil.java b/rsf-server/src/main/java/com/vincent/rsf/server/common/utils/ExcelUtil.java index bab11e6..5f6e0c4 100644 --- a/rsf-server/src/main/java/com/vincent/rsf/server/common/utils/ExcelUtil.java +++ b/rsf-server/src/main/java/com/vincent/rsf/server/common/utils/ExcelUtil.java @@ -1,12 +1,20 @@ package com.vincent.rsf.server.common.utils; +import cn.afterturn.easypoi.excel.annotation.Excel; +import cn.afterturn.easypoi.excel.entity.ImportParams; +import com.baomidou.mybatisplus.core.conditions.query.LambdaQueryWrapper; import com.vincent.rsf.framework.common.Cools; +import com.vincent.rsf.framework.common.SpringUtils; +import com.vincent.rsf.server.manager.entity.excel.MatnrsTemplate; +import com.vincent.rsf.server.manager.entity.excel.annotation.ExcelComment; +import com.vincent.rsf.server.system.entity.Fields; +import com.vincent.rsf.server.system.service.FieldsService; import io.swagger.annotations.ApiModelProperty; +import lombok.extern.slf4j.Slf4j; +import org.apache.commons.lang3.StringUtils; import org.apache.poi.hssf.usermodel.HSSFWorkbook; -import org.apache.poi.poifs.filesystem.POIFSFileSystem; import org.apache.poi.ss.usermodel.*; import org.apache.poi.xssf.usermodel.XSSFWorkbook; -import org.springframework.web.multipart.MultipartFile; import javax.servlet.http.HttpServletResponse; import java.io.IOException; @@ -19,8 +27,8 @@ /** * Created by vincent on 2/17/2024 */ +@Slf4j public class ExcelUtil { - public static void build(Workbook workbook, HttpServletResponse response) { response.reset(); Http.cors(response); @@ -28,16 +36,27 @@ try { response.setHeader("Content-Disposition", "attachment; filename=" + URLEncoder.encode("export", "UTF-8")); workbook.write(response.getOutputStream()); - } catch (IOException ignore) {} + } catch (IOException ignore) { + } } public static <T> Workbook create(List<T> list, Class<T> clz) { - HSSFWorkbook workbook = new HSSFWorkbook(); + return create(list, clz, false); + } + + public static <T> Workbook create(List<T> list, Class<T> clz, boolean flagTemplate) { + XSSFWorkbook workbook = new XSSFWorkbook(); Sheet sheet = workbook.createSheet(clz.getSimpleName()); Row header = sheet.createRow(0); Field[] fields = Cools.getAllFields(clz); int headerIdx = 0; + FieldsService itemService = SpringUtils.getBean(FieldsService.class); + List<Fields> sysFields = itemService.list(new LambdaQueryWrapper<Fields>() + .eq(Fields::getStatus, 1) + .eq(Fields::getFlagEnable, 1)); + + for (Field field : fields) { if (Modifier.isFinal(field.getModifiers()) || Modifier.isStatic(field.getModifiers()) @@ -45,44 +64,66 @@ continue; } String memo = "Undefined"; + if (flagTemplate) { + memo = field.getName(); + } else { + if (field.isAnnotationPresent(Excel.class)) { + memo = field.getAnnotation(Excel.class).name(); + } + } if (field.isAnnotationPresent(ApiModelProperty.class)) { memo = field.getAnnotation(ApiModelProperty.class).value(); } header.createCell(headerIdx).setCellValue(memo); headerIdx++; } - - int rowIndex = 1; - for (T t : list) { - Row row = sheet.createRow(rowIndex++); - - int cellIndex = 0; - for (Field field : fields) { - if (Modifier.isFinal(field.getModifiers()) - || Modifier.isStatic(field.getModifiers()) - || Modifier.isTransient(field.getModifiers())) { - continue; - } - - field.setAccessible(true); // 姝よ寰堥噸瑕侊紝鐗瑰埆鏄瓧娈典负private鏃� - Object value = null; - try { - value = field.get(t); - } catch (IllegalAccessException e) { - e.printStackTrace(); - } - if (value != null) { - if (value instanceof Date) { - SimpleDateFormat sdf = new SimpleDateFormat("yyyy-MM-dd HH:mm:ss"); - row.createCell(cellIndex).setCellValue(sdf.format((Date) value)); + if (clz.equals(MatnrsTemplate.class)) { + //娣诲姞鎵╁睍瀛楁鍒悕 + if (!sysFields.isEmpty()) { + for (Fields field : sysFields) { + if (flagTemplate) { + header.createCell(headerIdx).setCellValue(field.getFields()); } else { - row.createCell(cellIndex).setCellValue(value.toString()); + header.createCell(headerIdx).setCellValue(field.getFieldsAlise()); } + headerIdx++; } - cellIndex++; } } + int rowIndex = 1; + if (!Objects.isNull(list)) { + for (T t : list) { + Row row = sheet.createRow(rowIndex++); + + int cellIndex = 0; + for (Field field : fields) { + if (Modifier.isFinal(field.getModifiers()) + || Modifier.isStatic(field.getModifiers()) + || Modifier.isTransient(field.getModifiers())) { + continue; + } + + // 姝よ寰堥噸瑕侊紝鐗瑰埆鏄瓧娈典负private鏃� + field.setAccessible(true); + Object value = null; + try { + value = field.get(t); + } catch (IllegalAccessException e) { + e.printStackTrace(); + } + if (value != null) { + if (value instanceof Date) { + SimpleDateFormat sdf = new SimpleDateFormat("yyyy-MM-dd HH:mm:ss"); + row.createCell(cellIndex).setCellValue(sdf.format((Date) value)); + } else { + row.createCell(cellIndex).setCellValue(value.toString()); + } + } + cellIndex++; + } + } + } for (int i = 0; i <= fields.length; i++) { sheet.autoSizeColumn(i); } @@ -91,76 +132,96 @@ } /** - * Excel 瀵煎叆 - * @param file 鏂囦欢 - * @param keys 鏁版嵁椤哄簭 + * 娣诲姞瀵煎叆excel閰嶇疆鍙傛暟 + * 娉細榛樿閰嶇疆鍙弧瓒冲綋鍓嶉渶姹� + * + * @return */ - public static List<Map<String, Object>> importExcel(MultipartFile file, String[] keys) throws Exception{ - Workbook wb = null; - String fileName = file.getOriginalFilename(); - if (fileName.endsWith("xls")) { - POIFSFileSystem pois = new POIFSFileSystem(file.getInputStream()); - wb = new HSSFWorkbook(pois); - } else if (fileName.endsWith("xlsx")) { - wb = new XSSFWorkbook(file.getInputStream()); + public static ImportParams getDefaultImportParams() { + ImportParams importParams = new ImportParams(); + importParams.setTitleRows(0); +// importParams.setNeedVerify(true); + importParams.setHeadRows(1); + importParams.setSheetNum(1); + return importParams; + } + + /** + * 鏍规嵁 {@code tClass} 鐩稿叧鎴愬憳鍙橀噺鐨� {@link ExcelComment#example()} 瀛楁鍒涘缓妯℃嫙鏁版嵁锛屾殏涓嶆敮鎸� 澶嶆潅绫诲瀷 + * + * @param tClass + * @return + */ + public static <T> T mockData(Class<T> tClass) { + if (tClass == null) { + return null; } - Sheet sheet = wb.getSheetAt(0); - int rowCount = sheet.getPhysicalNumberOfRows(); - if (sheet.getRow( 1).getPhysicalNumberOfCells() != keys.length){ - throw new RuntimeException("瀵煎叆鐨凟xcel鍜屾ā鏉跨殑鍒椾笉鍖归厤"); - } - List<Map<String,Object>> result = new ArrayList<>(); - for (int i = 0; i < rowCount - 1; i++) { - Row row = sheet.getRow(i + 1); - Map<String,Object> tmp = new HashMap<>(); - for (int j = 0;j < keys.length; j++){ - Cell cell = row.getCell(j); - // 鎶婄被鍨嬭浆琛孲tring -// cell.setCellType(CellType.STRING); - tmp.put(keys[j], cell.getStringCellValue()); + T instance = null; + + try { + instance = tClass.newInstance(); + Field[] declaredFields = tClass.getDeclaredFields(); + for (Field declaredField : declaredFields) { + ExcelComment comment = declaredField.getAnnotation(ExcelComment.class); + if (comment == null) { + continue; + } + declaredField.setAccessible(true); + Class<?> fieldType = declaredField.getType(); + + String exampleValue = comment.example(); + Object value = null; + + if (fieldType == int.class || fieldType == Integer.class) { + value = StringUtils.isBlank(exampleValue) ? 0 : Integer.parseInt(exampleValue); + } else if (fieldType == short.class || fieldType == Short.class) { + value = StringUtils.isBlank(exampleValue) ? 0 : Short.parseShort(exampleValue); + } else if (fieldType == long.class || fieldType == Long.class) { + value = StringUtils.isBlank(exampleValue) ? 0 : Long.parseLong(exampleValue); + } else if (fieldType == double.class || fieldType == Double.class) { + value = StringUtils.isBlank(exampleValue) ? 0 : Double.parseDouble(exampleValue); + } else if (fieldType == boolean.class || fieldType == Boolean.class) { + value = StringUtils.isNotBlank(exampleValue) && Boolean.parseBoolean(exampleValue); + } else if (fieldType == String.class) { + value = exampleValue; + } else if (fieldType == Date.class) { + value = DateUtils.parse(exampleValue); + } + + if (value == null && !isBaseType(fieldType)) { + declaredField.set(instance, null); + } else { + declaredField.set(instance, value); + } } - result.add(tmp); + } catch (Exception e) { + log.error("鏁版嵁鏋勯�犲け璐ワ紝璇锋煡璇㈣缁嗕俊鎭�", e); + return instance; } - return result; + + return instance; } - /** - * 琛ㄥご鏍峰紡 - */ - private static CellStyle HeaderStyle(Workbook wb){ - Font font = wb.createFont(); - font.setFontName("瀹嬩綋"); - font.setFontHeightInPoints((short) 11); - CellStyle cellStyle = commonStyle(wb); - cellStyle.setFont(font); - return cellStyle; - } /** - * 鍐呭鏍峰紡 + * 鏄惁鏄熀纭�鏁版嵁绫诲瀷 + * + * @param className + * @return */ - private static CellStyle contentStyle(Workbook wb){ - Font font = wb.createFont(); - font.setFontName("瀹嬩綋"); - font.setFontHeightInPoints((short) 10); - CellStyle cellStyle = commonStyle(wb); - cellStyle.setFont(font); - return cellStyle; + private static boolean isBaseType(Class<?> className) { + if (className.equals(java.lang.Integer.class) || + className.equals(java.lang.Byte.class) || + className.equals(java.lang.Long.class) || + className.equals(java.lang.Double.class) || + className.equals(java.lang.Float.class) || + className.equals(java.lang.Character.class) || + className.equals(java.lang.Short.class) || + className.equals(java.lang.Boolean.class)) { + return true; + } + return false; } - /** - * 鍏叡鏍峰紡 - */ - private static CellStyle commonStyle(Workbook wb){ - CellStyle style = wb.createCellStyle(); - style.setAlignment(HorizontalAlignment.CENTER); - style.setVerticalAlignment(VerticalAlignment.CENTER); - style.setBorderBottom(BorderStyle.THIN); - style.setBorderLeft(BorderStyle.THIN); - style.setBorderTop(BorderStyle.THIN); - style.setBorderRight(BorderStyle.THIN); - style.setWrapText(true);// 鑷姩鎹㈣ - return style; - } } -- Gitblit v1.9.1