From e0cfecb2b11b3d6ac91394e71c689a30356ead28 Mon Sep 17 00:00:00 2001
From: liding <756868258@qq.com>
Date: 星期三, 20 五月 2026 09:29:28 +0800
Subject: [PATCH] fix:1.生产按照特定工序更改 2.库存按照型号,工序类别,电压进行筛选 3.销售页面展示电压,类别 4.生产入库按照电压入库
---
src/main/java/com/ruoyi/production/service/impl/ProductionProductMainServiceImpl.java | 291 +++++++++++++++++++++++++++++++++++++++-------------------
1 files changed, 196 insertions(+), 95 deletions(-)
diff --git a/src/main/java/com/ruoyi/production/service/impl/ProductionProductMainServiceImpl.java b/src/main/java/com/ruoyi/production/service/impl/ProductionProductMainServiceImpl.java
index 7a24e0e..c2a22d4 100644
--- a/src/main/java/com/ruoyi/production/service/impl/ProductionProductMainServiceImpl.java
+++ b/src/main/java/com/ruoyi/production/service/impl/ProductionProductMainServiceImpl.java
@@ -30,6 +30,7 @@
import com.ruoyi.quality.mapper.*;
import com.ruoyi.quality.pojo.*;
import com.ruoyi.quality.service.IQualityInspectService;
+import com.ruoyi.stock.support.FinishedProductStockDimensionResolver;
import lombok.AllArgsConstructor;
import org.springframework.stereotype.Service;
import org.springframework.transaction.annotation.Transactional;
@@ -47,6 +48,10 @@
@AllArgsConstructor
@Transactional(rollbackFor = Exception.class)
public class ProductionProductMainServiceImpl extends ServiceImpl<ProductionProductMainMapper, ProductionProductMain> implements ProductionProductMainService {
+
+ private static final String PROCESS_VOLTAGE_SORT = "鐢靛帇鍒嗛��";
+ private static final String PROCESS_OPTICAL_INSPECTION = "鍏夋澶栬";
+ private static final String PROCESS_PACKAGING = "鍖呰";
private IQualityInspectService qualityInspectService;
private ProductionProductMainMapper productionProductMainMapper;
@@ -86,6 +91,11 @@
private StockUtils stockUtils;
+ /**
+ * 瑙f瀽鐢熶骇鎶ュ伐瀵瑰簲鐨勬垚鍝佸叆搴撶淮搴︺��
+ */
+ private FinishedProductStockDimensionResolver finishedProductStockDimensionResolver;
+
private ISysNoticeService sysNoticeService;
@Override
@@ -93,6 +103,9 @@
return productionProductMainMapper.listPageProductionProductMainDto(page, productionProductMainDto);
}
+ /**
+ * 鏂板鎶ュ伐锛屽苟鏍规嵁褰撳墠宸ュ簭澶勭悊璐ㄦ鍜屽叆搴撻�昏緫銆�
+ */
@Override
public Boolean addProductMain(ProductionProductMainDto dto) {
SysUser user = userMapper.selectUserById(dto.getUserId());
@@ -100,9 +113,8 @@
//褰撳墠宸ヨ壓璺嚎瀵瑰簲鐨勫伐搴忚鎯�
ProductProcessRouteItem productProcessRouteItem = productProcessRouteItemMapper.selectById(dto.getProductProcessRouteItemId());
if (productProcessRouteItem == null) {
- throw new RuntimeException("宸ヨ壓璺嚎椤逛笉瀛樺湪");
+ throw new RuntimeException("宸ヨ壓璺嚎宸ュ簭椤逛笉瀛樺湪");
}
- // 鏄惁鑳芥姤宸ワ細 1. 绗竴涓伐搴忚兘鎶ュ伐 2. 涓婁竴涓伐搴忓凡鎶ュ伐 3. 涔嬪墠鐨勫伐搴忔湭琚殧绂�
//妫�鏌ヤ笂涓�涓伐搴忔槸鍚﹀凡鎶ュ伐
Integer currentDragSort = productProcessRouteItem.getDragSort();
if (currentDragSort != null && currentDragSort > 1) {
@@ -111,7 +123,7 @@
currentDragSort
);
if (!isPreviousReported) {
- throw new RuntimeException("涓婁竴涓伐搴忓皻鏈姤宸ワ紝涓嶈兘杩涜褰撳墠宸ュ簭鎶ュ伐");
+ throw new RuntimeException("涓婁竴閬撳伐搴忓皻鏈姤宸ワ紝褰撳墠宸ュ簭涓嶈兘鎶ュ伐");
}
// 鏌ヨ鎵�鏈変箣鍓嶇殑宸ュ簭锛堟帓搴忓彿灏忎簬褰撳墠宸ュ簭锛�
@@ -133,7 +145,7 @@
// 妫�鏌ヤ箣鍓嶇殑宸ュ簭鏄惁鏈夎闅旂鐨勪笉鍚堟牸璁板綍
List<QualityUnqualified> unqualifiedList = qualityUnqualifiedMapper.selectUnqualifiedByProcessNames(previousProcessNames);
if (CollectionUtils.isNotEmpty(unqualifiedList)) {
- throw new RuntimeException("涔嬪墠鐨勫伐搴忓凡琚殧绂伙紝涓嶈兘杩涜褰撳墠宸ュ簭鎶ュ伐");
+ throw new RuntimeException("鍓嶅簭宸ュ簭瀛樺湪闅旂璁板綍锛屽綋鍓嶅伐搴忎笉鑳芥姤宸�");
}
}
}
@@ -219,13 +231,11 @@
// 鏍稿績璁$畻
BigDecimal needQty = childQty.divide(parentQty, 6, RoundingMode.HALF_UP).multiply(dto.getQuantity());
-
-
productionProductInput.setQuantity(needQty);
-
productionProductInput.setProductMainId(productionProductMain.getId());
productionProductInputMapper.insert(productionProductInput);
- stockUtils.substractStock(productStructureDto.getProductModelId(), productionProductInput.getQuantity(), StockOutQualifiedRecordTypeEnum.PRODUCTION_REPORT_STOCK_OUT.getCode(), productionProductMain.getId(), null);
+ stockUtils.substractStock(productStructureDto.getProductModelId(), productionProductInput.getQuantity(),
+ StockOutQualifiedRecordTypeEnum.PRODUCTION_REPORT_STOCK_OUT.getCode(), productionProductMain.getId(), null);
}
/*鏂板鎶ュ伐浜у嚭琛�*/
ProductionProductOutput productionProductOutput = new ProductionProductOutput();
@@ -241,16 +251,27 @@
//鍚堟牸鏁伴噺=鎶ュ伐鏁伴噺-鎶ュ簾鏁伴噺
BigDecimal productQty = productionProductOutput.getQuantity().subtract(productionProductOutput.getScrapQty());
- List<ProductProcessRouteItem> productProcessRouteItems = productProcessRouteItemMapper.selectList(Wrappers.<ProductProcessRouteItem>lambdaQuery().eq(ProductProcessRouteItem::getProductRouteId, productProcessRouteItem.getProductRouteId()));
- //鍙湁鍚堟牸鏁伴噺>0鎵嶈兘澧炲姞鐩稿簲鏁版嵁
+ List<ProductProcessRouteItem> productProcessRouteItems = productProcessRouteItemMapper.selectList(
+ Wrappers.<ProductProcessRouteItem>lambdaQuery()
+ .eq(ProductProcessRouteItem::getProductRouteId, productProcessRouteItem.getProductRouteId())
+ );
+ boolean isRouteLastProcess = productProcessRouteItem.getDragSort() == productProcessRouteItems.size();
+ ReportStockRule reportStockRule = resolveReportStockRule(productProcessRouteItem, productProcess, productProcessRouteItems);
+
+ String processCategory = null;
+ String voltage = null;
+ if (productQty.compareTo(BigDecimal.ZERO) > 0 && reportStockRule.isFinishedGoodsStockIn()) {
+ processCategory = finishedProductStockDimensionResolver.resolveProcessCategory(productionProductMain.getId());
+ voltage = finishedProductStockDimensionResolver.resolveVoltage(productionProductMain.getId());
+ }
+
if (productQty.compareTo(BigDecimal.ZERO) > 0) {
/*鏂板璐ㄦ*/
if (productProcessRouteItem.getIsQuality()) {
//瀵瑰簲鐨勮繃绋嬫鎴栬�呭嚭鍘傛
int inspectType = 1;
- String process = productProcess.getName();//宸ュ簭
- if (productProcessRouteItem.getDragSort() == productProcessRouteItems.size()) {
- //鏈�鍚庝竴閬撳伐搴忕敓鎴愬嚭鍘傛
+ String process = productProcess.getName();
+ if (reportStockRule.isFinishedGoodsStockIn()) {
inspectType = 2;
process = null;
}
@@ -260,11 +281,11 @@
qualityInspect.setProductName(product.getProductName());
qualityInspect.setModel(productModel.getModel());
qualityInspect.setUnit(productModel.getUnit());
- qualityInspect.setQuantity(productQty);
+ qualityInspect.setQuantity(productionProductOutput.getQuantity());
qualityInspect.setProcess(process);
qualityInspect.setInspectState(0);
qualityInspect.setInspectType(inspectType);
- qualityInspect.setDefectiveQuantity(BigDecimal.ZERO);
+ qualityInspect.setDefectiveQuantity(productionProductOutput.getScrapQty());
qualityInspect.setProductMainId(productionProductMain.getId());
qualityInspect.setProductModelId(productModel.getId());
qualityInspectMapper.insert(qualityInspect);
@@ -272,8 +293,10 @@
if (qualityTestStandard.size() > 0) {
qualityInspect.setTestStandardId(qualityTestStandard.get(0).getId());
qualityInspectMapper.updateById(qualityInspect);
- qualityTestStandardParamMapper.selectList(Wrappers.<QualityTestStandardParam>lambdaQuery()
- .eq(QualityTestStandardParam::getTestStandardId, qualityTestStandard.get(0).getId()))//榛樿鑾峰彇鏈�鏂扮殑
+ qualityTestStandardParamMapper.selectList(
+ Wrappers.<QualityTestStandardParam>lambdaQuery()
+ .eq(QualityTestStandardParam::getTestStandardId, qualityTestStandard.get(0).getId())
+ )
.forEach(qualityTestStandardParam -> {
QualityInspectParam param = new QualityInspectParam();
BeanUtils.copyProperties(qualityTestStandardParam, param);
@@ -282,43 +305,47 @@
qualityInspectParamMapper.insert(param);
});
}
- }else {
- //鐩存帴鍏ュ簱
- //鏈�鍚庝竴閬撳伐搴忎负鎴愬搧
- if (productProcessRouteItem.getDragSort() == productProcessRouteItems.size()) {
- //鎴愬搧瀹℃牳
- stockUtils.addStock(productProcessRouteItem.getProductModelId(), productQty, StockInQualifiedRecordTypeEnum.PRODUCTION_REPORT_STOCK_IN.getCode(), productionProductMain.getId());
- }else {
- //鍗婃垚鍝佷笉瀹℃牳
- stockUtils.addStockNoReview(productProcessRouteItem.getProductModelId(), productQty, StockInQualifiedRecordTypeEnum.PRODUCTION_REPORT_STOCK_IN.getCode(), productionProductMain.getId());
+ } else {
+ if (reportStockRule.shouldCreateStockIn()) {
+ if (reportStockRule.isFinishedGoodsStockIn()) {
+ stockUtils.addStock(productProcessRouteItem.getProductModelId(), productQty,
+ StockInQualifiedRecordTypeEnum.PRODUCTION_REPORT_STOCK_IN.getCode(), productionProductMain.getId(),
+ processCategory, voltage);
+ } else {
+ stockUtils.addStockNoReview(productProcessRouteItem.getProductModelId(), productQty,
+ StockInQualifiedRecordTypeEnum.PRODUCTION_REPORT_STOCK_IN.getCode(), productionProductMain.getId());
+ }
+ }
+ if (productionProductOutput.getScrapQty().compareTo(BigDecimal.ZERO) > 0) {
+ stockUtils.addUnStockNoReview(productProcessRouteItem.getProductModelId(), productionProductOutput.getScrapQty(),
+ StockInUnQualifiedRecordTypeEnum.QUALITYINSPECT_UNSTOCK_IN.getCode(), productionProductMain.getId());
}
}
- /*鏇存柊宸ュ崟鍜岀敓浜ц鍗�*/
+
productWorkOrder.setCompleteQuantity(productWorkOrder.getCompleteQuantity().add(productQty));
if (ObjectUtils.isNull(productWorkOrder.getActualStartTime())) {
- productWorkOrder.setActualStartTime(LocalDate.now());//瀹為檯寮�濮嬫椂闂�
+ productWorkOrder.setActualStartTime(LocalDate.now());
}
if (productWorkOrder.getCompleteQuantity().compareTo(productWorkOrder.getPlanQuantity()) == 0) {
- productWorkOrder.setActualEndTime(LocalDate.now());//瀹為檯缁撴潫鏃堕棿
+ productWorkOrder.setActualEndTime(LocalDate.now());
}
productWorkOrderMapper.updateById(productWorkOrder);
- //鐢熶骇璁㈠崟
+
if (ObjectUtils.isNull(productOrder.getStartTime())) {
- productOrder.setStartTime(LocalDateTime.now());//寮�濮嬫椂闂�
+ productOrder.setStartTime(LocalDateTime.now());
}
- if (productProcessRouteItem.getDragSort() == productProcessRouteItems.size()) {
- //濡傛灉鏄渶鍚庝竴閬撳伐搴忔姤宸ヤ箣鍚庣敓浜ц鍗曞畬鎴愭暟閲�+
+ if (isRouteLastProcess) {
productOrder.setCompleteQuantity(productOrder.getCompleteQuantity().add(productQty));
if (productOrder.getCompleteQuantity().compareTo(productOrder.getQuantity()) == 0) {
- productOrder.setEndTime(LocalDateTime.now());//缁撴潫鏃堕棿
+ productOrder.setEndTime(LocalDateTime.now());
}
}
productOrderMapper.updateById(productOrder);
- /*娣诲姞鐢熶骇鏍哥畻*/
+
SalesLedgerProductionAccounting salesLedgerProductionAccounting = SalesLedgerProductionAccounting.builder()
.productMainId(productionProductMain.getId())
- .schedulingUserId(user.getUserId())
- .schedulingUserName(user.getNickName())
+ .schedulingUserId(userId)
+ .schedulingUserName(userName)
.finishedNum(productQty)
.workHours(productProcess.getSalaryQuota())
.process(productProcess.getName())
@@ -327,40 +354,122 @@
.build();
salesLedgerProductionAccountingMapper.insert(salesLedgerProductionAccounting);
}
- //濡傛灉鎶ュ簾鏁伴噺>0,闇�瑕佽繘鍏ユ姤搴熺殑搴撳瓨
- if (ObjectUtils.isNotEmpty(dto.getScrapQty())) {
- if (dto.getScrapQty().compareTo(BigDecimal.ZERO) > 0) {
- if (productProcessRouteItem.getDragSort() == productProcessRouteItems.size()){
- stockUtils.addUnStock(productModel.getId(), dto.getScrapQty(), StockInUnQualifiedRecordTypeEnum.PRODUCTION_SCRAP.getCode(), productionProductMain.getId());
- }else {
- stockUtils.addUnStockNoReview(productModel.getId(), dto.getScrapQty(), StockInUnQualifiedRecordTypeEnum.PRODUCTION_SCRAP.getCode(), productionProductMain.getId());
- }
- }
- }
return true;
+ }
+
+ /**
+ * 鍒ゆ柇褰撳墠鎶ュ伐鏄惁闇�瑕佸叆搴擄紝浠ュ強鏄惁鎸夋垚鍝佸叆搴撳鐞嗐��
+ */
+ private ReportStockRule resolveReportStockRule(ProductProcessRouteItem currentRouteItem,
+ ProductProcess currentProcess,
+ List<ProductProcessRouteItem> routeItems) {
+ boolean isRouteLastProcess = currentRouteItem.getDragSort() != null
+ && CollectionUtils.isNotEmpty(routeItems)
+ && currentRouteItem.getDragSort().equals(routeItems.size());
+ String currentProcessName = normalizeProcessName(currentProcess == null ? null : currentProcess.getName());
+ if (PROCESS_VOLTAGE_SORT.equals(currentProcessName)) {
+ return new ReportStockRule(false, false);
+ }
+
+ Map<Long, String> processNameMap = loadRouteProcessNameMap(routeItems);
+ boolean hasVoltageSort = containsProcess(routeItems, processNameMap, PROCESS_VOLTAGE_SORT);
+ boolean hasOpticalInspection = containsProcess(routeItems, processNameMap, PROCESS_OPTICAL_INSPECTION);
+ boolean hasPackaging = containsProcess(routeItems, processNameMap, PROCESS_PACKAGING);
+
+ if (hasPackaging && PROCESS_PACKAGING.equals(currentProcessName)) {
+ return new ReportStockRule(true, true);
+ }
+ if (hasPackaging && PROCESS_OPTICAL_INSPECTION.equals(currentProcessName)) {
+ return new ReportStockRule(false, false);
+ }
+ if (!hasPackaging && hasVoltageSort && hasOpticalInspection && PROCESS_OPTICAL_INSPECTION.equals(currentProcessName)) {
+ return new ReportStockRule(true, true);
+ }
+ return new ReportStockRule(true, isRouteLastProcess);
+ }
+
+ /**
+ * 鎵归噺鍔犺浇宸ヨ壓璺嚎涓殑宸ュ簭鍚嶇О銆�
+ */
+ private Map<Long, String> loadRouteProcessNameMap(List<ProductProcessRouteItem> routeItems) {
+ if (CollectionUtils.isEmpty(routeItems)) {
+ return Collections.emptyMap();
+ }
+ Set<Long> processIds = routeItems.stream()
+ .map(ProductProcessRouteItem::getProcessId)
+ .filter(Objects::nonNull)
+ .collect(Collectors.toSet());
+ if (processIds.isEmpty()) {
+ return Collections.emptyMap();
+ }
+ return productProcessMapper.selectBatchIds(processIds).stream()
+ .collect(Collectors.toMap(ProductProcess::getId, process -> normalizeProcessName(process.getName())));
+ }
+
+ /**
+ * 鍒ゆ柇宸ヨ壓璺嚎涓槸鍚﹀寘鍚寚瀹氬伐搴忋��
+ */
+ private boolean containsProcess(List<ProductProcessRouteItem> routeItems, Map<Long, String> processNameMap, String processName) {
+ return routeItems.stream()
+ .map(ProductProcessRouteItem::getProcessId)
+ .map(processNameMap::get)
+ .anyMatch(processName::equals);
+ }
+
+ /**
+ * 缁熶竴宸ュ簭鍚嶇О鏍煎紡锛岄伩鍏嶈鍒欏尮閰嶆椂鍙楃┖鐧藉瓧绗﹀奖鍝嶃��
+ */
+ private String normalizeProcessName(String processName) {
+ return processName == null ? "" : processName.trim();
+ }
+
+ /**
+ * 鍗曟鎶ュ伐瀵瑰簲鐨勫叆搴撹鍒欍��
+ */
+ private static final class ReportStockRule {
+ private final boolean createStockIn;
+ private final boolean finishedGoodsStockIn;
+
+ private ReportStockRule(boolean createStockIn, boolean finishedGoodsStockIn) {
+ this.createStockIn = createStockIn;
+ this.finishedGoodsStockIn = finishedGoodsStockIn;
+ }
+
+ private boolean shouldCreateStockIn() {
+ return createStockIn;
+ }
+
+ private boolean isFinishedGoodsStockIn() {
+ return finishedGoodsStockIn;
+ }
}
@Override
public Boolean removeProductMain(Long id) {
- //鍒ゆ柇璇ユ潯鎶ュ伐鏄惁涓嶅悎鏍煎鐞�,濡傛灉涓嶅悎鏍煎鐞嗕簡锛屽垯涓嶅厑璁稿垹闄�
- List<QualityInspect> qualityInspects = qualityInspectMapper.selectList(Wrappers.<QualityInspect>lambdaQuery().eq(QualityInspect::getProductMainId, id));
- if (qualityInspects.size() > 0){
- List<QualityUnqualified> qualityUnqualifieds = qualityUnqualifiedMapper.selectList(Wrappers.<QualityUnqualified>lambdaQuery()
- .in(QualityUnqualified::getInspectId, qualityInspects.stream().map(QualityInspect::getId).collect(Collectors.toList())));
- if (qualityUnqualifieds.size() > 0 && qualityUnqualifieds.get(0).getInspectState()==1) {
- throw new ServiceException("璇ユ潯鎶ュ伐宸茬粡涓嶅悎鏍煎鐞嗕簡锛屼笉鍏佽鍒犻櫎");
+ List<QualityInspect> qualityInspects = qualityInspectMapper.selectList(
+ Wrappers.<QualityInspect>lambdaQuery().eq(QualityInspect::getProductMainId, id)
+ );
+ if (qualityInspects.size() > 0) {
+ List<QualityUnqualified> qualityUnqualifieds = qualityUnqualifiedMapper.selectList(
+ Wrappers.<QualityUnqualified>lambdaQuery()
+ .in(QualityUnqualified::getInspectId, qualityInspects.stream().map(QualityInspect::getId).collect(Collectors.toList()))
+ );
+ if (qualityUnqualifieds.size() > 0 && qualityUnqualifieds.get(0).getInspectState() == 1) {
+ throw new ServiceException("璇ユ姤宸ュ凡瀹屾垚涓嶅悎鏍煎鐞嗭紝涓嶈兘鍒犻櫎");
}
}
+
ProductionProductMain productionProductMain = productionProductMainMapper.selectById(id);
- //璇ユ姤宸ュ搴旂殑宸ヨ壓璺嚎璇︽儏
ProductProcessRouteItem productProcessRouteItem = productProcessRouteItemMapper.selectById(productionProductMain.getProductProcessRouteItemId());
- ProductionProductOutput productionProductOutput = productionProductOutputMapper.selectList(Wrappers.<ProductionProductOutput>lambdaQuery().eq(ProductionProductOutput::getProductMainId, productionProductMain.getId())).get(0);
- /*鍒犻櫎鏍哥畻*/
+ ProductionProductOutput productionProductOutput = productionProductOutputMapper.selectList(
+ Wrappers.<ProductionProductOutput>lambdaQuery().eq(ProductionProductOutput::getProductMainId, productionProductMain.getId())
+ ).get(0);
+
salesLedgerProductionAccountingMapper.delete(
new LambdaQueryWrapper<SalesLedgerProductionAccounting>()
.eq(SalesLedgerProductionAccounting::getProductMainId, productionProductMain.getId())
);
- /*鏇存柊宸ュ崟鍜岀敓浜ц鍗�*/
+
ProductWorkOrder productWorkOrder = productWorkOrderMapper.selectById(productionProductMain.getWorkOrderId());
if (productWorkOrder != null && productionProductOutput != null) {
BigDecimal outputQty = productionProductOutput.getQuantity() == null ? BigDecimal.ZERO : productionProductOutput.getQuantity();
@@ -368,16 +477,19 @@
BigDecimal completeQty = productWorkOrder.getCompleteQuantity() == null ? BigDecimal.ZERO : productWorkOrder.getCompleteQuantity();
BigDecimal validQuantity = outputQty.subtract(scrapQty);
-
productWorkOrder.setCompleteQuantity(completeQty.subtract(validQuantity));
productWorkOrder.setActualEndTime(null);
productWorkOrderMapper.updateById(productWorkOrder);
} else {
throw new ServiceException("鎿嶄綔澶辫触锛氬伐鍗曚俊鎭垨浜у嚭璁板綍涓嶅瓨鍦�");
}
- //鍒ゆ柇鏄惁鏄渶鍚庝竴閬撳伐搴�
- List<ProductProcessRouteItem> productProcessRouteItems = productProcessRouteItemMapper.selectList(Wrappers.<ProductProcessRouteItem>lambdaQuery().eq(ProductProcessRouteItem::getProductRouteId, productProcessRouteItem.getProductRouteId()));
- if (productProcessRouteItem.getDragSort() != null && productProcessRouteItems != null && productProcessRouteItem.getDragSort() == productProcessRouteItems.size()) {
+
+ List<ProductProcessRouteItem> productProcessRouteItems = productProcessRouteItemMapper.selectList(
+ Wrappers.<ProductProcessRouteItem>lambdaQuery().eq(ProductProcessRouteItem::getProductRouteId, productProcessRouteItem.getProductRouteId())
+ );
+ if (productProcessRouteItem.getDragSort() != null
+ && productProcessRouteItems != null
+ && productProcessRouteItem.getDragSort() == productProcessRouteItems.size()) {
ProductOrder productOrder = productOrderMapper.selectById(productWorkOrder.getProductOrderId());
if (productOrder != null) {
BigDecimal orderCompleteQty = productOrder.getCompleteQuantity() == null ? BigDecimal.ZERO : productOrder.getCompleteQuantity();
@@ -392,31 +504,30 @@
throw new ServiceException("鍏宠仈鐨勭敓浜ц鍗曚笉瀛樺湪");
}
}
- //鍒犻櫎璐ㄦ
+
qualityInspectMapper.selectList(
new LambdaQueryWrapper<QualityInspect>()
.eq(QualityInspect::getProductMainId, productionProductMain.getId())
).forEach(q -> {
qualityInspectParamMapper.delete(
new LambdaQueryWrapper<QualityInspectParam>()
- .eq(QualityInspectParam::getInspectId, q.getId()));
+ .eq(QualityInspectParam::getInspectId, q.getId())
+ );
qualityInspectMapper.deleteById(q.getId());
- stockUtils.deleteStockInRecord(q.getId(), StockInQualifiedRecordTypeEnum.QUALITYINSPECT_STOCK_IN.getCode());
+ stockUtils.deleteStockInRecord(q.getId(), StockInQualifiedRecordTypeEnum.QUALITYINSPECT_STOCK_IN.getCode());
});
- // 鍒犻櫎浜у嚭璁板綍
- productionProductOutputMapper.delete(new LambdaQueryWrapper<ProductionProductOutput>()
- .eq(ProductionProductOutput::getProductMainId, productionProductMain.getId()));
- //鍒犻櫎鎶曞叆璁板綍
- productionProductInputMapper.delete(new LambdaQueryWrapper<ProductionProductInput>()
- .eq(ProductionProductInput::getProductMainId, productionProductMain.getId()));
- //鍒犻櫎鎶ュ簾鐨勫叆搴撹褰�
+ productionProductOutputMapper.delete(
+ new LambdaQueryWrapper<ProductionProductOutput>()
+ .eq(ProductionProductOutput::getProductMainId, productionProductMain.getId())
+ );
+ productionProductInputMapper.delete(
+ new LambdaQueryWrapper<ProductionProductInput>()
+ .eq(ProductionProductInput::getProductMainId, productionProductMain.getId())
+ );
stockUtils.deleteStockInRecord(productionProductMain.getId(), StockInUnQualifiedRecordTypeEnum.PRODUCTION_SCRAP.getCode());
- //鍒犻櫎涓嶉渶瑕佽川妫�鐨勫悎鏍煎叆搴�
stockUtils.deleteStockInRecord(productionProductMain.getId(), StockInQualifiedRecordTypeEnum.PRODUCTION_REPORT_STOCK_IN.getCode());
- //鍒犻櫎鎶曞叆瀵瑰簲鐨勫嚭搴撹褰�
stockUtils.deleteStockOutRecord(productionProductMain.getId(), StockOutQualifiedRecordTypeEnum.PRODUCTION_REPORT_STOCK_OUT.getCode());
- // 鍒犻櫎涓昏〃
productionProductMainMapper.deleteById(productionProductMain.getId());
return true;
}
@@ -429,49 +540,39 @@
@Override
public List<ProductionProductMainDto> getByProductWorkOrderId(Long productWorkOrderId) {
List<ProductionProductMainDto> productionProductMainDtos = productionProductMainMapper.getByProductWorkOrderId(productWorkOrderId);
-
if (productionProductMainDtos == null || productionProductMainDtos.isEmpty()) {
return productionProductMainDtos;
}
-
- // 鏀堕泦鎵�鏈変骇鍝佷富璁板綍ID
+
List<Long> productMainIds = productionProductMainDtos.stream()
.map(ProductionProductMainDto::getId)
.collect(Collectors.toList());
-
- // 鎵归噺鏌ヨ鎵�鏈夌浉鍏崇殑璐ㄦ璁板綍
+
List<QualityInspect> qualityInspects = qualityInspectMapper.selectList(
Wrappers.<QualityInspect>lambdaQuery()
.in(QualityInspect::getProductMainId, productMainIds)
);
-
+
if (!qualityInspects.isEmpty()) {
- // 鏀堕泦鎵�鏈夎川妫�璁板綍ID
List<Long> inspectIds = qualityInspects.stream()
.map(QualityInspect::getId)
.collect(Collectors.toList());
-
- // 鎵归噺鏌ヨ鎵�鏈夌浉鍏崇殑涓嶅悎鏍煎鐞嗚褰�
+
List<QualityUnqualified> qualityUnqualifieds = qualityUnqualifiedMapper.selectList(
Wrappers.<QualityUnqualified>lambdaQuery()
.in(QualityUnqualified::getInspectId, inspectIds)
);
-
- // 鏋勫缓璐ㄦID鍒颁笉鍚堟牸澶勭悊璁板綍鐨勬槧灏�
+
Map<Long, QualityUnqualified> inspectIdToUnqualifiedMap = qualityUnqualifieds.stream()
.collect(Collectors.toMap(QualityUnqualified::getInspectId, q -> q, (q1, q2) -> q1));
-
- // 鏋勫缓浜у搧涓籌D鍒拌川妫�璁板綍鐨勬槧灏�
+
Map<Long, QualityInspect> productMainIdToInspectMap = qualityInspects.stream()
.collect(Collectors.toMap(QualityInspect::getProductMainId, q -> q, (q1, q2) -> q1));
-
- // 鍏宠仈澶勭悊缁撴灉鍒颁骇鍝佷富璁板綍
+
productionProductMainDtos.forEach(p -> {
QualityInspect qualityInspect = productMainIdToInspectMap.get(p.getId());
if (qualityInspect != null) {
- // 涓嶈壇鏁伴噺
- p.setDefectiveQuantity( qualityInspect.getDefectiveQuantity());
- // 鍚堟牸鏁伴噺 = 鎶ュ伐鏁伴噺-鎶ュ簾鏁伴噺-涓嶈壇鏁伴噺
+ p.setDefectiveQuantity(qualityInspect.getDefectiveQuantity());
p.setQualifiedQty(p.getQuantity().subtract(p.getScrapQty()).subtract(p.getDefectiveQuantity()));
QualityUnqualified qualityUnqualified = inspectIdToUnqualifiedMap.get(qualityInspect.getId());
if (qualityUnqualified != null) {
@@ -480,7 +581,7 @@
}
});
}
-
+
return productionProductMainDtos;
}
-}
\ No newline at end of file
+}
--
Gitblit v1.9.3