yudao-framework/yudao-spring-boot-starter-excel/src/main/java/cn/iocoder/yudao/framework/excel/core/util/ExcelUtils.java
@@ -1,5 +1,6 @@ package cn.iocoder.yudao.framework.excel.core.util; import cn.idev.excel.ExcelWriter; import cn.idev.excel.FastExcelFactory; import cn.idev.excel.converters.longconverter.LongStringConverter; import cn.iocoder.yudao.framework.common.util.http.HttpUtils; @@ -33,12 +34,22 @@ public static <T> void write(HttpServletResponse response, String filename, String sheetName, Class<T> head, List<T> data) throws IOException { // è¾åº Excel FastExcelFactory.write(response.getOutputStream(), head) ExcelWriter excelWriter = FastExcelFactory.write(response.getOutputStream(), head) .autoCloseStream(false) // ä¸è¦èªå¨å ³éï¼äº¤ç» Servlet èªå·±å¤ç .registerWriteHandler(new ColumnWidthMatchStyleStrategy()) // åºäº column é¿åº¦ï¼èªå¨éé ãæå¤§ 255 宽度 .registerWriteHandler(new SelectSheetWriteHandler(head)) // åºäºåºå® sheet å®ç°ä¸ææ¡ .registerConverter(new LongStringConverter()) // é¿å Long ç±»å丢失精度 .sheet(sheetName).doWrite(data); .build(); try { excelWriter.write(data, FastExcelFactory.writerSheet(sheetName).build()); } finally { // finish() å° workbook åå ¥å° response è¾åºæµ excelWriter.finish(); // close() 触å dispose() æ¸ çä¸´æ¶æä»¶ï¼ // POI SXSSFWorkbook.dispose() å¯è½è¾åº WARN "Failed to dispose sheet"ï¼ // è¿æ¯ POI å·²ç¥é®é¢ï¼ä¸´æ¶æä»¶æ¸ çæ¶ BufferedWriter å·²å ³éï¼ï¼ä¸å½±å导åºç»æ excelWriter.close(); } // 设置 header å contentTypeãå卿åçåå æ¯ï¼é¿å æ¥éæ¶ï¼ååº contentType å·²ç»è¢«ä¿®æ¹äº response.addHeader("Content-Disposition", "attachment;filename=" + HttpUtils.encodeUtf8(filename)); response.setContentType("application/vnd.ms-excel;charset=UTF-8"); yudao-module-erp/src/main/java/cn/iocoder/yudao/module/erp/controller/admin/purchase/vo/request/ErpPurchaseRequestRespVO.java
@@ -1,5 +1,8 @@ package cn.iocoder.yudao.module.erp.controller.admin.purchase.vo.request; import cn.idev.excel.annotation.ExcelIgnore; import cn.idev.excel.annotation.ExcelIgnoreUnannotated; import cn.idev.excel.annotation.ExcelProperty; import cn.iocoder.yudao.module.system.api.storage.dto.StorageBlobRespDTO; import io.swagger.v3.oas.annotations.media.Schema; import lombok.Data; @@ -11,75 +14,95 @@ @Schema(description = "管çåå° - ERP éè´ç³è¯· Response VO") @Data @ExcelIgnoreUnannotated public class ErpPurchaseRequestRespVO { @Schema(description = "ç¼å·", requiredMode = Schema.RequiredMode.REQUIRED, example = "1") @ExcelIgnore private Long id; @Schema(description = "éè´ç³è¯·åå·", requiredMode = Schema.RequiredMode.REQUIRED, example = "CGSQ001") @ExcelProperty("éè´ç³è¯·åå·") private String no; @Schema(description = "ç¶æ", requiredMode = Schema.RequiredMode.REQUIRED, example = "0") @ExcelProperty(value = "ç¶æ", converter = cn.iocoder.yudao.module.erp.convert.ErpPurchaseRequestStatusConvert.class) private Integer status; @Schema(description = "工使µç¼å·", example = "1043") private String processInstanceId; @Schema(description = "ç³è¯·äººç¼å·", requiredMode = Schema.RequiredMode.REQUIRED, example = "1") @ExcelProperty("ç³è¯·äººç¼å·") private Long requestUserId; @Schema(description = "ç³è¯·äººå§å", example = "å¼ ä¸") @ExcelProperty("ç³è¯·äººå§å") private String requestUserName; @Schema(description = "ç³è¯·é¨é¨ç¼å·", example = "1") @ExcelProperty("ç³è¯·é¨é¨ç¼å·") private Long requestDeptId; @Schema(description = "ç³è¯·é¨é¨åç§°", example = "ç产é¨") @ExcelProperty("ç³è¯·é¨é¨åç§°") private String requestDeptName; @Schema(description = "ç³è¯·æ¶é´", requiredMode = Schema.RequiredMode.REQUIRED) @ExcelProperty("ç³è¯·æ¶é´") private LocalDateTime requestTime; @Schema(description = "ç³è¯·çç±", example = "ç产éè¦") @ExcelProperty("ç³è¯·çç±") private String requestReason; @Schema(description = "ä¾åºåç¼å·", example = "1") @ExcelProperty("ä¾åºåç¼å·") private Long supplierId; @Schema(description = "ä¾åºååç§°", example = "ä¾åºåA") @ExcelProperty("ä¾åºååç§°") private String supplierName; @Schema(description = "å®ééé¢", example = "1000.00") @ExcelProperty("å®ééé¢") private BigDecimal depositPrice; @Schema(description = "å计æ°é", requiredMode = Schema.RequiredMode.REQUIRED) @ExcelProperty("å计æ°é") private BigDecimal totalCount; @Schema(description = "åè®¡ä»·æ ¼", requiredMode = Schema.RequiredMode.REQUIRED) @ExcelProperty("åè®¡ä»·æ ¼") private BigDecimal totalPrice; @Schema(description = "产ååç§°å表", example = "产åA,产åB") @ExcelProperty("产ååç§°å表") private String productNames; @Schema(description = "çæçéè´è®¢åç¼å·", example = "1") @ExcelIgnore private Long orderId; @Schema(description = "çæçéè´è®¢åå·", example = "CGDD001") @ExcelProperty("éè´è®¢åå·") private String orderNo; @Schema(description = "å ¥åºç¶æï¼0:æªå ¥åº 1:é¨åå ¥åº 2:å ¨é¨å ¥åºï¼", example = "0") @Schema(description = "å ¥åºç¶æ", example = "0") @ExcelProperty(value = "å ¥åºç¶æ", converter = cn.iocoder.yudao.module.erp.convert.ErpPurchaseOrderInStatusConvert.class) private Integer inStatus; @Schema(description = "夿³¨", example = "夿³¨") @ExcelProperty("夿³¨") private String remark; @Schema(description = "éä»¶å表") @ExcelIgnore private List<StorageBlobRespDTO> attachmentList; @Schema(description = "å建æ¶é´") @ExcelProperty("å建æ¶é´") private LocalDateTime createTime; @Schema(description = "ç³è¯·æç»å表") @ExcelIgnore private java.util.List<Item> items; @Schema(description = "ç³è¯·æç»é¡¹") yudao-module-erp/src/main/java/cn/iocoder/yudao/module/erp/convert/ErpPurchaseOrderInStatusConvert.java
¶Ô±ÈÐÂÎļþ @@ -0,0 +1,48 @@ package cn.iocoder.yudao.module.erp.convert; import cn.idev.excel.converters.Converter; import cn.idev.excel.enums.CellDataTypeEnum; import cn.idev.excel.metadata.GlobalConfiguration; import cn.idev.excel.metadata.data.ReadCellData; import cn.idev.excel.metadata.data.WriteCellData; import cn.idev.excel.metadata.property.ExcelContentProperty; import cn.iocoder.yudao.module.erp.enums.ErpPurchaseOrderInStatusEnum; /** * ERP éè´å ¥åºç¶æ Excel 转æ¢å¨ * <p> * å° Integer å ¥åºç¶æç 转æ¢ä¸ºä¸æåç§° * * @author èéæºç */ public class ErpPurchaseOrderInStatusConvert implements Converter<Integer> { @Override public Class<?> supportJavaTypeKey() { return Integer.class; } @Override public CellDataTypeEnum supportExcelTypeKey() { return CellDataTypeEnum.STRING; } @Override public WriteCellData<?> convertToExcelData(Integer value, ExcelContentProperty contentProperty, GlobalConfiguration globalConfiguration) { if (value == null) { return new WriteCellData<>(""); } ErpPurchaseOrderInStatusEnum statusEnum = ErpPurchaseOrderInStatusEnum.fromStatus(value); return new WriteCellData<>(statusEnum != null ? statusEnum.getName() : String.valueOf(value)); } @Override public Integer convertToJavaData(ReadCellData<?> cellData, ExcelContentProperty contentProperty, GlobalConfiguration globalConfiguration) { String label = cellData.getStringValue(); ErpPurchaseOrderInStatusEnum statusEnum = ErpPurchaseOrderInStatusEnum.fromName(label); return statusEnum != null ? statusEnum.getStatus() : null; } } yudao-module-erp/src/main/java/cn/iocoder/yudao/module/erp/convert/ErpPurchaseRequestStatusConvert.java
¶Ô±ÈÐÂÎļþ @@ -0,0 +1,48 @@ package cn.iocoder.yudao.module.erp.convert; import cn.idev.excel.converters.Converter; import cn.idev.excel.enums.CellDataTypeEnum; import cn.idev.excel.metadata.GlobalConfiguration; import cn.idev.excel.metadata.data.ReadCellData; import cn.idev.excel.metadata.data.WriteCellData; import cn.idev.excel.metadata.property.ExcelContentProperty; import cn.iocoder.yudao.module.erp.enums.ErpPurchaseRequestStatusEnum; /** * ERP éè´ç³è¯·ç¶æ Excel 转æ¢å¨ * <p> * å° Integer ç¶æç 转æ¢ä¸ºä¸æåç§°ï¼ç¨äº Excel å¯¼åº * * @author èéæºç */ public class ErpPurchaseRequestStatusConvert implements Converter<Integer> { @Override public Class<?> supportJavaTypeKey() { return Integer.class; } @Override public CellDataTypeEnum supportExcelTypeKey() { return CellDataTypeEnum.STRING; } @Override public WriteCellData<?> convertToExcelData(Integer value, ExcelContentProperty contentProperty, GlobalConfiguration globalConfiguration) { if (value == null) { return new WriteCellData<>(""); } ErpPurchaseRequestStatusEnum statusEnum = ErpPurchaseRequestStatusEnum.fromStatus(value); return new WriteCellData<>(statusEnum != null ? statusEnum.getName() : String.valueOf(value)); } @Override public Integer convertToJavaData(ReadCellData<?> cellData, ExcelContentProperty contentProperty, GlobalConfiguration globalConfiguration) { String label = cellData.getStringValue(); ErpPurchaseRequestStatusEnum statusEnum = ErpPurchaseRequestStatusEnum.fromName(label); return statusEnum != null ? statusEnum.getStatus() : null; } } yudao-module-erp/src/main/java/cn/iocoder/yudao/module/erp/enums/ErpPurchaseOrderInStatusEnum.java
@@ -30,4 +30,24 @@ return ARRAYS; } /** * æ ¹æ®ç¶æç è·åæä¸¾ */ public static ErpPurchaseOrderInStatusEnum fromStatus(Integer status) { return Arrays.stream(values()) .filter(e -> e.getStatus().equals(status)) .findFirst() .orElse(null); } /** * æ ¹æ®åç§°è·åæä¸¾ */ public static ErpPurchaseOrderInStatusEnum fromName(String name) { return Arrays.stream(values()) .filter(e -> e.getName().equals(name)) .findFirst() .orElse(null); } } yudao-module-erp/src/main/java/cn/iocoder/yudao/module/erp/enums/ErpPurchaseRequestStatusEnum.java
@@ -35,4 +35,24 @@ return ARRAYS; } /** * æ ¹æ®ç¶æç è·åæä¸¾ */ public static ErpPurchaseRequestStatusEnum fromStatus(Integer status) { return Arrays.stream(values()) .filter(e -> e.getStatus().equals(status)) .findFirst() .orElse(null); } /** * æ ¹æ®åç§°è·åæä¸¾ */ public static ErpPurchaseRequestStatusEnum fromName(String name) { return Arrays.stream(values()) .filter(e -> e.getName().equals(name)) .findFirst() .orElse(null); } } yudao-module-mes/src/main/java/cn/iocoder/yudao/module/mes/dal/mysql/wm/batch/MesWmBatchMapper.java
@@ -72,12 +72,12 @@ .betweenIfPresent(MesWmBatchDO::getExpireDate, reqVO.getExpireDate()) .betweenIfPresent(MesWmBatchDO::getReceiptDate, reqVO.getReceiptDate()) .orderByDesc(MesWmBatchDO::getId); if (permittedClientIds != null) { if (CollUtil.isEmpty(permittedClientIds)) { return PageResult.empty(); } wrapper.in(MesWmBatchDO::getClientId, permittedClientIds); } // if (permittedClientIds != null) { // if (CollUtil.isEmpty(permittedClientIds)) { // return PageResult.empty(); // } // wrapper.in(MesWmBatchDO::getClientId, permittedClientIds); // } return selectPage(reqVO, wrapper); } yudao-module-mes/src/main/java/cn/iocoder/yudao/module/mes/service/wm/batch/MesWmBatchServiceImpl.java
@@ -97,107 +97,66 @@ // 2. æ ¹æ®é ç½®æ ¡éªå¿ å¡«åæ°å¹¶æ¸ ç©ºä¸éè¦çåæ° MesWmBatchDO batch = MesWmBatchDO.builder().itemId(reqVO.getItemId()).build(); if (config != null) { // ========== å¿ å¡«æ ¡éªï¼flag=true è¡¨ç¤ºè¯¥åæ®µä¸ºå¿ å¡«ï¼ ========== // çäº§æ¥æ if (Boolean.TRUE.equals(config.getProduceDateFlag())) { if (ObjUtil.isNull(reqVO.getProduceDate())) { if (Boolean.TRUE.equals(config.getProduceDateFlag()) && ObjUtil.isNull(reqVO.getProduceDate())) { throw exception(WM_BATCH_PRODUCE_DATE_REQUIRED); } batch.setProduceDate(reqVO.getProduceDate()); } // å ¥åºæ¥æ if (Boolean.TRUE.equals(config.getReceiptDateFlag())) { if (ObjUtil.isNull(reqVO.getReceiptDate())) { if (Boolean.TRUE.equals(config.getReceiptDateFlag()) && ObjUtil.isNull(reqVO.getReceiptDate())) { throw exception(WM_BATCH_RECEIPT_DATE_REQUIRED); } batch.setReceiptDate(reqVO.getReceiptDate()); } // æææ if (Boolean.TRUE.equals(config.getExpireDateFlag())) { if (ObjUtil.isNull(reqVO.getExpireDate())) { if (Boolean.TRUE.equals(config.getExpireDateFlag()) && ObjUtil.isNull(reqVO.getExpireDate())) { throw exception(WM_BATCH_EXPIRE_DATE_REQUIRED); } batch.setExpireDate(reqVO.getExpireDate()); } // ä¾åºå if (Boolean.TRUE.equals(config.getVendorFlag())) { if (ObjUtil.isNull(reqVO.getVendorId())) { if (Boolean.TRUE.equals(config.getVendorFlag()) && ObjUtil.isNull(reqVO.getVendorId())) { throw exception(WM_BATCH_VENDOR_REQUIRED); } batch.setVendorId(reqVO.getVendorId()); } // å®¢æ· if (Boolean.TRUE.equals(config.getClientFlag())) { if (ObjUtil.isNull(reqVO.getClientId())) { if (Boolean.TRUE.equals(config.getClientFlag()) && ObjUtil.isNull(reqVO.getClientId())) { throw exception(WM_BATCH_CLIENT_REQUIRED); } batch.setClientId(reqVO.getClientId()); } // éè´è®¢åç¼å· if (Boolean.TRUE.equals(config.getPurchaseOrderCodeFlag())) { if (ObjUtil.isNull(reqVO.getPurchaseOrderCode())) { if (Boolean.TRUE.equals(config.getPurchaseOrderCodeFlag()) && ObjUtil.isNull(reqVO.getPurchaseOrderCode())) { throw exception(WM_BATCH_PURCHASE_ORDER_CODE_REQUIRED); } batch.setPurchaseOrderCode(reqVO.getPurchaseOrderCode()); } // éå®è®¢åç¼å· if (Boolean.TRUE.equals(config.getSalesOrderCodeFlag())) { if (ObjUtil.isNull(reqVO.getSalesOrderCode())) { if (Boolean.TRUE.equals(config.getSalesOrderCodeFlag()) && ObjUtil.isNull(reqVO.getSalesOrderCode())) { throw exception(WM_BATCH_CUSTOMER_ORDER_CODE_REQUIRED); } batch.setSalesOrderCode(reqVO.getSalesOrderCode()); } // ç产工å if (Boolean.TRUE.equals(config.getWorkOrderFlag())) { if (ObjUtil.isNull(reqVO.getWorkOrderId())) { if (Boolean.TRUE.equals(config.getWorkOrderFlag()) && ObjUtil.isNull(reqVO.getWorkOrderId())) { throw exception(WM_BATCH_WORK_ORDER_REQUIRED); } batch.setWorkOrderId(reqVO.getWorkOrderId()); } // çäº§ä»»å¡ if (Boolean.TRUE.equals(config.getTaskFlag())) { if (ObjUtil.isNull(reqVO.getTaskId())) { if (Boolean.TRUE.equals(config.getTaskFlag()) && ObjUtil.isNull(reqVO.getTaskId())) { throw exception(WM_BATCH_TASK_REQUIRED); } batch.setTaskId(reqVO.getTaskId()); } // å·¥ä½ç« if (Boolean.TRUE.equals(config.getWorkstationFlag())) { if (ObjUtil.isNull(reqVO.getWorkstationId())) { if (Boolean.TRUE.equals(config.getWorkstationFlag()) && ObjUtil.isNull(reqVO.getWorkstationId())) { throw exception(WM_BATCH_WORKSTATION_REQUIRED); } batch.setWorkstationId(reqVO.getWorkstationId()); } // å·¥å · if (Boolean.TRUE.equals(config.getToolFlag())) { if (ObjUtil.isNull(reqVO.getToolId())) { if (Boolean.TRUE.equals(config.getToolFlag()) && ObjUtil.isNull(reqVO.getToolId())) { throw exception(WM_BATCH_TOOL_REQUIRED); } batch.setToolId(reqVO.getToolId()); } // æ¨¡å · if (Boolean.TRUE.equals(config.getMoldFlag())) { if (ObjUtil.isNull(reqVO.getMoldId())) { if (Boolean.TRUE.equals(config.getMoldFlag()) && ObjUtil.isNull(reqVO.getMoldId())) { throw exception(WM_BATCH_MOLD_REQUIRED); } batch.setMoldId(reqVO.getMoldId()); } // ç产æ¹å· if (Boolean.TRUE.equals(config.getLotNumberFlag())) { if (ObjUtil.isNull(reqVO.getLotNumber())) { if (Boolean.TRUE.equals(config.getLotNumberFlag()) && ObjUtil.isNull(reqVO.getLotNumber())) { throw exception(WM_BATCH_LOT_NUMBER_REQUIRED); } batch.setLotNumber(reqVO.getLotNumber()); } // è´¨éç¶æ if (Boolean.TRUE.equals(config.getQualityStatusFlag())) { if (ObjUtil.isNull(reqVO.getQualityStatus())) { if (Boolean.TRUE.equals(config.getQualityStatusFlag()) && ObjUtil.isNull(reqVO.getQualityStatus())) { throw exception(WM_BATCH_QUALITY_STATUS_REQUIRED); } batch.setQualityStatus(reqVO.getQualityStatus()); } } // æ æ¹æ¬¡é ç½®æ¶ï¼ä½¿ç¨ä¼ å ¥çåæ°ï¼å®½æ¾æ¨¡å¼ï¼éç¨äºèªå®ä¹å ¥åºçåºæ¯ï¼ else { // ========== ä¿ååæ®µï¼æ è®ºææ é ç½®ï¼åªè¦è°ç¨æ¹ä¼ äºå°±ä¿åï¼ ========== if (reqVO.getProduceDate() != null) { batch.setProduceDate(reqVO.getProduceDate()); } @@ -213,6 +172,32 @@ if (reqVO.getClientId() != null) { batch.setClientId(reqVO.getClientId()); } if (reqVO.getPurchaseOrderCode() != null) { batch.setPurchaseOrderCode(reqVO.getPurchaseOrderCode()); } if (reqVO.getSalesOrderCode() != null) { batch.setSalesOrderCode(reqVO.getSalesOrderCode()); } if (reqVO.getWorkOrderId() != null) { batch.setWorkOrderId(reqVO.getWorkOrderId()); } if (reqVO.getTaskId() != null) { batch.setTaskId(reqVO.getTaskId()); } if (reqVO.getWorkstationId() != null) { batch.setWorkstationId(reqVO.getWorkstationId()); } if (reqVO.getToolId() != null) { batch.setToolId(reqVO.getToolId()); } if (reqVO.getMoldId() != null) { batch.setMoldId(reqVO.getMoldId()); } if (reqVO.getLotNumber() != null) { batch.setLotNumber(reqVO.getLotNumber()); } if (reqVO.getQualityStatus() != null) { batch.setQualityStatus(reqVO.getQualityStatus()); } // 3.1 æ åµä¸ï¼ä¼ å ¥äº batchCodeï¼æ¥è¯¢æ¯å¦åå¨è¯¥æ¹æ¬¡å·