From 30a6258f1e582b457a790fb6f70bc3b241966710 Mon Sep 17 00:00:00 2001 From: c Date: Fri, 13 Mar 2026 15:34:37 +0800 Subject: [PATCH] =?UTF-8?q?=E5=BC=82=E5=B8=B8=E5=A4=84=E7=90=86=E6=94=B9?= =?UTF-8?q?=E6=88=90=E8=83=BD=E5=B8=A6=E5=8F=82=E6=95=B0=E3=80=82?= MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit --- .../common/exception/BusinessException.java | 22 ++ .../erp/common/exception/SystemException.java | 22 ++ .../handler/GlobalExceptionHandler.java | 6 +- .../service/impl/BomServiceImpl.java | 12 +- .../FinishedProductReceiptServiceImpl.java | 61 ++-- .../FinishedProductShipmentServiceImpl.java | 47 +-- .../impl/ProductionIssueServiceImpl.java | 14 +- .../impl/ProductionPlanServiceImpl.java | 5 +- .../impl/ProductionReturnServiceImpl.java | 18 +- .../impl/PurchaseOrderServiceImpl.java | 17 +- .../service/impl/SaleOrderServiceImpl.java | 35 +- .../sys/service/impl/SysUserServiceImpl.java | 12 +- .../impl/InventoryCountServiceImpl.java | 28 +- .../impl/StockTransferOrderServiceImpl.java | 42 ++- .../impl/WarehouseItemServiceImpl.java | 8 +- .../impl/WarehouseReceiptServiceImpl.java | 27 +- src/main/resources/i18n/messages.properties | 239 +++++++++++++ .../resources/i18n/messages_en_US.properties | 320 ++++++++++++++++-- .../resources/i18n/messages_zh_CN.properties | 143 +++++++- 19 files changed, 900 insertions(+), 178 deletions(-) diff --git a/src/main/java/com/niuan/erp/common/exception/BusinessException.java b/src/main/java/com/niuan/erp/common/exception/BusinessException.java index 0343c34..734907a 100644 --- a/src/main/java/com/niuan/erp/common/exception/BusinessException.java +++ b/src/main/java/com/niuan/erp/common/exception/BusinessException.java @@ -1,7 +1,29 @@ package com.niuan.erp.common.exception; +import lombok.Getter; + +@Getter public class BusinessException extends RuntimeException { + + private final Object[] args; + public BusinessException(String message) { super(message); + this.args = null; + } + + public BusinessException(String message, Object... args) { + super(message); + this.args = args; + } + + public BusinessException(String message, Throwable cause) { + super(message, cause); + this.args = null; + } + + public BusinessException(String message, Throwable cause, Object... args) { + super(message, cause); + this.args = args; } } diff --git a/src/main/java/com/niuan/erp/common/exception/SystemException.java b/src/main/java/com/niuan/erp/common/exception/SystemException.java index 4d0aeed..e0fc5fd 100644 --- a/src/main/java/com/niuan/erp/common/exception/SystemException.java +++ b/src/main/java/com/niuan/erp/common/exception/SystemException.java @@ -1,7 +1,29 @@ package com.niuan.erp.common.exception; +import lombok.Getter; + +@Getter public class SystemException extends RuntimeException { + + private final Object[] args; + public SystemException(String message) { super(message); + this.args = null; + } + + public SystemException(String message, Object... args) { + super(message); + this.args = args; + } + + public SystemException(String message, Throwable cause) { + super(message, cause); + this.args = null; + } + + public SystemException(String message, Throwable cause, Object... args) { + super(message, cause); + this.args = args; } } diff --git a/src/main/java/com/niuan/erp/common/handler/GlobalExceptionHandler.java b/src/main/java/com/niuan/erp/common/handler/GlobalExceptionHandler.java index 61eb37c..b5376b4 100644 --- a/src/main/java/com/niuan/erp/common/handler/GlobalExceptionHandler.java +++ b/src/main/java/com/niuan/erp/common/handler/GlobalExceptionHandler.java @@ -68,7 +68,7 @@ public class GlobalExceptionHandler { @ExceptionHandler(BusinessException.class) public ResponseEntity handleBusinessException(BusinessException e, Locale locale) { return ResponseEntity.ok().body( - BaseResult.error(3, messageSource.getMessage(e.getMessage(), null, locale))); + BaseResult.error(3, messageSource.getMessage(e.getMessage(), e.getArgs(), locale))); } /** @@ -80,7 +80,7 @@ public class GlobalExceptionHandler { @ExceptionHandler(SystemException.class) public ResponseEntity handleSystemException(SystemException e, Locale locale) { return ResponseEntity.ok().body( - BaseResult.error(4, messageSource.getMessage(e.getMessage(), null, locale))); + BaseResult.error(4, messageSource.getMessage(e.getMessage(), e.getArgs(), locale))); } // /** @@ -90,7 +90,7 @@ public class GlobalExceptionHandler { // * @return // */ // @ExceptionHandler(Exception.class) -// public ResponseEntity handleException(Exception e, Locale locale) { +// public ExceptionHandler(Exception e, Locale locale) { // return ResponseEntity.badRequest().body( // BaseResult.error(-1, e.getMessage())); // } diff --git a/src/main/java/com/niuan/erp/module/production/service/impl/BomServiceImpl.java b/src/main/java/com/niuan/erp/module/production/service/impl/BomServiceImpl.java index ff01f9d..ba95f9f 100644 --- a/src/main/java/com/niuan/erp/module/production/service/impl/BomServiceImpl.java +++ b/src/main/java/com/niuan/erp/module/production/service/impl/BomServiceImpl.java @@ -72,21 +72,23 @@ public class BomServiceImpl extends ServiceImpl implements BomSe // 检验数据 var searchBomNameWrapper = new LambdaQueryWrapper().eq(Bom::getBomName, dto.bomName()); if (this.baseMapper.selectCount(searchBomNameWrapper) > 0) { - throw new BusinessException("production.bom.exception.duplicate_bom_name"); + throw new BusinessException("production.bom.exception.duplicate_bom_name", dto.bomName()); } List items = dto.bomItems(); List itemPartNumbers = items.stream().map(BomItemAddDto::partNumber).distinct().toList(); if (items.size() != itemPartNumbers.size()) { - throw new BusinessException("production.bom.exception.duplicate_bom_item"); + throw new BusinessException("production.bom.exception.duplicate_bom_item", items.size() - itemPartNumbers.size()); } items.forEach(item -> { if (item.itemPosition().split(",").length != item.manufactureCount()) { - throw new BusinessException("production.bom.exception.unpair_position_count"); + throw new BusinessException("production.bom.exception.unpair_position_count", + item.partNumber(), item.itemPosition().split(",").length, item.manufactureCount()); } }); var searchBomItemWrapper = new LambdaQueryWrapper().in(WarehouseItem::getPartNumber, itemPartNumbers); - if (warehouseItemMapper.selectCount(searchBomItemWrapper) != items.size()) { - throw new BusinessException("production.bom.exception.unexists_bom_item"); + long existingCount = warehouseItemMapper.selectCount(searchBomItemWrapper); + if (existingCount != items.size()) { + throw new BusinessException("production.bom.exception.unexists_bom_item", items.size() - existingCount); } // save diff --git a/src/main/java/com/niuan/erp/module/production/service/impl/FinishedProductReceiptServiceImpl.java b/src/main/java/com/niuan/erp/module/production/service/impl/FinishedProductReceiptServiceImpl.java index 0c1fd8c..87a8748 100644 --- a/src/main/java/com/niuan/erp/module/production/service/impl/FinishedProductReceiptServiceImpl.java +++ b/src/main/java/com/niuan/erp/module/production/service/impl/FinishedProductReceiptServiceImpl.java @@ -60,7 +60,7 @@ public class FinishedProductReceiptServiceImpl extends ServiceImpl deviceItems = dto.deviceItems(); if (deviceItems == null || deviceItems.isEmpty()) { - throw new BusinessException("production.finished_product_receipt.exception.no_device_items"); + throw new BusinessException("production.finished_product_receipt.exception.no_device_items", dto.formCode()); } List snList = deviceItems.stream() @@ -69,7 +69,8 @@ public class FinishedProductReceiptServiceImpl extends ServiceImpl uniqueSnSet = new HashSet<>(snList); if (uniqueSnSet.size() != snList.size()) { - throw new BusinessException("production.finished_product_receipt.exception.duplicate_sn_in_request"); + throw new BusinessException("production.finished_product_receipt.exception.duplicate_sn_in_request", + snList.size() - uniqueSnSet.size()); } List macList = deviceItems.stream() @@ -80,7 +81,8 @@ public class FinishedProductReceiptServiceImpl extends ServiceImpl uniqueMacSet = new HashSet<>(macList); if (uniqueMacSet.size() != macList.size()) { - throw new BusinessException("production.finished_product_receipt.exception.duplicate_mac_in_request"); + throw new BusinessException("production.finished_product_receipt.exception.duplicate_mac_in_request", + macList.size() - uniqueMacSet.size()); } } @@ -92,17 +94,19 @@ public class FinishedProductReceiptServiceImpl extends ServiceImpl uniqueSerialNumSet = new HashSet<>(serialNumList); if (uniqueSerialNumSet.size() != serialNumList.size()) { - throw new BusinessException("production.finished_product_receipt.exception.duplicate_serial_num_in_request"); + throw new BusinessException("production.finished_product_receipt.exception.duplicate_serial_num_in_request", + serialNumList.size() - uniqueSerialNumSet.size()); } } List invalidStatusSn = deviceItems.stream() .filter(item -> !"已激活".equals(item.alTxt())) - .map(item -> "SN号:" + item.productSn()) + .map(DeviceAddDto::productSn) .toList(); if (!invalidStatusSn.isEmpty()) { - throw new BusinessException("production.finished_product_receipt.exception.invalid_activation_status"); + throw new BusinessException("production.finished_product_receipt.exception.invalid_activation_status", + String.join(", ", invalidStatusSn)); } LambdaQueryWrapper snWrapper = new LambdaQueryWrapper<>(); @@ -114,11 +118,11 @@ public class FinishedProductReceiptServiceImpl extends ServiceImpl duplicateSnInDb = snList.stream() .filter(existingSnSet::contains) - .map(sn -> "SN号:" + sn) .toList(); if (!duplicateSnInDb.isEmpty()) { - throw new BusinessException("production.finished_product_receipt.exception.sn_already_exists"); + throw new BusinessException("production.finished_product_receipt.exception.sn_already_exists", + String.join(", ", duplicateSnInDb)); } if (!macList.isEmpty()) { @@ -132,11 +136,11 @@ public class FinishedProductReceiptServiceImpl extends ServiceImpl duplicateMacInDb = macList.stream() .filter(existingMacSet::contains) - .map(mac -> "MAC地址:" + mac) .toList(); if (!duplicateMacInDb.isEmpty()) { - throw new BusinessException("production.finished_product_receipt.exception.mac_already_exists"); + throw new BusinessException("production.finished_product_receipt.exception.mac_already_exists", + String.join(", ", duplicateMacInDb)); } } @@ -151,11 +155,11 @@ public class FinishedProductReceiptServiceImpl extends ServiceImpl duplicateSerialNumInDb = serialNumList.stream() .filter(existingSerialNumSet::contains) - .map(serialNum -> "序列号:" + serialNum) .toList(); if (!duplicateSerialNumInDb.isEmpty()) { - throw new BusinessException("production.finished_product_receipt.exception.serial_num_already_exists"); + throw new BusinessException("production.finished_product_receipt.exception.serial_num_already_exists", + String.join(", ", duplicateSerialNumInDb)); } } @@ -190,10 +194,10 @@ public class FinishedProductReceiptServiceImpl extends ServiceImpl wrapper = new LambdaQueryWrapper<>(); @@ -223,14 +227,17 @@ public class FinishedProductReceiptServiceImpl extends ServiceImpl ids) { if (ids == null || ids.isEmpty()) { - throw new BusinessException("production.finished_product_receipt.exception.ids_empty"); + throw new BusinessException("production.finished_product_receipt.exception.ids_empty", 0); } List entities = this.baseMapper.selectBatchIds(ids); boolean hasApproved = entities.stream() .anyMatch(e -> e.getFormStatus() == FormStatus.APPROVE); if (hasApproved) { - throw new BusinessException("production.finished_product_receipt.exception.cannot_delete_approved_batch"); + long approvedCount = entities.stream() + .filter(e -> e.getFormStatus() == FormStatus.APPROVE) + .count(); + throw new BusinessException("production.finished_product_receipt.exception.cannot_delete_approved_batch", approvedCount); } for (Long id : ids) { @@ -266,15 +273,15 @@ public class FinishedProductReceiptServiceImpl extends ServiceImpl shipmentItems = dto.shipmentItems(); if (shipmentItems == null || shipmentItems.isEmpty()) { - throw new BusinessException("production.finished_product_shipment.exception.no_shipment_items"); + throw new BusinessException("production.finished_product_shipment.exception.no_shipment_items", dto.formCode()); } // 校验明细项 for (FinishedProductShipmentItemDto item : shipmentItems) { if (!StringUtils.hasText(item.partNumber())) { - throw new BusinessException("production.finished_product_shipment.validate.part_number.not_blank"); + throw new BusinessException("production.finished_product_shipment.validate.part_number.not_blank", dto.formCode()); } if (item.productCount() == null || item.productCount() <= 0) { - throw new BusinessException("production.finished_product_shipment.validate.product_count.positive"); + throw new BusinessException("production.finished_product_shipment.validate.product_count.positive", + item.partNumber(), item.productCount()); } } @@ -100,12 +101,13 @@ public class FinishedProductShipmentServiceImpl extends ServiceImpl uniquePartNumberSet = new HashSet<>(partNumberList); if (uniquePartNumberSet.size() != partNumberList.size()) { - throw new BusinessException("production.finished_product_shipment.exception.duplicate_part_number_in_request"); + throw new BusinessException("production.finished_product_shipment.exception.duplicate_part_number_in_request", + partNumberList.size() - uniquePartNumberSet.size()); } LambdaQueryWrapper itemWrapper = new LambdaQueryWrapper<>(); @@ -117,11 +119,11 @@ public class FinishedProductShipmentServiceImpl extends ServiceImpl notFoundPartNumbers = partNumberList.stream() .filter(pn -> !existingPartNumberSet.contains(pn)) - .map(pn -> "物料编号:" + pn) .toList(); if (!notFoundPartNumbers.isEmpty()) { - throw new BusinessException("production.finished_product_shipment.exception.part_number_not_found"); + throw new BusinessException("production.finished_product_shipment.exception.part_number_not_found", + String.join(", ", notFoundPartNumbers)); } Document entity = finishedProductShipmentConverter.toEntity(dto); @@ -160,10 +162,10 @@ public class FinishedProductShipmentServiceImpl extends ServiceImpl itemWrapper = new LambdaQueryWrapper<>(); itemWrapper.eq(DocumentMaterial::getDocumentNo, id); List items = documentMaterialMapper.selectList(itemWrapper); if (items == null || items.isEmpty()) { - throw new BusinessException("production.finished_product_shipment.exception.no_shipment_items"); + throw new BusinessException("production.finished_product_shipment.exception.no_shipment_items", id); } Integer storeNo = entity.getStoreNo(); @@ -223,7 +225,10 @@ public class FinishedProductShipmentServiceImpl extends ServiceImpl itemWrapper = new LambdaQueryWrapper<>(); diff --git a/src/main/java/com/niuan/erp/module/production/service/impl/ProductionIssueServiceImpl.java b/src/main/java/com/niuan/erp/module/production/service/impl/ProductionIssueServiceImpl.java index 5e84478..6161fe5 100644 --- a/src/main/java/com/niuan/erp/module/production/service/impl/ProductionIssueServiceImpl.java +++ b/src/main/java/com/niuan/erp/module/production/service/impl/ProductionIssueServiceImpl.java @@ -127,10 +127,10 @@ public class ProductionIssueServiceImpl extends ServiceImpl materials = documentMaterialMapper .selectList(new LambdaQueryWrapper().eq(DocumentMaterial::getDocumentNo, issue.getId())); @@ -160,10 +160,10 @@ public class ProductionIssueServiceImpl extends ServiceImpl materials = documentMaterialMapper .selectList(new LambdaQueryWrapper().eq(DocumentMaterial::getDocumentNo, issue.getId())); @@ -194,19 +194,19 @@ public class ProductionIssueServiceImpl extends ServiceImpl materials = documentMaterialMapper .selectList(new LambdaQueryWrapper().eq(DocumentMaterial::getDocumentNo, issue.getId())); if (materials == null || materials.isEmpty()) { - throw new BusinessException("发料单没有明细"); + throw new BusinessException("production.production_issue.exception.no_items", id); } // 创建退料单 diff --git a/src/main/java/com/niuan/erp/module/production/service/impl/ProductionPlanServiceImpl.java b/src/main/java/com/niuan/erp/module/production/service/impl/ProductionPlanServiceImpl.java index a4e722f..f452682 100644 --- a/src/main/java/com/niuan/erp/module/production/service/impl/ProductionPlanServiceImpl.java +++ b/src/main/java/com/niuan/erp/module/production/service/impl/ProductionPlanServiceImpl.java @@ -231,11 +231,12 @@ public class ProductionPlanServiceImpl extends ServiceImpl().in(ProductionPlan::getId, dto.ids())); plans.forEach(plan -> { if (!plan.getProductionStatus().equals(ProductionPlanStatus.NoComplete)) { - throw new BusinessException("production.production_plan.exception.must_no_complete"); + throw new BusinessException("production.production_plan.exception.must_no_complete", plan.getId()); } }); if (plans.stream().collect(Collectors.groupingBy(ProductionPlan::getStoreNo)).size() > 1) { - throw new BusinessException("production.production_plan.exception.more_than_one_warehouse"); + throw new BusinessException("production.production_plan.exception.more_than_one_warehouse", + plans.stream().collect(Collectors.groupingBy(ProductionPlan::getStoreNo)).size()); } plans.forEach(plan -> { plan.setUpdateUserId(SecurityUtils.getUserId()); diff --git a/src/main/java/com/niuan/erp/module/production/service/impl/ProductionReturnServiceImpl.java b/src/main/java/com/niuan/erp/module/production/service/impl/ProductionReturnServiceImpl.java index da4e3d2..57fe805 100644 --- a/src/main/java/com/niuan/erp/module/production/service/impl/ProductionReturnServiceImpl.java +++ b/src/main/java/com/niuan/erp/module/production/service/impl/ProductionReturnServiceImpl.java @@ -90,15 +90,15 @@ public class ProductionReturnServiceImpl extends ServiceImpl materials = documentMaterialMapper .selectList(new LambdaQueryWrapper().eq(DocumentMaterial::getDocumentNo, returnDoc.getId())); if (materials == null || materials.isEmpty()) { - throw new BusinessException("退料单没有明细"); + throw new BusinessException("production.production_return.exception.no_items", id); } // 更新库存 @@ -194,17 +194,17 @@ public class ProductionReturnServiceImpl extends ServiceImpl materials = documentMaterialMapper .selectList(new LambdaQueryWrapper().eq(DocumentMaterial::getDocumentNo, returnDoc.getId())); if (materials == null || materials.isEmpty()) { - throw new BusinessException("退料单没有明细"); + throw new BusinessException("production.production_return.exception.no_items", id); } // 更新库存 diff --git a/src/main/java/com/niuan/erp/module/purchase/service/impl/PurchaseOrderServiceImpl.java b/src/main/java/com/niuan/erp/module/purchase/service/impl/PurchaseOrderServiceImpl.java index bf4cea4..5d88d59 100644 --- a/src/main/java/com/niuan/erp/module/purchase/service/impl/PurchaseOrderServiceImpl.java +++ b/src/main/java/com/niuan/erp/module/purchase/service/impl/PurchaseOrderServiceImpl.java @@ -117,12 +117,12 @@ public class PurchaseOrderServiceImpl extends ServiceImpl items = purchaseOrderItemMapper.selectList( @@ -185,7 +185,7 @@ public class PurchaseOrderServiceImpl extends ServiceImpl item.getReceiptCount() != null && item.getReceiptCount() > 0); if (hasInbound) { - throw new BusinessException("purchase.purchase_order.exception.order_has_inbound"); + throw new BusinessException("purchase.purchase_order.exception.order_has_inbound", id); } purchaseOrderItemMapper.delete( @@ -259,11 +259,11 @@ public class PurchaseOrderServiceImpl extends ServiceImpl items = purchaseOrderItemMapper.selectList( @@ -279,14 +279,15 @@ public class PurchaseOrderServiceImpl extends ServiceImpl remaining) { - throw new BusinessException("purchase.purchase_order.exception.inbound_count_exceed"); + throw new BusinessException("purchase.purchase_order.exception.inbound_count_exceed", + item.getPartNumber(), remaining, inboundItem.inboundCount()); } item.setReceiptCount(currentReceiptCount + inboundItem.inboundCount()); diff --git a/src/main/java/com/niuan/erp/module/sale/service/impl/SaleOrderServiceImpl.java b/src/main/java/com/niuan/erp/module/sale/service/impl/SaleOrderServiceImpl.java index 2a09c9b..89643aa 100644 --- a/src/main/java/com/niuan/erp/module/sale/service/impl/SaleOrderServiceImpl.java +++ b/src/main/java/com/niuan/erp/module/sale/service/impl/SaleOrderServiceImpl.java @@ -118,10 +118,10 @@ public class SaleOrderServiceImpl extends ServiceImpl public void updateSaleOrder(SaleOrderUpdateDto dto) { Document existingEntity = this.baseMapper.selectById(dto.id()); if (existingEntity == null) { - throw new BusinessException("sale.sale_order.exception.not_found"); + throw new BusinessException("sale.sale_order.exception.not_found", dto.id()); } if (existingEntity.getFormStatus() == FormStatus.APPROVE) { - throw new BusinessException("sale.sale_order.exception.cannot_update_approved"); + throw new BusinessException("sale.sale_order.exception.cannot_update_approved", dto.id()); } // 计算新的订单总额 @@ -172,10 +172,10 @@ public class SaleOrderServiceImpl extends ServiceImpl public void deleteSaleOrder(long id) { Document entity = this.baseMapper.selectById(id); if (entity == null) { - throw new BusinessException("sale.sale_order.exception.not_found"); + throw new BusinessException("sale.sale_order.exception.not_found", id); } if (entity.getFormStatus() == FormStatus.APPROVE) { - throw new BusinessException("sale.sale_order.exception.cannot_delete_approved"); + throw new BusinessException("sale.sale_order.exception.cannot_delete_approved", id); } this.baseMapper.deleteById(id); @@ -188,7 +188,7 @@ public class SaleOrderServiceImpl extends ServiceImpl @Override public void deleteBatch(List ids) { if (ids == null || ids.isEmpty()) { - throw new BusinessException("sale.sale_order.exception.ids_empty"); + throw new BusinessException("sale.sale_order.exception.ids_empty", 0); } LambdaQueryWrapper wrapper = new LambdaQueryWrapper<>(); @@ -196,7 +196,7 @@ public class SaleOrderServiceImpl extends ServiceImpl wrapper.eq(Document::getFormStatus, FormStatus.APPROVE); Long approvedCount = this.baseMapper.selectCount(wrapper); if (approvedCount > 0) { - throw new BusinessException("sale.sale_order.exception.cannot_delete_approved_batch"); + throw new BusinessException("sale.sale_order.exception.cannot_delete_approved_batch", approvedCount); } this.baseMapper.deleteByIds(ids); @@ -210,17 +210,17 @@ public class SaleOrderServiceImpl extends ServiceImpl public void approve(long id) { Document entity = this.baseMapper.selectById(id); if (entity == null) { - throw new BusinessException("sale.sale_order.exception.not_found"); + throw new BusinessException("sale.sale_order.exception.not_found", id); } if (entity.getFormStatus() == FormStatus.APPROVE) { - throw new BusinessException("sale.sale_order.exception.already_approved"); + throw new BusinessException("sale.sale_order.exception.already_approved", id); } LambdaQueryWrapper itemWrapper = new LambdaQueryWrapper<>(); itemWrapper.eq(SaleOrderItem::getDocumentNo, id); List items = saleOrderItemMapper.selectList(itemWrapper); if (items == null || items.isEmpty()) { - throw new BusinessException("sale.sale_order.exception.no_sale_order_items"); + throw new BusinessException("sale.sale_order.exception.no_sale_order_items", id); } // 验证并扣除库存 @@ -252,11 +252,12 @@ public class SaleOrderServiceImpl extends ServiceImpl } if (stock == null) { - throw new BusinessException("warehouse.stock_transfer_order.exception.stock_not_found"); + throw new BusinessException("warehouse.stock_transfer_order.exception.stock_not_found", item.getPartNumber()); } if (stock.getProductCount() < item.getSaleCount()) { - throw new BusinessException("warehouse.stock_transfer_order.exception.insufficient_stock"); + throw new BusinessException("warehouse.stock_transfer_order.exception.insufficient_stock", + item.getPartNumber(), stock.getProductCount(), item.getSaleCount()); } // 扣除库存 - 如果有多条记录,只更新第一条 @@ -285,10 +286,10 @@ public class SaleOrderServiceImpl extends ServiceImpl public void unapprove(long id) { Document entity = this.baseMapper.selectById(id); if (entity == null) { - throw new BusinessException("sale.sale_order.exception.not_found"); + throw new BusinessException("sale.sale_order.exception.not_found", id); } if (entity.getFormStatus() != FormStatus.APPROVE) { - throw new BusinessException("sale.sale_order.exception.not_approved"); + throw new BusinessException("sale.sale_order.exception.not_approved", id); } LambdaQueryWrapper itemWrapper = new LambdaQueryWrapper<>(); @@ -301,7 +302,7 @@ public class SaleOrderServiceImpl extends ServiceImpl .count(); if (shippedCount > 0) { - throw new BusinessException("sale.sale_order.exception.cannot_unapprove_with_shipped"); + throw new BusinessException("sale.sale_order.exception.cannot_unapprove_with_shipped", id, shippedCount); } // 恢复库存 @@ -329,7 +330,7 @@ public class SaleOrderServiceImpl extends ServiceImpl } if (stock == null) { - throw new BusinessException("warehouse.stock_transfer_order.exception.stock_not_found"); + throw new BusinessException("warehouse.stock_transfer_order.exception.stock_not_found", item.getPartNumber()); } // 恢复库存 - 只更新第一条记录 @@ -398,7 +399,7 @@ public class SaleOrderServiceImpl extends ServiceImpl @Override public List importItems(MultipartFile file) { if (file == null || file.isEmpty()) { - throw new BusinessException("sale.sale_order.exception.file_empty"); + throw new BusinessException("sale.sale_order.exception.file_empty", file != null ? file.getOriginalFilename() : null); } try (Workbook workbook = WorkbookFactory.create(file.getInputStream())) { @@ -429,7 +430,7 @@ public class SaleOrderServiceImpl extends ServiceImpl return items; } catch (IOException e) { - throw new BusinessException("sale.sale_order.exception.import_failed"); + throw new BusinessException("sale.sale_order.exception.import_failed", file.getOriginalFilename(), e.getMessage()); } } diff --git a/src/main/java/com/niuan/erp/module/sys/service/impl/SysUserServiceImpl.java b/src/main/java/com/niuan/erp/module/sys/service/impl/SysUserServiceImpl.java index 35764ab..4837b51 100644 --- a/src/main/java/com/niuan/erp/module/sys/service/impl/SysUserServiceImpl.java +++ b/src/main/java/com/niuan/erp/module/sys/service/impl/SysUserServiceImpl.java @@ -123,10 +123,10 @@ public class SysUserServiceImpl extends ServiceImpl impl // 密码校验 if (!StringUtils.hasText(dto.passWord())) { - throw new BusinessException("sys.sysuser.validate.password.not_null"); + throw new BusinessException("sys.sysuser.validate.password.not_null", dto.loginName()); } if (!dto.passWord().equals(dto.confirmPassword())) { - throw new BusinessException("sys.sysuser.validate.password.not_match"); + throw new BusinessException("sys.sysuser.validate.password.not_match", dto.loginName()); } SysUser entity = sysUserConverter.toEntity(dto); @@ -148,7 +148,7 @@ public class SysUserServiceImpl extends ServiceImpl impl public void updateUser(Long id, SysUserDto dto) { SysUser existUser = this.baseMapper.selectById(id); if (existUser == null) { - throw new BusinessException("sys.sysuser.exception.not_exists"); + throw new BusinessException("sys.sysuser.exception.not_exists", id); } // 检查登录账号是否已存在 @@ -163,7 +163,7 @@ public class SysUserServiceImpl extends ServiceImpl impl // 如果传了密码,则更新密码 if (StringUtils.hasText(dto.passWord())) { if (!dto.passWord().equals(dto.confirmPassword())) { - throw new BusinessException("sys.sysuser.validate.password.not_match"); + throw new BusinessException("sys.sysuser.validate.password.not_match", dto.loginName()); } entity.setPassWord(passwordEncoder.encode(dto.passWord())); } else { @@ -207,7 +207,7 @@ public class SysUserServiceImpl extends ServiceImpl impl public void setStatus(Long id, Integer status) { SysUser user = this.baseMapper.selectById(id); if (user == null) { - throw new BusinessException("sys.sysuser.exception.not_exists"); + throw new BusinessException("sys.sysuser.exception.not_exists", id); } SysUser updateUser = new SysUser(); @@ -228,7 +228,7 @@ public class SysUserServiceImpl extends ServiceImpl impl } Long count = this.baseMapper.selectCount(wrapper); if (count > 0) { - throw new BusinessException("sys.sysuser.exception.login_name_exists"); + throw new BusinessException("sys.sysuser.exception.login_name_exists", loginName); } } diff --git a/src/main/java/com/niuan/erp/module/warehouse/service/impl/InventoryCountServiceImpl.java b/src/main/java/com/niuan/erp/module/warehouse/service/impl/InventoryCountServiceImpl.java index 18c0617..d3405fb 100644 --- a/src/main/java/com/niuan/erp/module/warehouse/service/impl/InventoryCountServiceImpl.java +++ b/src/main/java/com/niuan/erp/module/warehouse/service/impl/InventoryCountServiceImpl.java @@ -65,7 +65,7 @@ public class InventoryCountServiceImpl extends ServiceImpl ids) { if (ids == null || ids.isEmpty()) { - throw new BusinessException("warehouse.inventory_count.exception.ids_empty"); + throw new BusinessException("warehouse.inventory_count.exception.ids_empty", 0); } LambdaQueryWrapper wrapper = new LambdaQueryWrapper<>(); @@ -164,7 +164,7 @@ public class InventoryCountServiceImpl extends ServiceImpl 0) { - throw new BusinessException("warehouse.inventory_count.exception.cannot_delete_approved_batch"); + throw new BusinessException("warehouse.inventory_count.exception.cannot_delete_approved_batch", approvedCount); } this.baseMapper.deleteByIds(ids); @@ -178,17 +178,17 @@ public class InventoryCountServiceImpl extends ServiceImpl itemWrapper = new LambdaQueryWrapper<>(); itemWrapper.eq(InventoryCountItem::getDocumentNo, id); List items = inventoryCountItemMapper.selectList(itemWrapper); if (items == null || items.isEmpty()) { - throw new BusinessException("warehouse.inventory_count.exception.no_items"); + throw new BusinessException("warehouse.inventory_count.exception.no_items", id); } entity.setFormStatus(FormStatus.APPROVE); @@ -209,10 +209,10 @@ public class InventoryCountServiceImpl extends ServiceImpl itemWrapper = new LambdaQueryWrapper<>(); @@ -284,7 +284,7 @@ public class InventoryCountServiceImpl extends ServiceImpl importItems(MultipartFile file) { if (file == null || file.isEmpty()) { - throw new BusinessException("warehouse.inventory_count.exception.file_empty"); + throw new BusinessException("warehouse.inventory_count.exception.file_empty", file != null ? file.getOriginalFilename() : null); } try (Workbook workbook = WorkbookFactory.create(file.getInputStream())) { @@ -319,7 +319,7 @@ public class InventoryCountServiceImpl extends ServiceImpl ids) { if (ids == null || ids.isEmpty()) { - throw new BusinessException("warehouse.stock_transfer_order.exception.ids_empty"); + throw new BusinessException("warehouse.stock_transfer_order.exception.ids_empty", 0); } LambdaQueryWrapper wrapper = new LambdaQueryWrapper<>(); @@ -227,7 +227,7 @@ public class StockTransferOrderServiceImpl extends ServiceImpl 0) { - throw new BusinessException("warehouse.stock_transfer_order.exception.cannot_delete_approved_batch"); + throw new BusinessException("warehouse.stock_transfer_order.exception.cannot_delete_approved_batch", approvedCount); } this.baseMapper.deleteByIds(ids); @@ -241,17 +241,17 @@ public class StockTransferOrderServiceImpl extends ServiceImpl materialWrapper = new LambdaQueryWrapper<>(); materialWrapper.eq(DocumentMaterial::getDocumentNo, id); List materialList = documentMaterialMapper.selectList(materialWrapper); if (materialList == null || materialList.isEmpty()) { - throw new BusinessException("warehouse.stock_transfer_order.exception.no_materials"); + throw new BusinessException("warehouse.stock_transfer_order.exception.no_materials", id); } Integer outStoreNo = entity.getOutStoreNo(); @@ -270,7 +270,10 @@ public class StockTransferOrderServiceImpl extends ServiceImpl materialWrapper = new LambdaQueryWrapper<>(); @@ -391,10 +394,11 @@ public class StockTransferOrderServiceImpl extends ServiceImpl partCountMap = new HashMap<>(); @@ -443,12 +448,13 @@ public class StockTransferOrderServiceImpl extends ServiceImpl stockInfo = warehouseItems.get(partNumber); if (stockInfo == null) { - throw new BusinessException("warehouse.stock_transfer_order.exception.part_not_found"); + throw new BusinessException("warehouse.stock_transfer_order.exception.part_not_found", partNumber); } Long stockCount = (Long) stockInfo.get("productCount"); if (stockCount == null || stockCount < totalTransfer) { - throw new BusinessException("warehouse.stock_transfer_order.exception.insufficient_stock"); + throw new BusinessException("warehouse.stock_transfer_order.exception.insufficient_stock", + partNumber, stockCount != null ? stockCount : 0, totalTransfer); } } } diff --git a/src/main/java/com/niuan/erp/module/warehouse/service/impl/WarehouseItemServiceImpl.java b/src/main/java/com/niuan/erp/module/warehouse/service/impl/WarehouseItemServiceImpl.java index 980366b..0364745 100644 --- a/src/main/java/com/niuan/erp/module/warehouse/service/impl/WarehouseItemServiceImpl.java +++ b/src/main/java/com/niuan/erp/module/warehouse/service/impl/WarehouseItemServiceImpl.java @@ -103,7 +103,7 @@ public class WarehouseItemServiceImpl extends ServiceImpl getVendorListByWarehouseItemId(Long warehouseItemId) { WarehouseItem warehouseItem = this.baseMapper.selectById(warehouseItemId); if (warehouseItem == null) { - throw new BusinessException("warehouse.warehouse_item.exception.not_found"); + throw new BusinessException("warehouse.warehouse_item.exception.not_found", warehouseItemId); } String partNumber = warehouseItem.getPartNumber(); @@ -148,7 +148,7 @@ public class WarehouseItemServiceImpl extends ServiceImpl vendorIds = new HashSet<>(); for (ProductVendorMapAddDto.ProductVendorMapItemDto item : dto.vendorList()) { if (!vendorIds.add(item.vendorId())) { - throw new BusinessException("warehouse.warehouse_item.exception.vendor_duplicate"); + throw new BusinessException("warehouse.warehouse_item.exception.vendor_duplicate", item.vendorId()); } } } @@ -194,7 +194,7 @@ public class WarehouseItemServiceImpl extends ServiceImpl ids) { if (ids == null || ids.isEmpty()) { - throw new BusinessException("warehouse.warehouse_receipt.exception.ids_empty"); + throw new BusinessException("warehouse.warehouse_receipt.exception.ids_empty", 0); } LambdaQueryWrapper wrapper = new LambdaQueryWrapper<>(); @@ -146,7 +146,7 @@ public class WarehouseReceiptServiceImpl extends ServiceImpl 0) { - throw new BusinessException("warehouse.warehouse_receipt.exception.cannot_delete_approved_batch"); + throw new BusinessException("warehouse.warehouse_receipt.exception.cannot_delete_approved_batch", approvedCount); } this.baseMapper.deleteByIds(ids); @@ -160,17 +160,17 @@ public class WarehouseReceiptServiceImpl extends ServiceImpl materialWrapper = new LambdaQueryWrapper<>(); materialWrapper.eq(DocumentMaterial::getDocumentNo, id); List materialList = documentMaterialMapper.selectList(materialWrapper); if (materialList == null || materialList.isEmpty()) { - throw new BusinessException("warehouse.warehouse_receipt.exception.no_materials"); + throw new BusinessException("warehouse.warehouse_receipt.exception.no_materials", id); } Integer storeNo = entity.getStoreNo(); @@ -233,10 +233,10 @@ public class WarehouseReceiptServiceImpl extends ServiceImpl materialWrapper = new LambdaQueryWrapper<>(); @@ -258,10 +258,11 @@ public class WarehouseReceiptServiceImpl extends ServiceImpl> 系统管理 +sys.sysuser.validate.user_type.not_null=用户类型不能为空 +sys.sysuser.validate.login_name.not_null=登录账号不能为空 +sys.sysuser.validate.user_name.not_null=姓名不能为空 +sys.sysuser.validate.password.not_null=用户 [{0}] 密码不能为空 +sys.sysuser.validate.password.not_match=用户 [{0}] 两次输入的密码不一致 +sys.sysuser.validate.role_ids.not_null=请至少选择一个角色 +sys.sysuser.exception.not_exists=用户 [{0}] 不存在 +sys.sysuser.exception.login_name_exists=登录账号 [{0}] 已存在 + +# ==========>> 生产发料 +production.production_issue.exception.issue_not_exists=发料单 [{0}] 不存在 +production.production_issue.exception.only_approved_can_return=只有审核通过的发料单 [{0}] 才能生成退料单 +production.production_issue.exception.no_return_items=发料单 [{0}] 没有退料明细 +production.production_issue.exception.already_returned=发料单 [{0}] 已经生成退料单,不能再次退料 +production.production_issue.exception.not_exists=发料单 [{0}] 不存在 +production.production_issue.exception.already_approved=发料单 [{0}] 已经审核 +production.production_issue.exception.not_approved=发料单 [{0}] 不是已审核状态,不能反审 +production.production_issue.exception.no_items=发料单 [{0}] 没有明细 + +# ==========>> 生产退料 +production.production_return.exception.not_exist=退料单不存在 +production.production_return.exception.already_approved=退料单 [{0}] 已经审核 +production.production_return.exception.no_material=退料单没有明细 +production.production_return.exception.not_approved=退料单 [{0}] 不是已审核状态,不能反审 +production.production_return.exception.not_exists=退料单 [{0}] 不存在 +production.production_return.exception.no_items=退料单 [{0}] 没有明细 + +# ==========>> 成品入库 +production.finished_product_receipt.validate.form_code.not_null=单据编号不能为空 +production.finished_product_receipt.validate.form_name.not_null=单据名称不能为空 +production.finished_product_receipt.validate.store_no.not_null=仓库不能为空 +production.finished_product_receipt.validate.store_name.not_null=仓库名称不能为空 +production.finished_product_receipt.validate.module_sn_items.not_null=成品明细不能为空 +production.finished_product_receipt.exception.not_found=成品入库单 [{0}] 不存在 +production.finished_product_receipt.exception.cannot_update_approved=已审核的成品入库单 [{0}] 不能修改 +production.finished_product_receipt.exception.cannot_delete_approved=已审核的成品入库单 [{0}] 不能删除 +production.finished_product_receipt.exception.cannot_delete_approved_batch=选中的数据中存在 [{0}] 条已审核的成品入库单,不能删除 +production.finished_product_receipt.exception.ids_empty=请选择要删除的成品入库单 +production.finished_product_receipt.exception.already_approved=成品入库单 [{0}] 已经审核 +production.finished_product_receipt.exception.not_approved=成品入库单 [{0}] 不是已审核状态,不能反审 +production.finished_product_receipt.exception.no_module_sn_items=成品入库单 [{0}] 没有明细 +production.finished_product_receipt.exception.no_device_items=成品入库单 [{0}] 没有设备明细 +production.finished_product_receipt.exception.duplicate_sn_in_request=导入数据中存在 [{0}] 条重复SN号 +production.finished_product_receipt.exception.duplicate_mac_in_request=导入数据中存在 [{0}] 条重复MAC地址 +production.finished_product_receipt.exception.duplicate_serial_num_in_request=导入数据中存在 [{0}] 条重复序列号 +production.finished_product_receipt.exception.invalid_activation_status=存在未激活的SN号:{0} +production.finished_product_receipt.exception.sn_already_exists=系统中已存在的SN号:{0} +production.finished_product_receipt.exception.mac_already_exists=系统中已存在的MAC地址:{0} +production.finished_product_receipt.exception.serial_num_already_exists=系统中已存在的序列号:{0} +production.finished_product_receipt.exception.cannot_unapprove_with_shipped=成品入库单 [{0}] 已出货,不能反审 +production.finished_product_receipt.exception.file_empty=请选择要上传的文件 +production.finished_product_receipt.exception.import_failed=导入文件失败 +production.finished_product_receipt.exception.request_null=请求参数为空 +production.finished_product_receipt.exception.empty_outstock_list=成品入库单 [{0}] 没有出库明细 +production.finished_product_receipt.exception.invalid_sn_list=成品入库单 [{0}] 没有有效的SN号 +production.finished_product_receipt.exception.invalid_key_account=客户ID [{0}] 无效 +production.finished_product_receipt.exception.document_not_found=单据 [{0}] 不存在 + +# ==========>> 成品出库(带参数) +production.finished_product_shipment.exception.not_found=成品出库单 [{0}] 不存在 +production.finished_product_shipment.exception.cannot_delete_approved=已审核的成品出库单 [{0}] 不能删除 +production.finished_product_shipment.exception.cannot_delete_approved_batch=选中的数据中存在 [{0}] 条已审核的成品出库单,不能删除 +production.finished_product_shipment.exception.already_approved=成品出库单 [{0}] 已经审核 +production.finished_product_shipment.exception.not_approved=成品出库单 [{0}] 不是已审核状态,不能反审 +production.finished_product_shipment.exception.no_shipment_items=成品出库单 [{0}] 没有明细 +production.finished_product_shipment.exception.duplicate_part_number_in_request=导入数据中存在 [{0}] 条重复物料编号 +production.finished_product_shipment.exception.part_number_not_found=物料编号 [{0}] 在系统中不存在 +production.finished_product_shipment.exception.insufficient_stock=物料 [{0}] 库存不足,当前库存: {1},需要: {2} +production.finished_product_shipment.validate.product_count.positive=物料 [{0}] 数量必须大于0,当前: {1} +production.finished_product_shipment.validate.dto.not_null=出库单数据不能为空 +production.finished_product_shipment.validate.out_stock_type.not_null=出库单 [{0}] 出库类型不能为空 +production.finished_product_shipment.validate.form_name.not_null=出库单 [{0}] 单据名称不能为空 +production.finished_product_shipment.validate.store_no.not_null=出库单 [{0}] 仓库不能为空 +production.finished_product_shipment.validate.part_number.not_blank=出库单 [{0}] 物料编号不能为空 + +# ==========>> 销售订单 +sale.sale_order.validate.form_code.not_null=单据编号不能为空 +sale.sale_order.validate.form_name.not_null=单据名称不能为空 +sale.sale_order.validate.customer_id.not_null=客户不能为空 +sale.sale_order.validate.customer_name.not_null=客户名称不能为空 +sale.sale_order.validate.sale_order_items.not_null=销售明细不能为空 +sale.sale_order.validate.part_number.not_null=物料编号不能为空 +sale.sale_order.validate.sale_count.not_null=销售数量不能为空 +sale.sale_order.validate.price.not_null=单价不能为空 +sale.sale_order.exception.not_found=销售订单 [{0}] 不存在 +sale.sale_order.exception.cannot_update_approved=已审核的销售订单 [{0}] 不能修改 +sale.sale_order.exception.cannot_delete_approved=已审核的销售订单 [{0}] 不能删除 +sale.sale_order.exception.cannot_delete_approved_batch=选中的数据中存在 [{0}] 条已审核的销售订单,不能删除 +sale.sale_order.exception.ids_empty=请选择要删除的销售订单 +sale.sale_order.exception.already_approved=销售订单 [{0}] 已经审核 +sale.sale_order.exception.not_approved=销售订单 [{0}] 不是已审核状态,不能反审 +sale.sale_order.exception.no_sale_order_items=销售订单 [{0}] 没有明细 +sale.sale_order.exception.cannot_unapprove_with_shipped=销售订单 [{0}] 已出货 [{1}] 条,不能反审 +sale.sale_order.exception.file_empty=文件 [{0}] 为空,请选择要上传的文件 +sale.sale_order.exception.import_failed=导入文件失败 + # ==========>> 采购管理 purchase.purchase_plan.validate.plan_no.not_null=采购计划编号不能为空 @@ -119,6 +216,148 @@ purchase.purchase_plan.validate.part_number.not_null=物料编号不能为空 purchase.purchase_plan.validate.part_id.not_null=物料 ID 不能为空 purchase.purchase_plan.validate.purchase_count.not_null=购买数量不能为空 purchase.purchase_plan.validate.purchase_count.min=购买数量不能小于 0 +purchase.purchase_plan.validate.plan_id.not_null=采购计划 ID 不能为空 +purchase.purchase_plan.validate.vendor_id.not_null=供应商 ID 不能为空 +purchase.purchase_plan.validate.vendor_name.not_null=供应商名称不能为空 +purchase.purchase_plan.validate.selected_items.not_null=请选择要采购的物料 +purchase.purchase_plan.validate.form_code.not_null=单据编号不能为空 +purchase.purchase_plan.validate.form_name.not_null=单据名称不能为空 +purchase.purchase_plan.validate.form_mark.not_null=单据备注不能为空 +purchase.purchase_plan.validate.total_value.not_null=订单总额不能为空 +purchase.purchase_plan.exception.plan_not_exists=采购计划不存在 +purchase.purchase_plan.exception.items_already_ordered=物料已经生成采购订单,不能再次采购 +purchase.purchase_plan.exception.must_no_complete=选中的行其中有不是未完成的状态,计划ID: {0} +purchase.purchase_plan.exception.more_than_one_warehouse=选中的行不能有多个仓库,仓库数量: {0} + +# ==========>> 采购订单 +purchase.purchase_order.validate.id.not_null=采购订单 [{0}] ID不能为空 +purchase.purchase_order.validate.vendor_name.not_blank=供应商名称不能为空 +purchase.purchase_order.validate.vendor_name.not_null=供应商名称不能为空 +purchase.purchase_order.validate.items.not_empty=订单明细不能为空 +purchase.purchase_order.validate.items.not_null=订单明细不能为空 +purchase.purchase_order.validate.items.size=订单明细至少需要一条 +purchase.purchase_order.validate.part_number.not_blank=物料编号不能为空 +purchase.purchase_order.validate.purchase_count.not_null=采购数量不能为空 +purchase.purchase_order.validate.purchase_count.min=采购数量必须大于0 +purchase.purchase_order.validate.price.not_null=单价不能为空 +purchase.purchase_order.validate.price.min=单价不能小于0 +purchase.purchase_order.validate.order_id.not_null=订单ID不能为空 +purchase.purchase_order.validate.store_no.not_null=仓库不能为空 +purchase.purchase_order.validate.inbound_items.not_empty=入库明细不能为空 +purchase.purchase_order.validate.inbound_items.size=入库明细至少需要一条 +purchase.purchase_order.validate.item_id.not_null=明细ID不能为空 +purchase.purchase_order.validate.inbound_count.not_null=入库数量不能为空 +purchase.purchase_order.validate.inbound_count.min=入库数量必须大于0 +purchase.purchase_order.exception.order_not_exists=采购订单 [{0}] 不存在 +purchase.purchase_order.exception.order_already_completed=采购订单 [{0}] 已完成 +purchase.purchase_order.exception.item_not_exists=订单明细 [{0}] 不存在 +purchase.purchase_order.exception.inbound_count_exceed=物料 [{0}] 入库数量超过剩余待入库量,剩余: {1},入库: {2} +purchase.purchase_order.exception.order_has_inbound=采购订单 [{0}] 已入库,不能删除 + +# ==========>> 物料 +warehouse.warehouse_item.validate.id.not_null=物料 ID 不能为空 +warehouse.warehouse_item.validate.vendor_id.not_null=供应商 ID 不能为空 +warehouse.warehouse_item.validate.cost_price.min=成本价不能小于 0 +warehouse.warehouse_item.validate.part_number.not_null=物料编号不能为空 +warehouse.warehouse_item.validate.product_type.not_null=物料规格不能为空 +warehouse.warehouse_item.validate.product_specs.not_null=物料型号不能为空 +warehouse.warehouse_item.exception.not_found=物料 [{0}] 不存在 +warehouse.warehouse_item.exception.vendor_duplicate=供应商 [{0}] 不能重复 + +# ==========>> 调拨单 +warehouse.stock_transfer_order.exception.not_found=调拨单 [{0}] 不存在 +warehouse.stock_transfer_order.exception.id_required=调拨单ID不能为空,单据编号: {0} +warehouse.stock_transfer_order.exception.cannot_update_approved=已审核的调拨单不能修改 +warehouse.stock_transfer_order.exception.cannot_delete_approved=已审核的调拨单 [{0}] 不能删除 +warehouse.stock_transfer_order.exception.cannot_delete_approved_batch=选中的数据中存在 [{0}] 条已审核的调拨单,不能删除 +warehouse.stock_transfer_order.exception.ids_empty=请选择要删除的调拨单 +warehouse.stock_transfer_order.exception.already_approved=调拨单 [{0}] 已经审核 +warehouse.stock_transfer_order.exception.no_materials=调拨单 [{0}] 没有明细 +warehouse.stock_transfer_order.exception.insufficient_stock=物料 [{0}] 库存不足,当前库存: {1},需要: {2} +warehouse.stock_transfer_order.exception.not_approved=调拨单 [{0}] 不是已审核状态,不能反审 +warehouse.stock_transfer_order.exception.stock_not_found=物料 [{0}] 在入库仓库中不存在 +warehouse.stock_transfer_order.exception.insufficient_stock_for_unapprove=物料 [{0}] 在入库仓库中库存不足,当前库存: {1},需要: {2} +warehouse.stock_transfer_order.exception.file_empty=请选择要上传的文件 +warehouse.stock_transfer_order.exception.import_failed=导入文件失败 +warehouse.stock_transfer_order.exception.same_warehouse=入库仓库 [{0}] 和出库仓库 [{1}] 不能相同 +warehouse.stock_transfer_order.exception.part_not_found=物料 [{0}] 不存在 + +# ==========>> 入库单 +warehouse.warehouse_receipt.validate.form_code.not_null=单据编号不能为空 +warehouse.warehouse_receipt.validate.form_name.not_null=单据名称不能为空 +warehouse.warehouse_receipt.validate.store_no.not_null=仓库不能为空 +warehouse.warehouse_receipt.validate.store_name.not_null=仓库名称不能为空 +warehouse.warehouse_receipt.validate.receipt_items.not_null=入库明细不能为空 +warehouse.warehouse_receipt.validate.part_number.not_null=物料编号不能为空 +warehouse.warehouse_receipt.validate.product_spec.not_null=物料规格不能为空 +warehouse.warehouse_receipt.validate.product_count.not_null=入库数量不能为空 +warehouse.warehouse_receipt.validate.product_count.min=入库数量必须大于 0 +warehouse.warehouse_receipt.validate.part_id.not_null=物料 ID 不能为空 +warehouse.warehouse_receipt.exception.not_found=入库单 [{0}] 不存在 +warehouse.warehouse_receipt.exception.cannot_update_approved=已审核的入库单不能修改 +warehouse.warehouse_receipt.exception.cannot_delete_approved=已审核的入库单 [{0}] 不能删除 +warehouse.warehouse_receipt.exception.cannot_delete_approved_batch=选中的数据中存在 [{0}] 条已审核的入库单,不能删除 +warehouse.warehouse_receipt.exception.ids_empty=请选择要删除的入库单 +warehouse.warehouse_receipt.exception.already_approved=入库单 [{0}] 已经审核 +warehouse.warehouse_receipt.exception.no_materials=入库单 [{0}] 没有明细 +warehouse.warehouse_receipt.exception.not_approved=入库单 [{0}] 不是已审核状态,不能反审 +warehouse.warehouse_receipt.exception.stock_not_found=物料 [{0}] 在仓库中不存在 +warehouse.warehouse_receipt.exception.insufficient_stock_for_unapprove=物料 [{0}] 在仓库中库存不足,当前库存: {1},需要: {2} +warehouse.warehouse_receipt.exception.file_empty=请选择要上传的文件 +warehouse.warehouse_receipt.exception.import_failed=导入文件失败 + +# ==========>> 盘点单 +warehouse.inventory_count.validate.form_code.not_null=盘点单编号不能为空 +warehouse.inventory_count.validate.form_name.not_null=盘点单名称不能为空 +warehouse.inventory_count.validate.store_no.not_null=仓库 ID 不能为空 +warehouse.inventory_count.validate.store_name.not_null=仓库名称不能为空 +warehouse.inventory_count.validate.count_items.not_null=盘点明细不能为空 +warehouse.inventory_count.validate.part_number.not_null=物料编号不能为空 +warehouse.inventory_count.validate.product_count.not_null=盘点数量不能为空 +warehouse.inventory_count.validate.product_count.min=盘点数量不能小于 0 +warehouse.inventory_count.exception.not_found=盘点单 [{0}] 不存在 +warehouse.inventory_count.exception.cannot_update_approved=已审核的盘点单不能修改 +warehouse.inventory_count.exception.cannot_delete_approved=已审核的盘点单 [{0}] 不能删除 +warehouse.inventory_count.exception.cannot_delete_approved_batch=选中的数据中存在 [{0}] 条已审核的盘点单,不能删除 +warehouse.inventory_count.exception.ids_empty=请选择要删除的盘点单 +warehouse.inventory_count.exception.already_approved=盘点单 [{0}] 已经审核 +warehouse.inventory_count.exception.no_items=盘点单 [{0}] 没有明细 +warehouse.inventory_count.exception.not_approved=盘点单 [{0}] 不是已审核状态,不能反审 +warehouse.inventory_count.exception.stock_not_found=物料 [{0}] 在仓库中不存在库存 +warehouse.inventory_count.exception.stock_not_found_for_unapprove=物料 [{0}] 在仓库中不存在库存,无法反审 +warehouse.inventory_count.exception.file_empty=文件 [{0}] 为空,请选择要上传的文件 +warehouse.inventory_count.exception.import_failed=导入文件失败 +warehouse.inventory_count.exception.init_already_exists=当前仓库已经有初始库存单 + +# ==========>> BOM +production.bom.validate.bom_id.not_null=BOM Id 不能为空 +production.bom.validate.bom_no.not_null=BOM 编号不能为空 +production.bom.validate.bom_name.not_null=BOM 名称不能为空 +production.bom.validate.manufacturer.not_null=厂家 / 型号不能为空 +production.bom.validate.spec.not_null=封装规格不能为空 +production.bom.validate.brand_name.not_null=品牌不能为空 +production.bom.validate.part_number.not_null=物料编号不能为空 +production.bom.validate.manufacture_count.not_null=用量不能为空 +production.bom.validate.manufacture_count.min=用量最小为 1 +production.bom.validate.item_position.not_null=位号不能为空 +production.bom.exception.duplicate_bom_name=BOM名称 [{0}] 已存在 +production.bom.exception.duplicate_bom_item=BOM明细存在 [{0}] 条重复项 +production.bom.exception.unpair_position_count=物料 [{0}] 位号数量 [{1}] 与用量 [{2}] 不一致 +production.bom.exception.unexists_bom_item=BOM物料中有 [{0}] 条不存在 + +# ==========>> 设备SN +production.devicesn.validate.product_sn.not_null=SN号不能为空 +production.devicesn.validate.mac.not_null=MAC地址不能为空 +production.devicesn.exception.not_found=SN号不存在 + +# ==========>> 维修记录 +production.repair_record.validate.product_sn.not_null=SN号不能为空 +production.repair_record.validate.mac.not_null=MAC地址不能为空 +production.repair_record.validate.repair_status.not_null=维修状态不能为空 +production.repair_record.validate.repair_mark.not_null=返修记录不能为空 +production.repair_record.validate.identifier.not_null=SN号、MAC地址、序列号至少填写一个 +production.repair_record.exception.not_found=维修记录不存在 +production.repair_record.exception.device_not_found=设备不存在 # ==========> 类型 diff --git a/src/main/resources/i18n/messages_en_US.properties b/src/main/resources/i18n/messages_en_US.properties index ae325ab..32e783e 100644 --- a/src/main/resources/i18n/messages_en_US.properties +++ b/src/main/resources/i18n/messages_en_US.properties @@ -1,28 +1,306 @@ result.success=Request successful result.error=Request failed -production.productionreturn.exception.not_exist=Return order does not exist -production.productionreturn.exception.already_approved=Return order has been approved -production.productionreturn.exception.no_material=Return order has no details -production.productionreturn.exception.not_approved=Return order is not approved, cannot reject -production.production_issue.exception.issue_not_exists=Issue order does not exist -production.production_issue.exception.only_approved_can_return=Only approved issue orders can generate return orders -production.production_issue.exception.no_return_items=No return items -production.production_issue.exception.already_returned=Issue order has already generated a return order, cannot return again -purchase.purchase_plan.validate.plan_id.not_null=Purchase plan ID cannot be empty -purchase.purchase_plan.validate.vendor_id.not_null=Vendor ID cannot be empty -purchase.purchase_plan.validate.vendor_name.not_null=Vendor name cannot be empty -purchase.purchase_plan.validate.selected_items.not_null=Please select items to purchase -purchase.purchase_plan.validate.form_code.not_null=Form code cannot be empty -purchase.purchase_plan.validate.form_name.not_null=Form name cannot be empty -purchase.purchase_plan.validate.form_mark.not_null=Form mark cannot be empty -purchase.purchase_plan.validate.total_value.not_null=Total value cannot be empty -purchase.purchase_plan.exception.plan_not_exists=Purchase plan does not exist -purchase.purchase_plan.exception.items_already_ordered=Items have already generated purchase orders, cannot purchase again -warehouse.warehouse_item.validate.id.not_null=Warehouse item ID cannot be empty + +auth.unLogin=Not logged in +auth.userDetailsError=User information error + +validation.common.status.notNull=Status value cannot be empty +validation.common.status.valueError=Status value can only be 0 or 1 +validation.common.status.idNull=ID cannot be empty +validation.common.id.notNull=ID cannot be empty +validation.common.pageParams.page.notNull=Page number cannot be empty +validation.common.pageParams.pageSize.notNull=Page size cannot be empty +validation.common.pageParams.page.min=Page number cannot be less than 0 +validation.common.pageParams.pageSize.min=Page size cannot be less than 0 + +common.validate.page_params.not_null=Pagination parameters cannot be empty + +warehouse.warehouse_item.part_number.not_null=Part number cannot be empty + +# ==========>> System Management +sys.sysuser.validate.user_type.not_null=User type cannot be empty +sys.sysuser.validate.login_name.not_null=Login name cannot be empty +sys.sysuser.validate.user_name.not_null=User name cannot be empty +sys.sysuser.validate.password.not_null=Password for user [{0}] cannot be empty +sys.sysuser.validate.password.not_match=Passwords do not match for user [{0}] +sys.sysuser.validate.role_ids.not_null=Please select at least one role +sys.sysuser.exception.not_exists=User [{0}] does not exist +sys.sysuser.exception.login_name_exists=Login name [{0}] already exists + +# ==========>> Warehouse Management +warehouse.warehouse_item.validate.id.not_null=Material ID cannot be empty warehouse.warehouse_item.validate.vendor_id.not_null=Vendor ID cannot be empty warehouse.warehouse_item.validate.cost_price.min=Cost price cannot be less than 0 warehouse.warehouse_item.validate.part_number.not_null=Part number cannot be empty warehouse.warehouse_item.validate.product_type.not_null=Product type cannot be empty warehouse.warehouse_item.validate.product_specs.not_null=Product specs cannot be empty -warehouse.warehouse_item.exception.not_found=Warehouse item not found -warehouse.warehouse_item.exception.vendor_duplicate=Vendor cannot be duplicated +warehouse.warehouse_item.exception.not_found=Material [{0}] not found +warehouse.warehouse_item.exception.vendor_duplicate=Vendor [{0}] cannot be duplicated + +warehouse.stock_transfer_order.validate.form_code.not_null=Transfer order number cannot be empty +warehouse.stock_transfer_order.validate.form_name.not_null=Transfer order name cannot be empty +warehouse.stock_transfer_order.validate.store_no.not_null=Receiving warehouse ID cannot be empty +warehouse.stock_transfer_order.validate.store_name.not_null=Receiving warehouse name cannot be empty +warehouse.stock_transfer_order.validate.out_store_no.not_null=Source warehouse ID cannot be empty +warehouse.stock_transfer_order.validate.out_store_name.not_null=Source warehouse name cannot be empty +warehouse.stock_transfer_order.validate.transfer_order_items.not_null=Transfer order items cannot be empty +warehouse.stock_transfer_order.validate.part_number.not_null=Part number cannot be empty +warehouse.stock_transfer_order.validate.product_spec.not_null=Product specification cannot be empty +warehouse.stock_transfer_order.validate.product_count.not_null=Transfer quantity cannot be empty +warehouse.stock_transfer_order.validate.product_count.min=Transfer quantity must be greater than 0 +warehouse.stock_transfer_order.validate.part_id.not_null=Material ID cannot be empty +warehouse.stock_transfer_order.validate.order_id.not_null=Transfer order ID cannot be empty +warehouse.stock_transfer_order.exception.not_found=Transfer order [{0}] not found +warehouse.stock_transfer_order.exception.id_required=Transfer order ID is required, form code: {0} +warehouse.stock_transfer_order.exception.cannot_update_approved=Approved transfer order cannot be modified +warehouse.stock_transfer_order.exception.cannot_delete_approved=Approved transfer order [{0}] cannot be deleted +warehouse.stock_transfer_order.exception.cannot_delete_approved_batch=Selected data contains [{0}] approved transfer orders, cannot be deleted +warehouse.stock_transfer_order.exception.ids_empty=Please select transfer orders to delete +warehouse.stock_transfer_order.exception.already_approved=Transfer order [{0}] is already approved +warehouse.stock_transfer_order.exception.no_materials=Transfer order [{0}] has no items +warehouse.stock_transfer_order.exception.insufficient_stock=Material [{0}] has insufficient stock, current: {1}, required: {2} +warehouse.stock_transfer_order.exception.not_approved=Transfer order [{0}] is not approved, cannot unapprove +warehouse.stock_transfer_order.exception.stock_not_found=Material [{0}] does not exist in receiving warehouse +warehouse.stock_transfer_order.exception.insufficient_stock_for_unapprove=Material [{0}] has insufficient stock in receiving warehouse for unapproval, current: {1}, required: {2} +warehouse.stock_transfer_order.exception.file_empty=Please select a file to upload +warehouse.stock_transfer_order.exception.import_failed=File import failed +warehouse.stock_transfer_order.exception.same_warehouse=Receiving warehouse [{0}] and source warehouse [{1}] cannot be the same +warehouse.stock_transfer_order.exception.part_not_found=Material [{0}] not found + +warehouse.warehouse_receipt.validate.form_code.not_null=Receipt number cannot be empty +warehouse.warehouse_receipt.validate.form_name.not_null=Receipt name cannot be empty +warehouse.warehouse_receipt.validate.store_no.not_null=Warehouse cannot be empty +warehouse.warehouse_receipt.validate.store_name.not_null=Warehouse name cannot be empty +warehouse.warehouse_receipt.validate.receipt_items.not_null=Receipt items cannot be empty +warehouse.warehouse_receipt.validate.part_number.not_null=Part number cannot be empty +warehouse.warehouse_receipt.validate.product_spec.not_null=Product specification cannot be empty +warehouse.warehouse_receipt.validate.product_count.not_null=Receipt quantity cannot be empty +warehouse.warehouse_receipt.validate.product_count.min=Receipt quantity must be greater than 0 +warehouse.warehouse_receipt.validate.part_id.not_null=Material ID cannot be empty +warehouse.warehouse_receipt.exception.not_found=Warehouse receipt [{0}] not found +warehouse.warehouse_receipt.exception.cannot_update_approved=Approved warehouse receipt cannot be modified +warehouse.warehouse_receipt.exception.cannot_delete_approved=Approved warehouse receipt [{0}] cannot be deleted +warehouse.warehouse_receipt.exception.cannot_delete_approved_batch=Selected data contains [{0}] approved warehouse receipts, cannot be deleted +warehouse.warehouse_receipt.exception.ids_empty=Please select warehouse receipts to delete +warehouse.warehouse_receipt.exception.already_approved=Warehouse receipt [{0}] is already approved +warehouse.warehouse_receipt.exception.no_materials=Warehouse receipt [{0}] has no items +warehouse.warehouse_receipt.exception.not_approved=Warehouse receipt [{0}] is not approved, cannot unapprove +warehouse.warehouse_receipt.exception.stock_not_found=Material [{0}] does not exist in warehouse +warehouse.warehouse_receipt.exception.insufficient_stock_for_unapprove=Material [{0}] has insufficient stock in warehouse for unapproval, current: {1}, required: {2} +warehouse.warehouse_receipt.exception.file_empty=Please select a file to upload +warehouse.warehouse_receipt.exception.import_failed=File import failed + +warehouse.inventory_count.validate.form_code.not_null=Inventory count number cannot be empty +warehouse.inventory_count.validate.form_name.not_null=Inventory count name cannot be empty +warehouse.inventory_count.validate.store_no.not_null=Warehouse ID cannot be empty +warehouse.inventory_count.validate.store_name.not_null=Warehouse name cannot be empty +warehouse.inventory_count.validate.count_items.not_null=Inventory count items cannot be empty +warehouse.inventory_count.validate.part_number.not_null=Part number cannot be empty +warehouse.inventory_count.validate.product_count.not_null=Count quantity cannot be empty +warehouse.inventory_count.validate.product_count.min=Count quantity cannot be less than 0 +warehouse.inventory_count.exception.not_found=Inventory count [{0}] not found +warehouse.inventory_count.exception.cannot_update_approved=Approved inventory count cannot be modified +warehouse.inventory_count.exception.cannot_delete_approved=Approved inventory count [{0}] cannot be deleted +warehouse.inventory_count.exception.cannot_delete_approved_batch=Selected data contains [{0}] approved inventory counts, cannot be deleted +warehouse.inventory_count.exception.ids_empty=Please select records to delete +warehouse.inventory_count.exception.already_approved=Inventory count [{0}] is already approved +warehouse.inventory_count.exception.no_items=Inventory count [{0}] has no items +warehouse.inventory_count.exception.not_approved=Inventory count [{0}] is not approved, cannot unapprove +warehouse.inventory_count.exception.stock_not_found=Material [{0}] does not exist in warehouse stock +warehouse.inventory_count.exception.stock_not_found_for_unapprove=Material [{0}] does not exist in warehouse stock, cannot unapprove +warehouse.inventory_count.exception.file_empty=File [{0}] is empty, please select a file to upload +warehouse.inventory_count.exception.import_failed=File import failed +warehouse.inventory_count.exception.init_already_exists=Initial stock record already exists for this warehouse + +# ==========>> Production Management +production.bom.validate.bom_id.not_null=BOM Id cannot be empty +production.bom.validate.bom_no.not_null=BOM number cannot be empty +production.bom.validate.bom_name.not_null=BOM name cannot be empty +production.bom.validate.manufacturer.not_null=Manufacturer / model cannot be empty +production.bom.validate.spec.not_null=Package specification cannot be empty +production.bom.validate.brand_name.not_null=Brand cannot be empty +production.bom.validate.part_number.not_null=Part number cannot be empty +production.bom.validate.manufacture_count.not_null=Quantity cannot be empty +production.bom.validate.manufacture_count.min=Quantity minimum is 1 +production.bom.validate.item_position.not_null=Position cannot be empty +production.bom.exception.duplicate_bom_name=BOM name [{0}] already exists +production.bom.exception.duplicate_bom_item=BOM has [{0}] duplicate items +production.bom.exception.unpair_position_count=Material [{0}] position count [{1}] does not match quantity [{2}] +production.bom.exception.unexists_bom_item=BOM has [{0}] non-existent materials + +production.production_plan.validate.ids.not_null=Production plan ID cannot be empty +production.production_plan.validate.issue.not_null=Issue data cannot be empty +production.production_plan.validate.form_code.not_null=Issue form number cannot be empty +production.production_plan.validate.store_no.not_null=Issue warehouse ID cannot be empty +production.production_plan.validate.store_name.not_null=Issue warehouse name cannot be empty +production.production_plan.validate.items.not_null=Issue items cannot be empty +production.production_plan.validate.part_number.not_null=Part number cannot be empty +production.production_plan.validate.product_count.not_null=Actual issue quantity cannot be empty +production.production_plan.validate.product_count.min=Actual issue quantity cannot be less than 1 +production.production_plan.validate.demand_count.not_null=Demand quantity cannot be empty +production.production_plan.validate.demand_count.min=Demand quantity cannot be less than 1 +production.production_plan.exception.must_no_complete=Selected rows include non-pending status, plan ID: {0} +production.production_plan.exception.more_than_one_warehouse=Selected rows cannot have multiple warehouses, warehouse count: {0} + +production.production_issue.exception.issue_not_exists=Issue order [{0}] does not exist +production.production_issue.exception.only_approved_can_return=Only approved issue order [{0}] can generate return order +production.production_issue.exception.no_return_items=Issue order [{0}] has no return items +production.production_issue.exception.already_returned=Issue order [{0}] has already generated return order, cannot return again +production.production_issue.exception.not_exists=Issue order [{0}] does not exist +production.production_issue.exception.already_approved=Issue order [{0}] is already approved +production.production_issue.exception.not_approved=Issue order [{0}] is not approved, cannot unapprove +production.production_issue.exception.no_items=Issue order [{0}] has no items + +production.production_return.exception.not_exist=Return order does not exist +production.production_return.exception.already_approved=Return order [{0}] is already approved +production.production_return.exception.no_material=Return order has no items +production.production_return.exception.not_approved=Return order [{0}] is not approved, cannot unapprove +production.production_return.exception.not_exists=Return order [{0}] does not exist +production.production_return.exception.no_items=Return order [{0}] has no items + +production.finished_product_receipt.validate.form_code.not_null=Form code cannot be empty +production.finished_product_receipt.validate.form_name.not_null=Form name cannot be empty +production.finished_product_receipt.validate.store_no.not_null=Warehouse cannot be empty +production.finished_product_receipt.validate.store_name.not_null=Warehouse name cannot be empty +production.finished_product_receipt.validate.module_sn_items.not_null=Finished product items cannot be empty +production.finished_product_receipt.exception.not_found=Finished product receipt [{0}] not found +production.finished_product_receipt.exception.cannot_update_approved=Approved finished product receipt [{0}] cannot be modified +production.finished_product_receipt.exception.cannot_delete_approved=Approved finished product receipt [{0}] cannot be deleted +production.finished_product_receipt.exception.cannot_delete_approved_batch=Selected data contains [{0}] approved finished product receipts, cannot be deleted +production.finished_product_receipt.exception.ids_empty=Please select finished product receipts to delete +production.finished_product_receipt.exception.already_approved=Finished product receipt [{0}] is already approved +production.finished_product_receipt.exception.not_approved=Finished product receipt [{0}] is not approved, cannot unapprove +production.finished_product_receipt.exception.no_module_sn_items=Finished product receipt [{0}] has no items +production.finished_product_receipt.exception.no_device_items=Finished product receipt [{0}] has no device items +production.finished_product_receipt.exception.duplicate_sn_in_request=Import data contains [{0}] duplicate SN numbers +production.finished_product_receipt.exception.duplicate_mac_in_request=Import data contains [{0}] duplicate MAC addresses +production.finished_product_receipt.exception.duplicate_serial_num_in_request=Import data contains [{0}] duplicate serial numbers +production.finished_product_receipt.exception.invalid_activation_status=Unactivated SN numbers exist: {0} +production.finished_product_receipt.exception.sn_already_exists=SN numbers already exist in system: {0} +production.finished_product_receipt.exception.mac_already_exists=MAC addresses already exist in system: {0} +production.finished_product_receipt.exception.serial_num_already_exists=Serial numbers already exist in system: {0} +production.finished_product_receipt.exception.cannot_unapprove_with_shipped=Finished product receipt [{0}] has been shipped, cannot unapprove +production.finished_product_receipt.exception.file_empty=Please select a file to upload +production.finished_product_receipt.exception.import_failed=File import failed +production.finished_product_receipt.exception.request_null=Request parameter is null +production.finished_product_receipt.exception.empty_outstock_list=Finished product receipt [{0}] has no outbound items +production.finished_product_receipt.exception.invalid_sn_list=Finished product receipt [{0}] has no valid SN numbers +production.finished_product_receipt.exception.invalid_key_account=Customer ID [{0}] is invalid +production.finished_product_receipt.exception.document_not_found=Document [{0}] not found + +production.finished_product_shipment.validate.form_code.not_null=Form code cannot be empty +production.finished_product_shipment.validate.form_name.not_null=Form name cannot be empty +production.finished_product_shipment.validate.store_no.not_null=Warehouse cannot be empty +production.finished_product_shipment.validate.store_name.not_null=Warehouse name cannot be empty +production.finished_product_shipment.validate.out_stock_type.not_null=Outbound type cannot be empty +production.finished_product_shipment.validate.shipment_items.not_null=Shipment items cannot be empty +production.finished_product_shipment.validate.part_number.not_blank=Part number cannot be empty +production.finished_product_shipment.validate.product_count.not_null=Quantity cannot be empty +production.finished_product_shipment.validate.dto.not_null=Shipment data cannot be empty +production.finished_product_shipment.validate.out_stock_type.not_null=Shipment [{0}] outbound type cannot be empty +production.finished_product_shipment.validate.form_name.not_null=Shipment [{0}] form name cannot be empty +production.finished_product_shipment.validate.store_no.not_null=Shipment [{0}] warehouse cannot be empty +production.finished_product_shipment.validate.part_number.not_blank=Shipment [{0}] part number cannot be empty +production.finished_product_shipment.validate.product_count.positive=Material [{0}] quantity must be greater than 0, current: {1} +production.finished_product_shipment.exception.not_found=Finished product shipment [{0}] not found +production.finished_product_shipment.exception.cannot_update_approved=Approved finished product shipment [{0}] cannot be modified +production.finished_product_shipment.exception.cannot_delete_approved=Approved finished product shipment [{0}] cannot be deleted +production.finished_product_shipment.exception.cannot_delete_approved_batch=Selected data contains [{0}] approved finished product shipments, cannot be deleted +production.finished_product_shipment.exception.ids_empty=Please select finished product shipments to delete +production.finished_product_shipment.exception.already_approved=Finished product shipment [{0}] is already approved +production.finished_product_shipment.exception.not_approved=Finished product shipment [{0}] is not approved, cannot unapprove +production.finished_product_shipment.exception.no_shipment_items=Finished product shipment [{0}] has no items +production.finished_product_shipment.exception.duplicate_part_number_in_request=Import data contains [{0}] duplicate part numbers +production.finished_product_shipment.exception.part_number_not_found=Part number [{0}] does not exist in system +production.finished_product_shipment.exception.insufficient_stock=Material [{0}] has insufficient stock, current: {1}, required: {2} +production.finished_product_shipment.exception.file_empty=Please select a file to upload +production.finished_product_shipment.exception.import_failed=File import failed + +production.devicesn.validate.product_sn.not_null=SN number cannot be empty +production.devicesn.validate.mac.not_null=MAC address cannot be empty +production.devicesn.exception.not_found=SN number not found + +production.repair_record.validate.product_sn.not_null=SN number cannot be empty +production.repair_record.validate.mac.not_null=MAC address cannot be empty +production.repair_record.validate.repair_status.not_null=Repair status cannot be empty +production.repair_record.validate.repair_mark.not_null=Repair record cannot be empty +production.repair_record.validate.identifier.not_null=At least one of SN number, MAC address, or serial number must be provided +production.repair_record.exception.not_found=Repair record not found +production.repair_record.exception.device_not_found=Device not found + +# ==========>> Sales Management +sale.sale_order.validate.form_code.not_null=Form code cannot be empty +sale.sale_order.validate.form_name.not_null=Form name cannot be empty +sale.sale_order.validate.customer_id.not_null=Customer cannot be empty +sale.sale_order.validate.customer_name.not_null=Customer name cannot be empty +sale.sale_order.validate.sale_order_items.not_null=Sale order items cannot be empty +sale.sale_order.validate.part_number.not_null=Part number cannot be empty +sale.sale_order.validate.sale_count.not_null=Sale quantity cannot be empty +sale.sale_order.validate.price.not_null=Unit price cannot be empty +sale.sale_order.exception.not_found=Sale order [{0}] not found +sale.sale_order.exception.cannot_update_approved=Approved sale order [{0}] cannot be modified +sale.sale_order.exception.cannot_delete_approved=Approved sale order [{0}] cannot be deleted +sale.sale_order.exception.cannot_delete_approved_batch=Selected data contains [{0}] approved sale orders, cannot be deleted +sale.sale_order.exception.ids_empty=Please select sale orders to delete +sale.sale_order.exception.already_approved=Sale order [{0}] is already approved +sale.sale_order.exception.not_approved=Sale order [{0}] is not approved, cannot unapprove +sale.sale_order.exception.no_sale_order_items=Sale order [{0}] has no items +sale.sale_order.exception.cannot_unapprove_with_shipped=Sale order [{0}] has [{1}] shipped items, cannot unapprove +sale.sale_order.exception.file_empty=File [{0}] is empty, please select a file to upload +sale.sale_order.exception.import_failed=File import failed + +# ==========>> Purchase Management +purchase.purchase_plan.validate.plan_no.not_null=Purchase plan number cannot be empty +purchase.purchase_plan.validate.store_no.not_null=Receiving warehouse ID cannot be empty +purchase.purchase_plan.validate.store_name.not_null=Receiving warehouse name cannot be empty +purchase.purchase_plan.validate.plan_name.not_null=Purchase plan name cannot be empty +purchase.purchase_plan.validate.part_number.not_null=Part number cannot be empty +purchase.purchase_plan.validate.part_id.not_null=Material ID cannot be empty +purchase.purchase_plan.validate.purchase_count.not_null=Purchase quantity cannot be empty +purchase.purchase_plan.validate.purchase_count.min=Purchase quantity cannot be less than 0 +purchase.purchase_plan.validate.plan_id.not_null=Purchase plan ID cannot be empty +purchase.purchase_plan.validate.vendor_id.not_null=Vendor ID cannot be empty +purchase.purchase_plan.validate.vendor_name.not_null=Vendor name cannot be empty +purchase.purchase_plan.validate.selected_items.not_null=Please select materials to purchase +purchase.purchase_plan.validate.form_code.not_null=Form code cannot be empty +purchase.purchase_plan.validate.form_name.not_null=Form name cannot be empty +purchase.purchase_plan.validate.form_mark.not_null=Form remark cannot be empty +purchase.purchase_plan.validate.total_value.not_null=Total order value cannot be empty +purchase.purchase_plan.exception.plan_not_exists=Purchase plan does not exist +purchase.purchase_plan.exception.items_already_ordered=Materials have already generated purchase orders, cannot purchase again +purchase.purchase_plan.exception.must_no_complete=Selected rows include non-pending status, plan ID: {0} +purchase.purchase_plan.exception.more_than_one_warehouse=Selected rows cannot have multiple warehouses, warehouse count: {0} + +purchase.purchase_order.validate.id.not_null=Purchase order [{0}] ID cannot be empty +purchase.purchase_order.validate.vendor_name.not_blank=Vendor name cannot be empty +purchase.purchase_order.validate.vendor_name.not_null=Vendor name cannot be empty +purchase.purchase_order.validate.items.not_empty=Order items cannot be empty +purchase.purchase_order.validate.items.not_null=Order items cannot be empty +purchase.purchase_order.validate.items.size=Order items must have at least one +purchase.purchase_order.validate.part_number.not_blank=Part number cannot be empty +purchase.purchase_order.validate.purchase_count.not_null=Purchase quantity cannot be empty +purchase.purchase_order.validate.purchase_count.min=Purchase quantity must be greater than 0 +purchase.purchase_order.validate.price.not_null=Unit price cannot be empty +purchase.purchase_order.validate.price.min=Unit price cannot be less than 0 +purchase.purchase_order.validate.order_id.not_null=Order ID cannot be empty +purchase.purchase_order.validate.store_no.not_null=Warehouse cannot be empty +purchase.purchase_order.validate.inbound_items.not_empty=Inbound items cannot be empty +purchase.purchase_order.validate.inbound_items.size=Inbound items must have at least one +purchase.purchase_order.validate.item_id.not_null=Item ID cannot be empty +purchase.purchase_order.validate.inbound_count.not_null=Inbound quantity cannot be empty +purchase.purchase_order.validate.inbound_count.min=Inbound quantity must be greater than 0 +purchase.purchase_order.exception.order_not_exists=Purchase order [{0}] does not exist +purchase.purchase_order.exception.order_already_completed=Purchase order [{0}] is already completed +purchase.purchase_order.exception.item_not_exists=Order item [{0}] does not exist +purchase.purchase_order.exception.inbound_count_exceed=Material [{0}] inbound quantity exceeds remaining quantity, remaining: {1}, inbound: {2} +purchase.purchase_order.exception.order_has_inbound=Purchase order [{0}] has inbound records, cannot be deleted + +sys.operationType.codeNotExists=Code does not exist + +# ==========> Type +loginName.notNull=Login name cannot be empty +password.notNull=Password cannot be empty + +# ==========> Parameter Error Messages +httpMessage.notNull=Parameter cannot be empty +validated.error=Parameter error diff --git a/src/main/resources/i18n/messages_zh_CN.properties b/src/main/resources/i18n/messages_zh_CN.properties index c040865..c51f262 100644 --- a/src/main/resources/i18n/messages_zh_CN.properties +++ b/src/main/resources/i18n/messages_zh_CN.properties @@ -47,7 +47,7 @@ warehouse.stock_transfer_order.exception.cannot_delete_approved_batch=选中的 warehouse.stock_transfer_order.exception.ids_empty=请选择要删除的调拨单 warehouse.stock_transfer_order.exception.already_approved=调拨单已经审核 warehouse.stock_transfer_order.exception.no_materials=调拨单没有明细 -warehouse.stock_transfer_order.exception.insufficient_stock=物料 {0} 库存不足 +warehouse.stock_transfer_order.exception.insufficient_stock=物料 {0} 库存不足,当前库存: {1},需要: {2} warehouse.stock_transfer_order.exception.not_approved=调拨单不是已审核状态,不能反审 warehouse.stock_transfer_order.exception.stock_not_found=物料 {0} 在入库仓库中不存在 warehouse.stock_transfer_order.exception.insufficient_stock_for_unapprove=物料 {0} 在入库仓库中库存不足,无法反审 @@ -198,7 +198,142 @@ sys.sysuser.validate.user_type.not_null=用户类型不能为空 sys.sysuser.validate.login_name.not_null=登录账号不能为空 sys.sysuser.validate.user_name.not_null=姓名不能为空 sys.sysuser.validate.password.not_null=密码不能为空 -sys.sysuser.validate.password.not_match=两次输入的密码不一致 +sys.sysuser.validate.password.not_match=用户 [{0}] 两次输入的密码不一致 sys.sysuser.validate.role_ids.not_null=请至少选择一个角色 -sys.sysuser.exception.not_exists=用户不存在 -sys.sysuser.exception.login_name_exists=登录账号已存在 +sys.sysuser.exception.not_exists=用户 [{0}] 不存在 +sys.sysuser.exception.login_name_exists=登录账号 [{0}] 已存在 + +# 生产发料异常 +production.production_issue.exception.not_exists=发料单 [{0}] 不存在 +production.production_issue.exception.already_approved=发料单 [{0}] 已经审核 +production.production_issue.exception.not_approved=发料单 [{0}] 不是已审核状态,不能反审 +production.production_issue.exception.no_items=发料单 [{0}] 没有明细 + +# 生产退料异常 +production.production_return.exception.not_exists=退料单 [{0}] 不存在 +production.production_return.exception.already_approved=退料单 [{0}] 已经审核 +production.production_return.exception.not_approved=退料单 [{0}] 不是已审核状态,不能反审 +production.production_return.exception.no_items=退料单 [{0}] 没有明细 + +# 成品入库异常(带参数) +production.finished_product_receipt.exception.not_found=成品入库单 [{0}] 不存在 +production.finished_product_receipt.exception.cannot_delete_approved=已审核的成品入库单 [{0}] 不能删除 +production.finished_product_receipt.exception.cannot_delete_approved_batch=选中的数据中存在 [{0}] 条已审核的成品入库单,不能删除 +production.finished_product_receipt.exception.ids_empty=请选择要删除的成品入库单 +production.finished_product_receipt.exception.request_null=请求参数为空 +production.finished_product_receipt.exception.empty_outstock_list=成品入库单 [{0}] 没有出库明细 +production.finished_product_receipt.exception.invalid_sn_list=成品入库单 [{0}] 没有有效的SN号 +production.finished_product_receipt.exception.invalid_key_account=客户ID [{0}] 无效 +production.finished_product_receipt.exception.document_not_found=单据 [{0}] 不存在 + +# 成品出库异常(带参数) +production.finished_product_shipment.exception.not_found=成品出库单 [{0}] 不存在 +production.finished_product_shipment.exception.cannot_delete_approved=已审核的成品出库单 [{0}] 不能删除 +production.finished_product_shipment.exception.cannot_delete_approved_batch=选中的数据中存在 [{0}] 条已审核的成品出库单,不能删除 +production.finished_product_shipment.exception.already_approved=成品出库单 [{0}] 已经审核 +production.finished_product_shipment.exception.not_approved=成品出库单 [{0}] 不是已审核状态,不能反审 +production.finished_product_shipment.exception.no_shipment_items=成品出库单 [{0}] 没有明细 + +# 销售订单异常(带参数) +sale.sale_order.exception.not_found=销售订单 [{0}] 不存在 +sale.sale_order.exception.cannot_delete_approved=已审核的销售订单 [{0}] 不能删除 +sale.sale_order.exception.cannot_delete_approved_batch=选中的数据中存在 [{0}] 条已审核的销售订单,不能删除 +sale.sale_order.exception.already_approved=销售订单 [{0}] 已经审核 +sale.sale_order.exception.not_approved=销售订单 [{0}] 不是已审核状态,不能反审 +sale.sale_order.exception.no_sale_order_items=销售订单 [{0}] 没有明细 +sale.sale_order.exception.cannot_unapprove_with_shipped=销售订单 [{0}] 已出货 [{1}] 条,不能反审 + +# 采购订单异常(带参数) +purchase.purchase_order.exception.order_not_exists=采购订单 [{0}] 不存在 +purchase.purchase_order.exception.order_has_inbound=采购订单 [{0}] 已入库,不能删除 +purchase.purchase_order.exception.order_already_completed=采购订单 [{0}] 已完成 +purchase.purchase_order.exception.item_not_exists=订单明细 [{0}] 不存在 +purchase.purchase_order.exception.inbound_count_exceed=物料 [{0}] 入库数量超过剩余待入库量,剩余: {1},入库: {2} + +# 库存盘点异常(带参数) +warehouse.inventory_count.exception.not_found=盘点单 [{0}] 不存在 +warehouse.inventory_count.exception.cannot_delete_approved=已审核的盘点单 [{0}] 不能删除 +warehouse.inventory_count.exception.cannot_delete_approved_batch=选中的数据中存在 [{0}] 条已审核的盘点单,不能删除 +warehouse.inventory_count.exception.already_approved=盘点单 [{0}] 已经审核 +warehouse.inventory_count.exception.not_approved=盘点单 [{0}] 不是已审核状态,不能反审 +warehouse.inventory_count.exception.no_items=盘点单 [{0}] 没有明细 + +# 入库单异常(带参数) +warehouse.warehouse_receipt.exception.not_found=入库单 [{0}] 不存在 +warehouse.warehouse_receipt.exception.cannot_delete_approved=已审核的入库单 [{0}] 不能删除 +warehouse.warehouse_receipt.exception.cannot_delete_approved_batch=选中的数据中存在 [{0}] 条已审核的入库单,不能删除 +warehouse.warehouse_receipt.exception.already_approved=入库单 [{0}] 已经审核 +warehouse.warehouse_receipt.exception.not_approved=入库单 [{0}] 不是已审核状态,不能反审 +warehouse.warehouse_receipt.exception.no_materials=入库单 [{0}] 没有明细 + +# 调拨单异常(带参数) +warehouse.stock_transfer_order.exception.not_found=调拨单 [{0}] 不存在 +warehouse.stock_transfer_order.exception.cannot_delete_approved=已审核的调拨单 [{0}] 不能删除 +warehouse.stock_transfer_order.exception.cannot_delete_approved_batch=选中的数据中存在 [{0}] 条已审核的调拨单,不能删除 +warehouse.stock_transfer_order.exception.already_approved=调拨单 [{0}] 已经审核 +warehouse.stock_transfer_order.exception.not_approved=调拨单 [{0}] 不是已审核状态,不能反审 +warehouse.stock_transfer_order.exception.no_materials=调拨单 [{0}] 没有明细 + +# 物料异常(带参数) +warehouse.warehouse_item.exception.not_found=物料 [{0}] 不存在 +warehouse.warehouse_item.exception.vendor_duplicate=供应商 [{0}] 不能重复 + +# 生产计划异常(带参数) +production.production_plan.exception.must_no_complete=选中的行其中有不是未完成的状态,计划ID: {0} +production.production_plan.exception.more_than_one_warehouse=选中的行不能有多个仓库,仓库数量: {0} + +# BOM异常(带参数) +production.bom.exception.duplicate_bom_name=BOM名称 [{0}] 已存在 +production.bom.exception.duplicate_bom_item=BOM明细存在 [{0}] 条重复项 +production.bom.exception.unpair_position_count=物料 [{0}] 位号数量 [{1}] 与用量 [{2}] 不一致 +production.bom.exception.unexists_bom_item=BOM物料中有 [{0}] 条不存在 + +# 成品入库明细异常(带参数) +production.finished_product_receipt.exception.no_device_items=成品入库单 [{0}] 没有设备明细 +production.finished_product_receipt.exception.duplicate_sn_in_request=导入数据中存在 [{0}] 条重复SN号 +production.finished_product_receipt.exception.duplicate_mac_in_request=导入数据中存在 [{0}] 条重复MAC地址 +production.finished_product_receipt.exception.duplicate_serial_num_in_request=导入数据中存在 [{0}] 条重复序列号 + +# 成品出库明细异常(带参数) +production.finished_product_shipment.exception.no_shipment_items=成品出库单 [{0}] 没有出库明细 +production.finished_product_shipment.exception.duplicate_part_number_in_request=导入数据中存在 [{0}] 条重复物料编号 +production.finished_product_shipment.exception.part_number_not_found=物料编号 [{0}] 在系统中不存在 +production.finished_product_shipment.exception.insufficient_stock=物料 [{0}] 库存不足,当前库存: {1},需要: {2} +production.finished_product_shipment.validate.product_count.positive=物料 [{0}] 数量必须大于0,当前: {1} + +# 调拨单验证异常(带参数) +warehouse.stock_transfer_order.exception.id_required=调拨单ID不能为空,单据编号: {0} +warehouse.stock_transfer_order.exception.same_warehouse=入库仓库 [{0}] 和出库仓库 [{1}] 不能相同 +warehouse.stock_transfer_order.exception.part_not_found=物料 [{0}] 不存在 +warehouse.stock_transfer_order.exception.insufficient_stock_for_unapprove=物料 [{0}] 在入库仓库中库存不足,当前库存: {1},需要: {2} + +# 销售订单验证异常(带参数) +sale.sale_order.exception.ids_empty=请选择要删除的销售订单 +sale.sale_order.exception.file_empty=文件 [{0}] 为空,请选择要上传的文件 + +# 库存盘点验证异常(带参数) +warehouse.inventory_count.exception.ids_empty=请选择要删除的盘点单 +warehouse.inventory_count.exception.file_empty=文件 [{0}] 为空,请选择要上传的文件 + +# 入库单验证异常(带参数) +warehouse.warehouse_receipt.exception.ids_empty=请选择要删除的入库单 + +# 调拨单验证异常(带参数) +warehouse.stock_transfer_order.exception.ids_empty=请选择要删除的调拨单 + +# 成品入库验证异常(带参数) +production.finished_product_receipt.exception.ids_empty=请选择要删除的成品入库单 + +# 成品出库验证异常(带参数) +production.finished_product_shipment.validate.dto.not_null=出库单数据不能为空 +production.finished_product_shipment.validate.out_stock_type.not_null=出库单 [{0}] 出库类型不能为空 +production.finished_product_shipment.validate.form_code.not_null=出库单单据编号不能为空 +production.finished_product_shipment.validate.form_name.not_null=出库单 [{0}] 单据名称不能为空 +production.finished_product_shipment.validate.store_no.not_null=出库单 [{0}] 仓库不能为空 +production.finished_product_shipment.validate.part_number.not_blank=出库单 [{0}] 物料编号不能为空 + +# 采购订单验证异常(带参数) +purchase.purchase_order.validate.id.not_null=采购订单 [{0}] ID不能为空 + +# 系统用户验证异常(带参数) +sys.sysuser.validate.password.not_null=用户 [{0}] 密码不能为空