异常处理改成能带参数。
This commit is contained in:
@@ -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;
|
||||
}
|
||||
}
|
||||
|
||||
@@ -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;
|
||||
}
|
||||
}
|
||||
|
||||
@@ -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()));
|
||||
// }
|
||||
|
||||
@@ -72,21 +72,23 @@ public class BomServiceImpl extends ServiceImpl<BomMapper, Bom> implements BomSe
|
||||
// 检验数据
|
||||
var searchBomNameWrapper = new LambdaQueryWrapper<Bom>().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<BomItemAddDto> items = dto.bomItems();
|
||||
List<String> 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<WarehouseItem>().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
|
||||
|
||||
@@ -60,7 +60,7 @@ public class FinishedProductReceiptServiceImpl extends ServiceImpl<DocumentMappe
|
||||
List<DeviceAddDto> 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<String> snList = deviceItems.stream()
|
||||
@@ -69,7 +69,8 @@ public class FinishedProductReceiptServiceImpl extends ServiceImpl<DocumentMappe
|
||||
|
||||
Set<String> 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<String> macList = deviceItems.stream()
|
||||
@@ -80,7 +81,8 @@ public class FinishedProductReceiptServiceImpl extends ServiceImpl<DocumentMappe
|
||||
if (!macList.isEmpty()) {
|
||||
Set<String> 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<DocumentMappe
|
||||
if (!serialNumList.isEmpty()) {
|
||||
Set<String> 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<String> 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<Device> snWrapper = new LambdaQueryWrapper<>();
|
||||
@@ -114,11 +118,11 @@ public class FinishedProductReceiptServiceImpl extends ServiceImpl<DocumentMappe
|
||||
|
||||
List<String> 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<DocumentMappe
|
||||
|
||||
List<String> 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<DocumentMappe
|
||||
|
||||
List<String> 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<DocumentMappe
|
||||
public void updateFinishedProductReceipt(FinishedProductReceiptDto dto) {
|
||||
Document existingEntity = this.baseMapper.selectById(dto.id());
|
||||
if (existingEntity == null) {
|
||||
throw new BusinessException("production.finished_product_receipt.exception.not_found");
|
||||
throw new BusinessException("production.finished_product_receipt.exception.not_found", dto.id());
|
||||
}
|
||||
if (existingEntity.getFormStatus() == FormStatus.APPROVE) {
|
||||
throw new BusinessException("production.finished_product_receipt.exception.cannot_update_approved");
|
||||
throw new BusinessException("production.finished_product_receipt.exception.cannot_update_approved", dto.id());
|
||||
}
|
||||
|
||||
Document entity = finishedProductReceiptConverter.toEntity(dto);
|
||||
@@ -207,10 +211,10 @@ public class FinishedProductReceiptServiceImpl extends ServiceImpl<DocumentMappe
|
||||
public void deleteFinishedProductReceipt(long id) {
|
||||
Document existingEntity = this.baseMapper.selectById(id);
|
||||
if (existingEntity == null) {
|
||||
throw new BusinessException("production.finished_product_receipt.exception.not_found");
|
||||
throw new BusinessException("production.finished_product_receipt.exception.not_found", id);
|
||||
}
|
||||
if (existingEntity.getFormStatus() == FormStatus.APPROVE) {
|
||||
throw new BusinessException("production.finished_product_receipt.exception.cannot_delete_approved");
|
||||
throw new BusinessException("production.finished_product_receipt.exception.cannot_delete_approved", id);
|
||||
}
|
||||
|
||||
LambdaQueryWrapper<Device> wrapper = new LambdaQueryWrapper<>();
|
||||
@@ -223,14 +227,17 @@ public class FinishedProductReceiptServiceImpl extends ServiceImpl<DocumentMappe
|
||||
@Override
|
||||
public void deleteBatch(List<Long> 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<Document> 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<DocumentMappe
|
||||
@Override
|
||||
public void saveOutstock(DeviceOutstockRequest request) {
|
||||
if (request == null) {
|
||||
throw new BusinessException("production.finished_product_receipt.exception.request_null");
|
||||
throw new BusinessException("production.finished_product_receipt.exception.request_null", "null");
|
||||
}
|
||||
|
||||
if (request.keyAccountId() <= 0) {
|
||||
throw new BusinessException("production.finished_product_receipt.exception.invalid_key_account");
|
||||
throw new BusinessException("production.finished_product_receipt.exception.invalid_key_account", request.keyAccountId());
|
||||
}
|
||||
|
||||
if (request.outstockList() == null || request.outstockList().isEmpty()) {
|
||||
throw new BusinessException("production.finished_product_receipt.exception.empty_outstock_list");
|
||||
throw new BusinessException("production.finished_product_receipt.exception.empty_outstock_list", request.id());
|
||||
}
|
||||
|
||||
// 提取有效SN列表
|
||||
@@ -285,18 +292,18 @@ public class FinishedProductReceiptServiceImpl extends ServiceImpl<DocumentMappe
|
||||
.toList();
|
||||
|
||||
if (validSnList.isEmpty()) {
|
||||
throw new BusinessException("production.finished_product_receipt.exception.invalid_sn_list");
|
||||
throw new BusinessException("production.finished_product_receipt.exception.invalid_sn_list", request.id());
|
||||
}
|
||||
|
||||
// 检查单据是否存在
|
||||
Document document = this.baseMapper.selectById(request.id());
|
||||
if (document == null) {
|
||||
throw new BusinessException("production.finished_product_receipt.exception.document_not_found");
|
||||
throw new BusinessException("production.finished_product_receipt.exception.document_not_found", request.id());
|
||||
}
|
||||
|
||||
// 检查单据状态
|
||||
if (document.getFormStatus() != FormStatus.APPROVE) {
|
||||
throw new BusinessException("production.finished_product_receipt.exception.document_not_approved");
|
||||
throw new BusinessException("production.finished_product_receipt.exception.document_not_approved", request.id());
|
||||
}
|
||||
|
||||
// 使用事务处理出货操作
|
||||
@@ -315,7 +322,7 @@ public class FinishedProductReceiptServiceImpl extends ServiceImpl<DocumentMappe
|
||||
int updatedCount = deviceMapper.update(null, updateWrapper);
|
||||
|
||||
if (updatedCount == 0) {
|
||||
throw new BusinessException("production.finished_product_receipt.exception.no_device_updated");
|
||||
throw new BusinessException("production.finished_product_receipt.exception.no_device_updated", request.id());
|
||||
}
|
||||
|
||||
// 检查是否所有设备都已出货
|
||||
@@ -336,8 +343,10 @@ public class FinishedProductReceiptServiceImpl extends ServiceImpl<DocumentMappe
|
||||
document.setUpdateUserId(SecurityUtils.getUserId());
|
||||
document.setUpdateUserName(SecurityUtils.getUserName());
|
||||
this.baseMapper.updateById(document);
|
||||
} catch (BusinessException e) {
|
||||
throw e;
|
||||
} catch (Exception e) {
|
||||
throw new BusinessException("production.finished_product_receipt.exception.outstock_failed");
|
||||
throw new BusinessException("production.finished_product_receipt.exception.outstock_failed", request.id(), e.getMessage());
|
||||
}
|
||||
}
|
||||
}
|
||||
|
||||
@@ -66,31 +66,32 @@ public class FinishedProductShipmentServiceImpl extends ServiceImpl<DocumentMapp
|
||||
throw new BusinessException("production.finished_product_shipment.validate.dto.not_null");
|
||||
}
|
||||
if (dto.outStockType() == null) {
|
||||
throw new BusinessException("production.finished_product_shipment.validate.out_stock_type.not_null");
|
||||
throw new BusinessException("production.finished_product_shipment.validate.out_stock_type.not_null", dto.formCode());
|
||||
}
|
||||
if (!StringUtils.hasText(dto.formCode())) {
|
||||
throw new BusinessException("production.finished_product_shipment.validate.form_code.not_null");
|
||||
throw new BusinessException("production.finished_product_shipment.validate.form_code.not_null", dto.formName());
|
||||
}
|
||||
if (!StringUtils.hasText(dto.formName())) {
|
||||
throw new BusinessException("production.finished_product_shipment.validate.form_name.not_null");
|
||||
throw new BusinessException("production.finished_product_shipment.validate.form_name.not_null", dto.formCode());
|
||||
}
|
||||
if (dto.storeNo() == null) {
|
||||
throw new BusinessException("production.finished_product_shipment.validate.store_no.not_null");
|
||||
throw new BusinessException("production.finished_product_shipment.validate.store_no.not_null", dto.formCode());
|
||||
}
|
||||
|
||||
List<FinishedProductShipmentItemDto> 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<DocumentMapp
|
||||
.toList();
|
||||
|
||||
if (partNumberList.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());
|
||||
}
|
||||
|
||||
Set<String> 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<WarehouseItem> itemWrapper = new LambdaQueryWrapper<>();
|
||||
@@ -117,11 +119,11 @@ public class FinishedProductShipmentServiceImpl extends ServiceImpl<DocumentMapp
|
||||
|
||||
List<String> 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<DocumentMapp
|
||||
public void updateFinishedProductShipment(FinishedProductShipmentDto dto) {
|
||||
Document existingEntity = this.baseMapper.selectById(dto.id());
|
||||
if (existingEntity == null) {
|
||||
throw new BusinessException("production.finished_product_shipment.exception.not_found");
|
||||
throw new BusinessException("production.finished_product_shipment.exception.not_found", dto.id());
|
||||
}
|
||||
if (existingEntity.getFormStatus() == FormStatus.APPROVE) {
|
||||
throw new BusinessException("production.finished_product_shipment.exception.cannot_update_approved");
|
||||
throw new BusinessException("production.finished_product_shipment.exception.cannot_update_approved", dto.id());
|
||||
}
|
||||
|
||||
Document entity = finishedProductShipmentConverter.toEntity(dto);
|
||||
@@ -177,10 +179,10 @@ public class FinishedProductShipmentServiceImpl extends ServiceImpl<DocumentMapp
|
||||
public void deleteFinishedProductShipment(long id) {
|
||||
Document entity = this.baseMapper.selectById(id);
|
||||
if (entity == null) {
|
||||
throw new BusinessException("production.finished_product_shipment.exception.not_found");
|
||||
throw new BusinessException("production.finished_product_shipment.exception.not_found", id);
|
||||
}
|
||||
if (entity.getFormStatus() == FormStatus.APPROVE) {
|
||||
throw new BusinessException("production.finished_product_shipment.exception.cannot_delete_approved");
|
||||
throw new BusinessException("production.finished_product_shipment.exception.cannot_delete_approved", id);
|
||||
}
|
||||
|
||||
this.baseMapper.deleteById(id);
|
||||
@@ -194,17 +196,17 @@ public class FinishedProductShipmentServiceImpl extends ServiceImpl<DocumentMapp
|
||||
public void approve(long id) {
|
||||
Document entity = this.baseMapper.selectById(id);
|
||||
if (entity == null) {
|
||||
throw new BusinessException("production.finished_product_shipment.exception.not_found");
|
||||
throw new BusinessException("production.finished_product_shipment.exception.not_found", id);
|
||||
}
|
||||
if (entity.getFormStatus() == FormStatus.APPROVE) {
|
||||
throw new BusinessException("production.finished_product_shipment.exception.already_approved");
|
||||
throw new BusinessException("production.finished_product_shipment.exception.already_approved", id);
|
||||
}
|
||||
|
||||
LambdaQueryWrapper<DocumentMaterial> itemWrapper = new LambdaQueryWrapper<>();
|
||||
itemWrapper.eq(DocumentMaterial::getDocumentNo, id);
|
||||
List<DocumentMaterial> 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<DocumentMapp
|
||||
for (DocumentMaterial item : items) {
|
||||
Stock stock = stockMap.get(item.getPartNumber());
|
||||
if (stock == null || stock.getProductCount() < item.getProductCount()) {
|
||||
throw new BusinessException("production.finished_product_shipment.exception.insufficient_stock");
|
||||
throw new BusinessException("production.finished_product_shipment.exception.insufficient_stock",
|
||||
item.getPartNumber(),
|
||||
stock != null ? stock.getProductCount() : 0,
|
||||
item.getProductCount());
|
||||
}
|
||||
}
|
||||
|
||||
@@ -247,10 +252,10 @@ public class FinishedProductShipmentServiceImpl extends ServiceImpl<DocumentMapp
|
||||
public void unapprove(long id) {
|
||||
Document entity = this.baseMapper.selectById(id);
|
||||
if (entity == null) {
|
||||
throw new BusinessException("production.finished_product_shipment.exception.not_found");
|
||||
throw new BusinessException("production.finished_product_shipment.exception.not_found", id);
|
||||
}
|
||||
if (entity.getFormStatus() != FormStatus.APPROVE) {
|
||||
throw new BusinessException("production.finished_product_shipment.exception.not_approved");
|
||||
throw new BusinessException("production.finished_product_shipment.exception.not_approved", id);
|
||||
}
|
||||
|
||||
LambdaQueryWrapper<DocumentMaterial> itemWrapper = new LambdaQueryWrapper<>();
|
||||
|
||||
@@ -127,10 +127,10 @@ public class ProductionIssueServiceImpl extends ServiceImpl<DocumentMapper, Docu
|
||||
public void approvingProductionIssue(long id) {
|
||||
Document issue = this.baseMapper.selectById(id);
|
||||
if (Objects.isNull(issue)) {
|
||||
throw new BusinessException("没有发料单");
|
||||
throw new BusinessException("production.production_issue.exception.not_exists", id);
|
||||
}
|
||||
if (!issue.getFormStatus().equals(FormStatus.NO_APPROVE)) {
|
||||
throw new BusinessException("已审核");
|
||||
throw new BusinessException("production.production_issue.exception.already_approved", id);
|
||||
}
|
||||
List<DocumentMaterial> materials = documentMaterialMapper
|
||||
.selectList(new LambdaQueryWrapper<DocumentMaterial>().eq(DocumentMaterial::getDocumentNo, issue.getId()));
|
||||
@@ -160,10 +160,10 @@ public class ProductionIssueServiceImpl extends ServiceImpl<DocumentMapper, Docu
|
||||
public void rejectProductionIssue(long id) {
|
||||
Document issue = this.baseMapper.selectById(id);
|
||||
if (Objects.isNull(issue)) {
|
||||
throw new BusinessException("没有发料单");
|
||||
throw new BusinessException("production.production_issue.exception.not_exists", id);
|
||||
}
|
||||
if (!issue.getFormStatus().equals(FormStatus.APPROVE)) {
|
||||
throw new BusinessException("已审核");
|
||||
throw new BusinessException("production.production_issue.exception.not_approved", id);
|
||||
}
|
||||
List<DocumentMaterial> materials = documentMaterialMapper
|
||||
.selectList(new LambdaQueryWrapper<DocumentMaterial>().eq(DocumentMaterial::getDocumentNo, issue.getId()));
|
||||
@@ -194,19 +194,19 @@ public class ProductionIssueServiceImpl extends ServiceImpl<DocumentMapper, Docu
|
||||
// 获取发料单
|
||||
Document issue = this.baseMapper.selectById(id);
|
||||
if (Objects.isNull(issue)) {
|
||||
throw new BusinessException("没有发料单");
|
||||
throw new BusinessException("production.production_issue.exception.not_exists", id);
|
||||
}
|
||||
|
||||
// 检查发料单状态,只有审核通过的才能生成退料单
|
||||
if (!issue.getFormStatus().equals(FormStatus.APPROVE)) {
|
||||
throw new BusinessException("只有审核通过的发料单才能生成退料单");
|
||||
throw new BusinessException("production.production_issue.exception.only_approved_can_return", id);
|
||||
}
|
||||
|
||||
// 获取发料单明细
|
||||
List<DocumentMaterial> materials = documentMaterialMapper
|
||||
.selectList(new LambdaQueryWrapper<DocumentMaterial>().eq(DocumentMaterial::getDocumentNo, issue.getId()));
|
||||
if (materials == null || materials.isEmpty()) {
|
||||
throw new BusinessException("发料单没有明细");
|
||||
throw new BusinessException("production.production_issue.exception.no_items", id);
|
||||
}
|
||||
|
||||
// 创建退料单
|
||||
|
||||
@@ -231,11 +231,12 @@ public class ProductionPlanServiceImpl extends ServiceImpl<ProductionPlanMapper,
|
||||
.selectList(new LambdaQueryWrapper<ProductionPlan>().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());
|
||||
|
||||
@@ -90,15 +90,15 @@ public class ProductionReturnServiceImpl extends ServiceImpl<DocumentMapper, Doc
|
||||
public void createProductionReturn(Long issueId, ProductionIssueAddDto dto) {
|
||||
Document issue = this.baseMapper.selectById(issueId);
|
||||
if (Objects.isNull(issue)) {
|
||||
throw new BusinessException("production.production_issue.exception.issue_not_exists");
|
||||
throw new BusinessException("production.production_issue.exception.issue_not_exists", issueId);
|
||||
}
|
||||
|
||||
if (!issue.getFormStatus().equals(FormStatus.APPROVE)) {
|
||||
throw new BusinessException("production.production_issue.exception.only_approved_can_return");
|
||||
throw new BusinessException("production.production_issue.exception.only_approved_can_return", issueId);
|
||||
}
|
||||
|
||||
if (dto.items() == null || dto.items().isEmpty()) {
|
||||
throw new BusinessException("production.production_issue.exception.no_return_items");
|
||||
throw new BusinessException("production.production_issue.exception.no_return_items", issueId);
|
||||
}
|
||||
|
||||
// 使用Converter转换主表信息
|
||||
@@ -148,17 +148,17 @@ public class ProductionReturnServiceImpl extends ServiceImpl<DocumentMapper, Doc
|
||||
// 获取退料单
|
||||
Document returnDoc = this.baseMapper.selectById(id);
|
||||
if (Objects.isNull(returnDoc)) {
|
||||
throw new BusinessException("退料单不存在");
|
||||
throw new BusinessException("production.production_return.exception.not_exists", id);
|
||||
}
|
||||
if (!returnDoc.getFormStatus().equals(FormStatus.NO_APPROVE)) {
|
||||
throw new BusinessException("退料单已经审核");
|
||||
throw new BusinessException("production.production_return.exception.already_approved", id);
|
||||
}
|
||||
|
||||
// 获取退料单明细
|
||||
List<DocumentMaterial> materials = documentMaterialMapper
|
||||
.selectList(new LambdaQueryWrapper<DocumentMaterial>().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<DocumentMapper, Doc
|
||||
// 获取退料单
|
||||
Document returnDoc = this.baseMapper.selectById(id);
|
||||
if (Objects.isNull(returnDoc)) {
|
||||
throw new BusinessException("退料单不存在");
|
||||
throw new BusinessException("production.production_return.exception.not_exists", id);
|
||||
}
|
||||
if (!returnDoc.getFormStatus().equals(FormStatus.APPROVE)) {
|
||||
throw new BusinessException("退料单不是已审核状态,不能反审");
|
||||
throw new BusinessException("production.production_return.exception.not_approved", id);
|
||||
}
|
||||
|
||||
// 获取退料单明细
|
||||
List<DocumentMaterial> materials = documentMaterialMapper
|
||||
.selectList(new LambdaQueryWrapper<DocumentMaterial>().eq(DocumentMaterial::getDocumentNo, returnDoc.getId()));
|
||||
if (materials == null || materials.isEmpty()) {
|
||||
throw new BusinessException("退料单没有明细");
|
||||
throw new BusinessException("production.production_return.exception.no_items", id);
|
||||
}
|
||||
|
||||
// 更新库存
|
||||
|
||||
@@ -117,12 +117,12 @@ public class PurchaseOrderServiceImpl extends ServiceImpl<DocumentMapper, Docume
|
||||
@Override
|
||||
public void updatePurchaseOrder(PurchaseOrderAddDto dto) {
|
||||
if (dto.id() == null) {
|
||||
throw new BusinessException("purchase.purchase_order.validate.id.not_null");
|
||||
throw new BusinessException("purchase.purchase_order.validate.id.not_null", dto.vendorName());
|
||||
}
|
||||
|
||||
Document entity = this.baseMapper.selectById(dto.id());
|
||||
if (entity == null) {
|
||||
throw new BusinessException("purchase.purchase_order.exception.order_not_exists");
|
||||
throw new BusinessException("purchase.purchase_order.exception.order_not_exists", dto.id());
|
||||
}
|
||||
|
||||
entity.setVendorName(dto.vendorName());
|
||||
@@ -174,7 +174,7 @@ public class PurchaseOrderServiceImpl extends ServiceImpl<DocumentMapper, Docume
|
||||
public void deletePurchaseOrder(long id) {
|
||||
Document order = this.baseMapper.selectById(id);
|
||||
if (order == null) {
|
||||
throw new BusinessException("purchase.purchase_order.exception.order_not_exists");
|
||||
throw new BusinessException("purchase.purchase_order.exception.order_not_exists", id);
|
||||
}
|
||||
|
||||
List<PurchaseOrderItem> items = purchaseOrderItemMapper.selectList(
|
||||
@@ -185,7 +185,7 @@ public class PurchaseOrderServiceImpl extends ServiceImpl<DocumentMapper, Docume
|
||||
boolean hasInbound = items.stream()
|
||||
.anyMatch(item -> 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<DocumentMapper, Docume
|
||||
public void inbound(PurchaseOrderInboundDto dto) {
|
||||
Document order = this.baseMapper.selectById(dto.orderId());
|
||||
if (order == null) {
|
||||
throw new BusinessException("purchase.purchase_order.exception.order_not_exists");
|
||||
throw new BusinessException("purchase.purchase_order.exception.order_not_exists", dto.orderId());
|
||||
}
|
||||
|
||||
if (order.getFormStatus() == FormStatus.COMPLETE) {
|
||||
throw new BusinessException("purchase.purchase_order.exception.order_already_completed");
|
||||
throw new BusinessException("purchase.purchase_order.exception.order_already_completed", dto.orderId());
|
||||
}
|
||||
|
||||
List<PurchaseOrderItem> items = purchaseOrderItemMapper.selectList(
|
||||
@@ -279,14 +279,15 @@ public class PurchaseOrderServiceImpl extends ServiceImpl<DocumentMapper, Docume
|
||||
for (PurchaseOrderInboundItemDto inboundItem : dto.items()) {
|
||||
PurchaseOrderItem item = itemMap.get(inboundItem.itemId());
|
||||
if (item == null) {
|
||||
throw new BusinessException("purchase.purchase_order.exception.item_not_exists");
|
||||
throw new BusinessException("purchase.purchase_order.exception.item_not_exists", inboundItem.itemId());
|
||||
}
|
||||
|
||||
int currentReceiptCount = item.getReceiptCount() != null ? item.getReceiptCount() : 0;
|
||||
int remaining = item.getPurchaseCount() - currentReceiptCount;
|
||||
|
||||
if (inboundItem.inboundCount() > 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());
|
||||
|
||||
@@ -118,10 +118,10 @@ public class SaleOrderServiceImpl extends ServiceImpl<DocumentMapper, Document>
|
||||
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<DocumentMapper, Document>
|
||||
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<DocumentMapper, Document>
|
||||
@Override
|
||||
public void deleteBatch(List<Long> 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<Document> wrapper = new LambdaQueryWrapper<>();
|
||||
@@ -196,7 +196,7 @@ public class SaleOrderServiceImpl extends ServiceImpl<DocumentMapper, Document>
|
||||
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<DocumentMapper, Document>
|
||||
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<SaleOrderItem> itemWrapper = new LambdaQueryWrapper<>();
|
||||
itemWrapper.eq(SaleOrderItem::getDocumentNo, id);
|
||||
List<SaleOrderItem> 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<DocumentMapper, Document>
|
||||
}
|
||||
|
||||
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<DocumentMapper, Document>
|
||||
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<SaleOrderItem> itemWrapper = new LambdaQueryWrapper<>();
|
||||
@@ -301,7 +302,7 @@ public class SaleOrderServiceImpl extends ServiceImpl<DocumentMapper, Document>
|
||||
.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<DocumentMapper, Document>
|
||||
}
|
||||
|
||||
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<DocumentMapper, Document>
|
||||
@Override
|
||||
public List<SaleOrderItemDto> 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<DocumentMapper, Document>
|
||||
|
||||
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());
|
||||
}
|
||||
}
|
||||
|
||||
|
||||
@@ -123,10 +123,10 @@ public class SysUserServiceImpl extends ServiceImpl<SysUserMapper, SysUser> 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<SysUserMapper, SysUser> 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<SysUserMapper, SysUser> 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<SysUserMapper, SysUser> 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<SysUserMapper, SysUser> 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);
|
||||
}
|
||||
}
|
||||
|
||||
|
||||
@@ -65,7 +65,7 @@ public class InventoryCountServiceImpl extends ServiceImpl<DocumentMapper, Docum
|
||||
.eq(Document::getReserve1, 1);
|
||||
Document existingInit = this.baseMapper.selectOne(initWrapper);
|
||||
if (existingInit != null) {
|
||||
throw new BusinessException("warehouse.inventory_count.exception.init_already_exists");
|
||||
throw new BusinessException("warehouse.inventory_count.exception.init_already_exists", dto.storeNo(), existingInit.getId());
|
||||
}
|
||||
}
|
||||
|
||||
@@ -123,10 +123,10 @@ public class InventoryCountServiceImpl extends ServiceImpl<DocumentMapper, Docum
|
||||
public void updateInventoryCount(InventoryCountDto dto) {
|
||||
Document existingEntity = this.baseMapper.selectById(dto.id());
|
||||
if (existingEntity == null) {
|
||||
throw new BusinessException("warehouse.inventory_count.exception.not_found");
|
||||
throw new BusinessException("warehouse.inventory_count.exception.not_found", dto.id());
|
||||
}
|
||||
if (existingEntity.getFormStatus() == FormStatus.APPROVE) {
|
||||
throw new BusinessException("warehouse.inventory_count.exception.cannot_update_approved");
|
||||
throw new BusinessException("warehouse.inventory_count.exception.cannot_update_approved", dto.id());
|
||||
}
|
||||
|
||||
Document entity = inventoryCountConverter.toEntity(dto);
|
||||
@@ -140,10 +140,10 @@ public class InventoryCountServiceImpl extends ServiceImpl<DocumentMapper, Docum
|
||||
public void deleteInventoryCount(long id) {
|
||||
Document entity = this.baseMapper.selectById(id);
|
||||
if (entity == null) {
|
||||
throw new BusinessException("warehouse.inventory_count.exception.not_found");
|
||||
throw new BusinessException("warehouse.inventory_count.exception.not_found", id);
|
||||
}
|
||||
if (entity.getFormStatus() == FormStatus.APPROVE) {
|
||||
throw new BusinessException("warehouse.inventory_count.exception.cannot_delete_approved");
|
||||
throw new BusinessException("warehouse.inventory_count.exception.cannot_delete_approved", id);
|
||||
}
|
||||
|
||||
this.baseMapper.deleteById(id);
|
||||
@@ -156,7 +156,7 @@ public class InventoryCountServiceImpl extends ServiceImpl<DocumentMapper, Docum
|
||||
@Override
|
||||
public void deleteBatch(List<Long> 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<Document> wrapper = new LambdaQueryWrapper<>();
|
||||
@@ -164,7 +164,7 @@ public class InventoryCountServiceImpl extends ServiceImpl<DocumentMapper, Docum
|
||||
wrapper.eq(Document::getFormStatus, FormStatus.APPROVE);
|
||||
Long approvedCount = this.baseMapper.selectCount(wrapper);
|
||||
if (approvedCount > 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<DocumentMapper, Docum
|
||||
public void approve(long id) {
|
||||
Document entity = this.baseMapper.selectById(id);
|
||||
if (entity == null) {
|
||||
throw new BusinessException("warehouse.inventory_count.exception.not_found");
|
||||
throw new BusinessException("warehouse.inventory_count.exception.not_found", id);
|
||||
}
|
||||
if (entity.getFormStatus() == FormStatus.APPROVE) {
|
||||
throw new BusinessException("warehouse.inventory_count.exception.already_approved");
|
||||
throw new BusinessException("warehouse.inventory_count.exception.already_approved", id);
|
||||
}
|
||||
|
||||
LambdaQueryWrapper<InventoryCountItem> itemWrapper = new LambdaQueryWrapper<>();
|
||||
itemWrapper.eq(InventoryCountItem::getDocumentNo, id);
|
||||
List<InventoryCountItem> 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<DocumentMapper, Docum
|
||||
public void unapprove(long id) {
|
||||
Document entity = this.baseMapper.selectById(id);
|
||||
if (entity == null) {
|
||||
throw new BusinessException("warehouse.inventory_count.exception.not_found");
|
||||
throw new BusinessException("warehouse.inventory_count.exception.not_found", id);
|
||||
}
|
||||
if (entity.getFormStatus() != FormStatus.APPROVE) {
|
||||
throw new BusinessException("warehouse.inventory_count.exception.not_approved");
|
||||
throw new BusinessException("warehouse.inventory_count.exception.not_approved", id);
|
||||
}
|
||||
|
||||
LambdaQueryWrapper<InventoryCountItem> itemWrapper = new LambdaQueryWrapper<>();
|
||||
@@ -284,7 +284,7 @@ public class InventoryCountServiceImpl extends ServiceImpl<DocumentMapper, Docum
|
||||
@Override
|
||||
public List<InventoryCountItemDto> 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<DocumentMapper, Docum
|
||||
|
||||
return items;
|
||||
} catch (IOException e) {
|
||||
throw new BusinessException("warehouse.inventory_count.exception.import_failed");
|
||||
throw new BusinessException("warehouse.inventory_count.exception.import_failed", file.getOriginalFilename(), e.getMessage());
|
||||
}
|
||||
}
|
||||
|
||||
|
||||
@@ -142,15 +142,15 @@ public class StockTransferOrderServiceImpl extends ServiceImpl<DocumentMapper, D
|
||||
@Override
|
||||
public void updateStockTransferOrder(StockTransferOrderAddDto dto) {
|
||||
if (dto.id() == null) {
|
||||
throw new BusinessException("warehouse.stock_transfer_order.exception.id_required");
|
||||
throw new BusinessException("warehouse.stock_transfer_order.exception.id_required", dto.formCode());
|
||||
}
|
||||
|
||||
Document existingEntity = this.baseMapper.selectById(dto.id());
|
||||
if (existingEntity == null) {
|
||||
throw new BusinessException("warehouse.stock_transfer_order.exception.not_found");
|
||||
throw new BusinessException("warehouse.stock_transfer_order.exception.not_found", dto.id());
|
||||
}
|
||||
if (existingEntity.getFormStatus() == FormStatus.APPROVE) {
|
||||
throw new BusinessException("warehouse.stock_transfer_order.exception.cannot_update_approved");
|
||||
throw new BusinessException("warehouse.stock_transfer_order.exception.cannot_update_approved", dto.id());
|
||||
}
|
||||
|
||||
Document entity = stockTransferOrderConverter.toEntity(dto);
|
||||
@@ -203,10 +203,10 @@ public class StockTransferOrderServiceImpl extends ServiceImpl<DocumentMapper, D
|
||||
public void deleteStockTransferOrder(long id) {
|
||||
Document entity = this.baseMapper.selectById(id);
|
||||
if (entity == null) {
|
||||
throw new BusinessException("warehouse.stock_transfer_order.exception.not_found");
|
||||
throw new BusinessException("warehouse.stock_transfer_order.exception.not_found", id);
|
||||
}
|
||||
if (entity.getFormStatus() == FormStatus.APPROVE) {
|
||||
throw new BusinessException("warehouse.stock_transfer_order.exception.cannot_delete_approved");
|
||||
throw new BusinessException("warehouse.stock_transfer_order.exception.cannot_delete_approved", id);
|
||||
}
|
||||
|
||||
this.baseMapper.deleteById(id);
|
||||
@@ -219,7 +219,7 @@ public class StockTransferOrderServiceImpl extends ServiceImpl<DocumentMapper, D
|
||||
@Override
|
||||
public void deleteBatch(List<Long> 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<Document> wrapper = new LambdaQueryWrapper<>();
|
||||
@@ -227,7 +227,7 @@ public class StockTransferOrderServiceImpl extends ServiceImpl<DocumentMapper, D
|
||||
wrapper.eq(Document::getFormStatus, FormStatus.APPROVE);
|
||||
Long approvedCount = this.baseMapper.selectCount(wrapper);
|
||||
if (approvedCount > 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<DocumentMapper, D
|
||||
public void approve(long id) {
|
||||
Document entity = this.baseMapper.selectById(id);
|
||||
if (entity == null) {
|
||||
throw new BusinessException("warehouse.stock_transfer_order.exception.not_found");
|
||||
throw new BusinessException("warehouse.stock_transfer_order.exception.not_found", id);
|
||||
}
|
||||
if (entity.getFormStatus() == FormStatus.APPROVE) {
|
||||
throw new BusinessException("warehouse.stock_transfer_order.exception.already_approved");
|
||||
throw new BusinessException("warehouse.stock_transfer_order.exception.already_approved", id);
|
||||
}
|
||||
|
||||
LambdaQueryWrapper<DocumentMaterial> materialWrapper = new LambdaQueryWrapper<>();
|
||||
materialWrapper.eq(DocumentMaterial::getDocumentNo, id);
|
||||
List<DocumentMaterial> 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<DocumentMapper, D
|
||||
for (DocumentMaterial material : materialList) {
|
||||
Stock outStock = outStockMap.get(material.getPartNumber());
|
||||
if (outStock == null || outStock.getProductCount() < material.getProductCount()) {
|
||||
throw new BusinessException("warehouse.stock_transfer_order.exception.insufficient_stock");
|
||||
throw new BusinessException("warehouse.stock_transfer_order.exception.insufficient_stock",
|
||||
material.getPartNumber(),
|
||||
outStock != null ? outStock.getProductCount() : 0,
|
||||
material.getProductCount());
|
||||
}
|
||||
}
|
||||
|
||||
@@ -337,10 +340,10 @@ public class StockTransferOrderServiceImpl extends ServiceImpl<DocumentMapper, D
|
||||
public void reject(long id) {
|
||||
Document entity = this.baseMapper.selectById(id);
|
||||
if (entity == null) {
|
||||
throw new BusinessException("warehouse.stock_transfer_order.exception.not_found");
|
||||
throw new BusinessException("warehouse.stock_transfer_order.exception.not_found", id);
|
||||
}
|
||||
if (entity.getFormStatus() != FormStatus.APPROVE) {
|
||||
throw new BusinessException("warehouse.stock_transfer_order.exception.not_approved");
|
||||
throw new BusinessException("warehouse.stock_transfer_order.exception.not_approved", id);
|
||||
}
|
||||
|
||||
LambdaQueryWrapper<DocumentMaterial> materialWrapper = new LambdaQueryWrapper<>();
|
||||
@@ -391,10 +394,11 @@ public class StockTransferOrderServiceImpl extends ServiceImpl<DocumentMapper, D
|
||||
for (DocumentMaterial material : materialList) {
|
||||
Stock inStock = inStockMap.get(material.getPartNumber());
|
||||
if (inStock == null) {
|
||||
throw new BusinessException("warehouse.stock_transfer_order.exception.stock_not_found");
|
||||
throw new BusinessException("warehouse.stock_transfer_order.exception.stock_not_found", material.getPartNumber());
|
||||
}
|
||||
if (inStock.getProductCount() < material.getProductCount()) {
|
||||
throw new BusinessException("warehouse.stock_transfer_order.exception.insufficient_stock_for_unapprove");
|
||||
throw new BusinessException("warehouse.stock_transfer_order.exception.insufficient_stock_for_unapprove",
|
||||
material.getPartNumber(), inStock.getProductCount(), material.getProductCount());
|
||||
}
|
||||
inStock.setProductCount(inStock.getProductCount() - material.getProductCount());
|
||||
inStock.setUpdateDate(LocalDateTime.now());
|
||||
@@ -425,7 +429,8 @@ public class StockTransferOrderServiceImpl extends ServiceImpl<DocumentMapper, D
|
||||
|
||||
private void validateTransferOrder(StockTransferOrderAddDto dto) {
|
||||
if (dto.storeNo().equals(dto.outStoreNo())) {
|
||||
throw new BusinessException("warehouse.stock_transfer_order.exception.same_warehouse");
|
||||
throw new BusinessException("warehouse.stock_transfer_order.exception.same_warehouse",
|
||||
dto.storeNo(), dto.outStoreNo());
|
||||
}
|
||||
|
||||
Map<String, Integer> partCountMap = new HashMap<>();
|
||||
@@ -443,12 +448,13 @@ public class StockTransferOrderServiceImpl extends ServiceImpl<DocumentMapper, D
|
||||
|
||||
Map<String, Object> 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);
|
||||
}
|
||||
}
|
||||
}
|
||||
|
||||
@@ -103,7 +103,7 @@ public class WarehouseItemServiceImpl extends ServiceImpl<WarehouseItemMapper, W
|
||||
public List<ProductVendorMapDto> 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<WarehouseItemMapper, W
|
||||
public void saveVendorList(ProductVendorMapAddDto dto) {
|
||||
WarehouseItem warehouseItem = this.baseMapper.selectById(dto.warehouseItemId());
|
||||
if (warehouseItem == null) {
|
||||
throw new BusinessException("warehouse.warehouse_item.exception.not_found");
|
||||
throw new BusinessException("warehouse.warehouse_item.exception.not_found", dto.warehouseItemId());
|
||||
}
|
||||
String partNumber = warehouseItem.getPartNumber();
|
||||
|
||||
@@ -156,7 +156,7 @@ public class WarehouseItemServiceImpl extends ServiceImpl<WarehouseItemMapper, W
|
||||
Set<Long> 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<WarehouseItemMapper, W
|
||||
public String getPartNumberById(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);
|
||||
}
|
||||
return warehouseItem.getPartNumber();
|
||||
}
|
||||
|
||||
@@ -87,10 +87,10 @@ public class WarehouseReceiptServiceImpl extends ServiceImpl<DocumentMapper, Doc
|
||||
public void updateWarehouseReceipt(WarehouseReceiptDto dto) {
|
||||
Document existingEntity = this.baseMapper.selectById(dto.id());
|
||||
if (existingEntity == null) {
|
||||
throw new BusinessException("warehouse.warehouse_receipt.exception.not_found");
|
||||
throw new BusinessException("warehouse.warehouse_receipt.exception.not_found", dto.id());
|
||||
}
|
||||
if (existingEntity.getFormStatus() == FormStatus.APPROVE) {
|
||||
throw new BusinessException("warehouse.warehouse_receipt.exception.cannot_update_approved");
|
||||
throw new BusinessException("warehouse.warehouse_receipt.exception.cannot_update_approved", dto.id());
|
||||
}
|
||||
|
||||
Document entity = warehouseReceiptConverter.toEntity(dto);
|
||||
@@ -122,10 +122,10 @@ public class WarehouseReceiptServiceImpl extends ServiceImpl<DocumentMapper, Doc
|
||||
public void deleteWarehouseReceipt(long id) {
|
||||
Document entity = this.baseMapper.selectById(id);
|
||||
if (entity == null) {
|
||||
throw new BusinessException("warehouse.warehouse_receipt.exception.not_found");
|
||||
throw new BusinessException("warehouse.warehouse_receipt.exception.not_found", id);
|
||||
}
|
||||
if (entity.getFormStatus() == FormStatus.APPROVE) {
|
||||
throw new BusinessException("warehouse.warehouse_receipt.exception.cannot_delete_approved");
|
||||
throw new BusinessException("warehouse.warehouse_receipt.exception.cannot_delete_approved", id);
|
||||
}
|
||||
|
||||
this.baseMapper.deleteById(id);
|
||||
@@ -138,7 +138,7 @@ public class WarehouseReceiptServiceImpl extends ServiceImpl<DocumentMapper, Doc
|
||||
@Override
|
||||
public void deleteBatch(List<Long> 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<Document> wrapper = new LambdaQueryWrapper<>();
|
||||
@@ -146,7 +146,7 @@ public class WarehouseReceiptServiceImpl extends ServiceImpl<DocumentMapper, Doc
|
||||
wrapper.eq(Document::getFormStatus, FormStatus.APPROVE);
|
||||
Long approvedCount = this.baseMapper.selectCount(wrapper);
|
||||
if (approvedCount > 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<DocumentMapper, Doc
|
||||
public void approve(long id) {
|
||||
Document entity = this.baseMapper.selectById(id);
|
||||
if (entity == null) {
|
||||
throw new BusinessException("warehouse.warehouse_receipt.exception.not_found");
|
||||
throw new BusinessException("warehouse.warehouse_receipt.exception.not_found", id);
|
||||
}
|
||||
if (entity.getFormStatus() == FormStatus.APPROVE) {
|
||||
throw new BusinessException("warehouse.warehouse_receipt.exception.already_approved");
|
||||
throw new BusinessException("warehouse.warehouse_receipt.exception.already_approved", id);
|
||||
}
|
||||
|
||||
LambdaQueryWrapper<DocumentMaterial> materialWrapper = new LambdaQueryWrapper<>();
|
||||
materialWrapper.eq(DocumentMaterial::getDocumentNo, id);
|
||||
List<DocumentMaterial> 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<DocumentMapper, Doc
|
||||
public void reject(long id) {
|
||||
Document entity = this.baseMapper.selectById(id);
|
||||
if (entity == null) {
|
||||
throw new BusinessException("warehouse.warehouse_receipt.exception.not_found");
|
||||
throw new BusinessException("warehouse.warehouse_receipt.exception.not_found", id);
|
||||
}
|
||||
if (entity.getFormStatus() != FormStatus.APPROVE) {
|
||||
throw new BusinessException("warehouse.warehouse_receipt.exception.not_approved");
|
||||
throw new BusinessException("warehouse.warehouse_receipt.exception.not_approved", id);
|
||||
}
|
||||
|
||||
LambdaQueryWrapper<DocumentMaterial> materialWrapper = new LambdaQueryWrapper<>();
|
||||
@@ -258,10 +258,11 @@ public class WarehouseReceiptServiceImpl extends ServiceImpl<DocumentMapper, Doc
|
||||
for (DocumentMaterial material : materialList) {
|
||||
Stock existingStock = existingStockMap.get(material.getPartNumber());
|
||||
if (existingStock == null) {
|
||||
throw new BusinessException("warehouse.warehouse_receipt.exception.stock_not_found");
|
||||
throw new BusinessException("warehouse.warehouse_receipt.exception.stock_not_found", material.getPartNumber());
|
||||
}
|
||||
if (existingStock.getProductCount() < material.getProductCount()) {
|
||||
throw new BusinessException("warehouse.warehouse_receipt.exception.insufficient_stock_for_unapprove");
|
||||
throw new BusinessException("warehouse.warehouse_receipt.exception.insufficient_stock_for_unapprove",
|
||||
material.getPartNumber(), existingStock.getProductCount(), material.getProductCount());
|
||||
}
|
||||
existingStock.setProductCount(existingStock.getProductCount() - material.getProductCount());
|
||||
existingStock.setUpdateDate(LocalDateTime.now());
|
||||
|
||||
@@ -109,6 +109,103 @@ production.finished_product_shipment.exception.import_failed=导入文件失败
|
||||
|
||||
sys.operationType.codeNotExists=编号不存在
|
||||
|
||||
# ==========>> 系统管理
|
||||
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=设备不存在
|
||||
|
||||
# ==========> 类型
|
||||
|
||||
|
||||
@@ -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
|
||||
|
||||
@@ -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}] 密码不能为空
|
||||
|
||||
Reference in New Issue
Block a user