From ada06626c3f81258e01837d09a10135f8ec3232f Mon Sep 17 00:00:00 2001
From: gongchunyi <deslre0381@gmail.com>
Date: 星期六, 28 三月 2026 16:06:30 +0800
Subject: [PATCH] refactor: 生产报工参数与投入表分离
---
src/main/java/com/ruoyi/production/service/impl/ProductionRecordServiceImpl.java | 168 ++++++++++++++++++++++++++++++++++++++++---------------
1 files changed, 121 insertions(+), 47 deletions(-)
diff --git a/src/main/java/com/ruoyi/production/service/impl/ProductionRecordServiceImpl.java b/src/main/java/com/ruoyi/production/service/impl/ProductionRecordServiceImpl.java
index 0a0d5ff..0b85bbf 100644
--- a/src/main/java/com/ruoyi/production/service/impl/ProductionRecordServiceImpl.java
+++ b/src/main/java/com/ruoyi/production/service/impl/ProductionRecordServiceImpl.java
@@ -93,6 +93,9 @@
private ProductMaterialService productMaterialService;
@Autowired
+ private ProductBomService productBomService;
+
+ @Autowired
private TempFileMapper tempFileMapper;
@Override
@@ -226,7 +229,7 @@
throw new ServiceException("鎶ュ伐澶辫触,鐢熶骇璁㈠崟鏇存柊澶辫触");
}
- // 瀹屾垚鎶ュ伐涓昏〃-鎶曞叆琛�-浜у嚭琛ㄦ暟鎹�
+ // 瀹屾垚鎶ュ伐涓昏〃-浜у嚭琛�-浜у嚭鏄庣粏琛ㄦ暟鎹�
ProductionProductMain productionProductMain = new ProductionProductMain();
productionProductMain.setProductNo(productionProductMainService.generateProductNo());
productionProductMain.setProductOrderId(dto.getProductOrderId());
@@ -238,20 +241,12 @@
throw new ServiceException("鎶ュ伐澶辫触,鏁版嵁瀛樺偍澶辫触");
}
- ProductionProductInput productionProductInput = new ProductionProductInput();
- productionProductInput.setProductMainId(productionProductMain.getId());
- productionProductInput.setProductModelId(dto.getProductId());
- productionProductInput.setQuantity(dto.getQuantity());
- result = productionProductInputService.save(productionProductInput);
- if (!result) {
- throw new ServiceException("鎶ュ伐澶辫触,鐢熶骇鎶曞叆瀛樺偍澶辫触");
- }
-
ProductionProductOutput productionProductOutput = new ProductionProductOutput();
productionProductOutput.setProductMainId(productionProductMain.getId());
productionProductOutput.setProductModelId(dto.getProductId());
productionProductOutput.setQuantity(dto.getQualifiedQuantity());
productionProductOutput.setScrapQty(dto.getUnqualifiedQuantity());
+ productionProductOutput.setTotalQuantity(dto.getQuantity());
result = productionProductOutputService.save(productionProductOutput);
if (!result) {
throw new ServiceException("鎶ュ伐澶辫触,鐢熶骇浜у嚭瀛樺偍澶辫触");
@@ -273,19 +268,40 @@
List<ProductionProductRouteItemParamDto> productionProductRouteItemParamDtoList = productRouteItemDto.getProductionProductRouteItemParamDtoList();
if (productionProductRouteItemParamDtoList != null && !productionProductRouteItemParamDtoList.isEmpty()) {
for (ProductionProductRouteItemParamDto productRouteItemParamDto : productionProductRouteItemParamDtoList) {
- ProductionProductRouteItemParam paramEntity = new ProductionProductRouteItemParam();
- BeanUtils.copyProperties(productRouteItemParamDto, paramEntity, "id");
- paramEntity.setProductionProductRouteItemId(productRouteItemEntity.getId());
- paramEntity.setOrderItemParamId(productRouteItemParamDto.getId());
- if (paramEntity.getProductId() == null) {
- ProductionOrderRouteItemParam productionOrderRouteItemParam = productionOrderRouteItemParamService.getById(productRouteItemParamDto.getId());
- paramEntity.setParamName(productionOrderRouteItemParam.getParamName());
- paramEntity.setParamType(productionOrderRouteItemParam.getParamType());
- paramEntity.setParamFormat(productionOrderRouteItemParam.getParamFormat());
- paramEntity.setValueMode(productionOrderRouteItemParam.getValueMode());
- }
+ if (productRouteItemParamDto.getProductId() != null) {
+ // 濡傛灉鏈変骇鍝両D锛屽垯鏄姇鍏ョ墿鏂欙紝瀛樺叆鎶曞叆琛�
+ ProductionProductInput inputEntity = new ProductionProductInput();
+ inputEntity.setProductMainId(productionProductMain.getId());
+ inputEntity.setRouteItemId(productRouteItemEntity.getId());
+ inputEntity.setProductId(productRouteItemParamDto.getProductId());
+ inputEntity.setBomId(productRouteItemParamDto.getBomId());
+ BigDecimal qty = productRouteItemParamDto.getQuantity();
+ if (qty == null) {
+ qty = productRouteItemParamDto.getProductValue();
+ }
+ inputEntity.setQuantity(qty != null ? qty : BigDecimal.ZERO);
+ inputEntity.setUnit(productRouteItemParamDto.getUnit());
+ productionProductInputService.save(inputEntity);
+ } else {
+ // 鍚﹀垯鏄櫘閫氬弬鏁帮紝瀛樺叆鍙傛暟琛�
+ ProductionProductRouteItemParam paramEntity = new ProductionProductRouteItemParam();
+ BeanUtils.copyProperties(productRouteItemParamDto, paramEntity, "id");
+ paramEntity.setProductionProductRouteItemId(productRouteItemEntity.getId());
+ paramEntity.setOrderItemParamId(productRouteItemParamDto.getId());
- productionProductRouteItemParamService.save(paramEntity);
+ // 浠庤鍗曞弬鏁拌〃琛ュ叏鍩虹淇℃伅锛堝悕绉般�佺被鍨嬨�佸崟浣嶇瓑锛�
+ if (productRouteItemParamDto.getId() != null) {
+ ProductionOrderRouteItemParam orderParam = productionOrderRouteItemParamService.getById(productRouteItemParamDto.getId());
+ if (orderParam != null) {
+ paramEntity.setParamName(orderParam.getParamName());
+ paramEntity.setParamType(orderParam.getParamType());
+ paramEntity.setParamFormat(orderParam.getParamFormat());
+ paramEntity.setValueMode(orderParam.getValueMode());
+ paramEntity.setUnit(orderParam.getUnit());
+ }
+ }
+ productionProductRouteItemParamService.save(paramEntity);
+ }
}
}
@@ -470,6 +486,7 @@
throw new ServiceException("鏌ヨ澶辫触,鏈煡璇㈠埌鐢熶骇璁㈠崟淇℃伅");
}
dto.setNpsNo(productOrder.getNpsNo());
+ dto.setStrength(productOrder.getStrength());
/// 浜у搧淇℃伅
ProductMaterialSkuDto productMaterialSkuDto = productMaterialService.selectProductByProductMainId(productOrder.getId());
@@ -477,13 +494,14 @@
dto.setMaterialCode(productMaterialSkuDto.getMaterialCode());
dto.setModel(productMaterialSkuDto.getModel());
- // 鏌ヨ鎶曞叆琛紙鑾峰彇浜у搧ID鍜屾姇鍏ユ暟閲忥級
+ // 鏌ヨ鎬荤殑鎶曞叆鏁伴噺
ProductionProductInput input = productionProductInputService.getOne(
new LambdaQueryWrapper<ProductionProductInput>()
.eq(ProductionProductInput::getProductMainId, productMainId)
+ .isNull(ProductionProductInput::getRouteItemId)
.last("LIMIT 1"));
if (input != null) {
- dto.setProductId(input.getProductModelId());
+ dto.setProductId(input.getProductId());
dto.setQuantity(input.getQuantity());
}
@@ -493,6 +511,7 @@
.eq(ProductionProductOutput::getProductMainId, productMainId)
.last("LIMIT 1"));
if (output != null) {
+ dto.setQuantity(output.getTotalQuantity());
dto.setQualifiedQuantity(output.getQuantity());
dto.setUnqualifiedQuantity(output.getScrapQty());
}
@@ -507,21 +526,53 @@
ProductionProductRouteItemDto routeItemDto = new ProductionProductRouteItemDto();
BeanUtils.copyProperties(routeItem, routeItemDto);
+ // 宸ュ簭鍚嶇О/缂栧彿
+ ProductProcess productProcess = productProcessService.getById(routeItem.getProcessId());
+ routeItemDto.setProcessName(productProcess.getName());
+ routeItemDto.setProcessNo(productProcess.getNo());
+
// 鏌ヨ宸ュ簭鍙傛暟
List<ProductionProductRouteItemParam> paramList = productionProductRouteItemParamService.list(
new LambdaQueryWrapper<ProductionProductRouteItemParam>()
.eq(ProductionProductRouteItemParam::getProductionProductRouteItemId, routeItem.getId()));
+
+ List<ProductionProductRouteItemParamDto> paramDtoList = new ArrayList<>();
if (paramList != null && !paramList.isEmpty()) {
- List<ProductionProductRouteItemParamDto> paramDtoList = paramList.stream().map(param -> {
+ paramDtoList.addAll(paramList.stream().map(param -> {
ProductionProductRouteItemParamDto paramDto = new ProductionProductRouteItemParamDto();
BeanUtils.copyProperties(param, paramDto);
- if (paramDto.getProductId() != null) {
- ProductMaterialSkuDto materialSkuDto = productMaterialService.selectProductByModelId(paramDto.getProductId());
- productMaterialService.selectProductByModelId(paramDto.getProductId());
- paramDto.setParamName(materialSkuDto.getProductName());
- }
return paramDto;
- }).collect(Collectors.toList());
+ }).collect(Collectors.toList()));
+ }
+
+ // 鏌ヨ宸ュ簭鎶曞叆鐗╂枡
+ List<ProductionProductInput> routeItemInputList = productionProductInputService.list(
+ new LambdaQueryWrapper<ProductionProductInput>()
+ .eq(ProductionProductInput::getProductMainId, productMainId)
+ .eq(ProductionProductInput::getRouteItemId, routeItem.getId()));
+ if (routeItemInputList != null && !routeItemInputList.isEmpty()) {
+ paramDtoList.addAll(routeItemInputList.stream().map(inputItem -> {
+ ProductionProductRouteItemParamDto paramDto = new ProductionProductRouteItemParamDto();
+ paramDto.setProductId(inputItem.getProductId());
+ paramDto.setBomId(inputItem.getBomId());
+ paramDto.setQuantity(inputItem.getQuantity());
+ paramDto.setProductValue(inputItem.getQuantity());
+ paramDto.setUnit(inputItem.getUnit());
+
+ ProductMaterialSkuDto materialSkuDto = productMaterialService.selectProductByModelId(inputItem.getProductId());
+ if (materialSkuDto != null) {
+ paramDto.setParamName(materialSkuDto.getProductName());
+ paramDto.setProductName(materialSkuDto.getProductName());
+ paramDto.setModel(materialSkuDto.getModel());
+ paramDto.setMaterialCode(materialSkuDto.getMaterialCode());
+ }
+ String strength = productBomService.strengthById(inputItem.getBomId());
+ paramDto.setStrength(strength);
+ return paramDto;
+ }).collect(Collectors.toList()));
+ }
+
+ if (!paramDtoList.isEmpty()) {
routeItemDto.setProductionProductRouteItemParamDtoList(paramDtoList);
}
@@ -614,10 +665,11 @@
// 鏇存柊鎶曞叆琛�
ProductionProductInput input = productionProductInputService.getOne(new LambdaQueryWrapper<ProductionProductInput>()
.eq(ProductionProductInput::getProductMainId, productMainId)
+ .isNull(ProductionProductInput::getRouteItemId)
.last("LIMIT 1"));
if (input != null) {
- input.setProductModelId(dto.getProductId());
- input.setQuantity(dto.getQuantity());
+ input.setProductId(dto.getProductId());
+ input.setQuantity(dto.getQuantity() != null ? dto.getQuantity() : BigDecimal.ZERO);
productionProductInputService.updateById(input);
}
@@ -626,6 +678,7 @@
oldOutput.setProductModelId(dto.getProductId());
oldOutput.setQuantity(dto.getQualifiedQuantity());
oldOutput.setScrapQty(dto.getUnqualifiedQuantity());
+ oldOutput.setTotalQuantity(dto.getQuantity());
productionProductOutputService.updateById(oldOutput);
}
@@ -647,27 +700,48 @@
final Long routeItemId = routeItemEntity.getId();
- // 澶勭悊宸ュ簭鍙傛暟: 鍏堝垹闄よ宸ュ簭涓嬫墍鏈夋棫鍙傛暟锛屽啀閲嶆柊鎻掑叆浼犲叆鐨勫弬鏁�
+ // 澶勭悊宸ュ簭鍙傛暟鍙婃姇鍏�: 鍏堝垹闄よ宸ュ簭涓嬫墍鏈夋棫鍙傛暟鍜屾棫鎶曞叆锛屽啀閲嶆柊鎻掑叆浼犲叆鐨勬暟鎹�
productionProductRouteItemParamService.remove(new LambdaQueryWrapper<ProductionProductRouteItemParam>()
.eq(ProductionProductRouteItemParam::getProductionProductRouteItemId, routeItemId));
+ productionProductInputService.remove(new LambdaQueryWrapper<ProductionProductInput>()
+ .eq(ProductionProductInput::getProductMainId, productMainId)
+ .eq(ProductionProductInput::getRouteItemId, routeItemId));
List<ProductionProductRouteItemParamDto> paramDtoList = routeItemDto.getProductionProductRouteItemParamDtoList();
- if (paramDtoList != null && !paramDtoList.isEmpty()) {
+ if (paramDtoList != null && !paramDtoList.isEmpty()) {
for (ProductionProductRouteItemParamDto paramDto : paramDtoList) {
- ProductionProductRouteItemParam paramEntity = new ProductionProductRouteItemParam();
- BeanUtils.copyProperties(paramDto, paramEntity, "id");
- paramEntity.setProductionProductRouteItemId(routeItemId);
- if (paramEntity.getProductId() == null && paramDto.getId() != null) {
- ProductionOrderRouteItemParam orderParam = productionOrderRouteItemParamService.getById(paramDto.getId());
- if (orderParam != null) {
- paramEntity.setOrderItemParamId(orderParam.getId());
- paramEntity.setParamName(orderParam.getParamName());
- paramEntity.setParamType(orderParam.getParamType());
- paramEntity.setParamFormat(orderParam.getParamFormat());
- paramEntity.setValueMode(orderParam.getValueMode());
+ if (paramDto.getProductId() != null) {
+ // 鎶曞叆鐗╂枡
+ ProductionProductInput inputEntity = new ProductionProductInput();
+ inputEntity.setProductMainId(productMainId);
+ inputEntity.setRouteItemId(routeItemId);
+ inputEntity.setProductId(paramDto.getProductId());
+ inputEntity.setBomId(paramDto.getBomId());
+ BigDecimal qty = paramDto.getQuantity();
+ if (qty == null) {
+ qty = paramDto.getProductValue();
}
+ inputEntity.setQuantity(qty != null ? qty : BigDecimal.ZERO);
+ inputEntity.setUnit(paramDto.getUnit());
+ productionProductInputService.save(inputEntity);
+ } else {
+ // 鏅�氬弬鏁�
+ ProductionProductRouteItemParam paramEntity = new ProductionProductRouteItemParam();
+ BeanUtils.copyProperties(paramDto, paramEntity, "id");
+ paramEntity.setProductionProductRouteItemId(routeItemId);
+ if (paramDto.getId() != null) {
+ ProductionOrderRouteItemParam orderParam = productionOrderRouteItemParamService.getById(paramDto.getId());
+ if (orderParam != null) {
+ paramEntity.setOrderItemParamId(orderParam.getId());
+ paramEntity.setParamName(orderParam.getParamName());
+ paramEntity.setParamType(orderParam.getParamType());
+ paramEntity.setParamFormat(orderParam.getParamFormat());
+ paramEntity.setValueMode(orderParam.getValueMode());
+ paramEntity.setUnit(orderParam.getUnit());
+ }
+ }
+ productionProductRouteItemParamService.save(paramEntity);
}
- productionProductRouteItemParamService.save(paramEntity);
}
}
--
Gitblit v1.9.3