From b3c9b97decc88be244995cd37ba70a3d04982d2b Mon Sep 17 00:00:00 2001
From: liding <756868258@qq.com>
Date: 星期四, 23 四月 2026 15:07:36 +0800
Subject: [PATCH] fix:报工投入
---
src/main/java/com/ruoyi/production/pojo/ProductionProductInput.java | 3 +
src/main/resources/mapper/production/ProductionProductInputMapper.xml | 1
src/main/java/com/ruoyi/production/service/impl/ProductionProductMainServiceImpl.java | 36 +++++++++---------
src/main/java/com/ruoyi/stock/service/impl/StockInRecordServiceImpl.java | 3 -
src/main/java/com/ruoyi/stock/service/impl/StockInventoryServiceImpl.java | 33 ++++++++++++++++
5 files changed, 56 insertions(+), 20 deletions(-)
diff --git a/src/main/java/com/ruoyi/production/pojo/ProductionProductInput.java b/src/main/java/com/ruoyi/production/pojo/ProductionProductInput.java
index 82bece9..e2ace30 100644
--- a/src/main/java/com/ruoyi/production/pojo/ProductionProductInput.java
+++ b/src/main/java/com/ruoyi/production/pojo/ProductionProductInput.java
@@ -23,6 +23,9 @@
@ApiModelProperty(value = "鏁伴噺")
private BigDecimal quantity;
+ @ApiModelProperty(value = "batchNo")
+ private String batchNo;
+
@ApiModelProperty(value = "鍒涘缓鏃堕棿")
@TableField(fill = FieldFill.INSERT)
private LocalDateTime createTime;
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 84b382b..b2ab1ce 100644
--- a/src/main/java/com/ruoyi/production/service/impl/ProductionProductMainServiceImpl.java
+++ b/src/main/java/com/ruoyi/production/service/impl/ProductionProductMainServiceImpl.java
@@ -18,6 +18,7 @@
import com.ruoyi.common.exception.ServiceException;
import com.ruoyi.common.utils.bean.BeanUtils;
import com.ruoyi.procurementrecord.utils.StockUtils;
+import com.ruoyi.production.dto.ProductStructureDto;
import com.ruoyi.production.dto.ProductionProductMainDto;
import com.ruoyi.production.mapper.*;
import com.ruoyi.production.pojo.*;
@@ -175,23 +176,22 @@
productionProductMain.setStatus(0);
productionProductMainMapper.insert(productionProductMain);
/*鏂板鎶ュ伐鎶曞叆琛�*/
-// List<ProductStructureDto> productStructureDtos = productStructureMapper.listBybomAndProcess(productProcessRoute.getBomId(), productProcess.getId());
-// if (productStructureDtos.isEmpty()) {
-// //濡傛灉璇ュ伐搴忔病鏈変骇鍝佺粨鏋勭殑鎶曞叆鍝�,閭h繖涓姇鍏ュ搧鍜屼骇鍑哄搧鏄悓涓�涓�
-// ProductStructureDto productStructureDto = new ProductStructureDto();
-// productStructureDto.setProductModelId(productProcessRouteItem.getProductModelId());
-// productStructureDto.setUnitQuantity(BigDecimal.ONE);
-// productStructureDtos.add(productStructureDto);
-// }
-// for (ProductStructureDto productStructureDto : productStructureDtos) {
-// System.out.println(productStructureDto.getProductModelId());
-// ProductionProductInput productionProductInput = new ProductionProductInput();
-// productionProductInput.setProductModelId(productStructureDto.getProductModelId());
-// productionProductInput.setQuantity(productStructureDto.getUnitQuantity().multiply(dto.getQuantity()));
-// productionProductInput.setProductMainId(productionProductMain.getId());
-// productionProductInputMapper.insert(productionProductInput);
-// stockUtils.substractStock(productStructureDto.getProductModelId(), productionProductInput.getQuantity(), StockOutQualifiedRecordTypeEnum.PRODUCTION_REPORT_STOCK_OUT.getCode(), productionProductMain.getId(),dto.getBatchNo());
-// }
+ List<ProductStructureDto> productStructureDtos = productStructureMapper.listBybomAndProcess(productProcessRoute.getBomId(), productProcess.getId());
+ if (productStructureDtos.isEmpty()) {
+ //濡傛灉璇ュ伐搴忔病鏈変骇鍝佺粨鏋勭殑鎶曞叆鍝�,閭h繖涓姇鍏ュ搧鍜屼骇鍑哄搧鏄悓涓�涓�
+ ProductStructureDto productStructureDto = new ProductStructureDto();
+ productStructureDto.setProductModelId(productProcessRouteItem.getProductModelId());
+ productStructureDto.setUnitQuantity(BigDecimal.ONE);
+ productStructureDtos.add(productStructureDto);
+ }
+ for (ProductStructureDto productStructureDto : productStructureDtos) {
+ ProductionProductInput productionProductInput = new ProductionProductInput();
+ productionProductInput.setProductModelId(productStructureDto.getProductModelId());
+ productionProductInput.setQuantity(productStructureDto.getUnitQuantity().multiply(dto.getQuantity()));
+ productionProductInput.setProductMainId(productionProductMain.getId());
+ productionProductInputMapper.insert(productionProductInput);
+ stockUtils.substractStock(productStructureDto.getProductModelId(), productionProductInput.getQuantity(), StockOutQualifiedRecordTypeEnum.PRODUCTION_REPORT_STOCK_OUT.getCode(), productionProductMain.getId(), null);
+ }
/*鏂板鎶ュ伐浜у嚭琛�*/
ProductionProductOutput productionProductOutput = new ProductionProductOutput();
productionProductOutput.setProductMainId(productionProductMain.getId());
@@ -448,4 +448,4 @@
return productionProductMainDtos;
}
-}
\ No newline at end of file
+}
diff --git a/src/main/java/com/ruoyi/stock/service/impl/StockInRecordServiceImpl.java b/src/main/java/com/ruoyi/stock/service/impl/StockInRecordServiceImpl.java
index 34b6963..4154682 100644
--- a/src/main/java/com/ruoyi/stock/service/impl/StockInRecordServiceImpl.java
+++ b/src/main/java/com/ruoyi/stock/service/impl/StockInRecordServiceImpl.java
@@ -6,7 +6,6 @@
import com.baomidou.mybatisplus.extension.service.impl.ServiceImpl;
import com.ruoyi.common.enums.StockInQualifiedRecordTypeEnum;
import com.ruoyi.common.enums.StockInUnQualifiedRecordTypeEnum;
-import com.ruoyi.common.enums.StockOutQualifiedRecordTypeEnum;
import com.ruoyi.common.exception.base.BaseException;
import com.ruoyi.common.utils.EnumUtil;
import com.ruoyi.common.utils.OrderUtils;
@@ -61,7 +60,7 @@
int insertRows = stockInRecordMapper.insert(stockInRecord);
- Long insertId = stockInRecord.getId(); // 鏇挎崲涓轰綘鐨勫疄闄呬富閿瓧娈碉細getRecordId()/getInboundId() 绛�
+ Long insertId = stockInRecord.getId();
return insertRows > 0 ? insertId : null;
}
diff --git a/src/main/java/com/ruoyi/stock/service/impl/StockInventoryServiceImpl.java b/src/main/java/com/ruoyi/stock/service/impl/StockInventoryServiceImpl.java
index 13968cb..72fc3fa 100644
--- a/src/main/java/com/ruoyi/stock/service/impl/StockInventoryServiceImpl.java
+++ b/src/main/java/com/ruoyi/stock/service/impl/StockInventoryServiceImpl.java
@@ -37,6 +37,7 @@
import javax.servlet.http.HttpServletResponse;
import java.math.BigDecimal;
import java.time.LocalDate;
+import java.time.LocalDateTime;
import java.time.format.DateTimeFormatter;
import java.util.ArrayList;
import java.util.Date;
@@ -251,6 +252,38 @@
stockOutRecordDto.setProductModelId(stockInventoryDto.getProductModelId());
stockOutRecordDto.setType("0");
stockOutRecordService.add(stockOutRecordDto);
+ if (ObjectUtils.isEmpty(stockInventoryDto.getBatchNo())) {
+ List<StockInventory> stockInventories = stockInventoryMapper.selectList(new QueryWrapper<StockInventory>().lambda()
+ .eq(StockInventory::getProductModelId, stockInventoryDto.getProductModelId())
+ .orderByAsc(StockInventory::getId));
+ if (ObjectUtils.isEmpty(stockInventories)) {
+ throw new RuntimeException("浜у搧搴撳瓨涓嶅瓨鍦�");
+ }
+
+ BigDecimal remainingQty = stockInventoryDto.getQualitity();
+ for (StockInventory stockInventory : stockInventories) {
+ BigDecimal lockedQty = stockInventory.getLockedQuantity() == null ? BigDecimal.ZERO : stockInventory.getLockedQuantity();
+ BigDecimal availableQty = stockInventory.getQualitity().subtract(lockedQty);
+ if (availableQty.compareTo(BigDecimal.ZERO) <= 0) {
+ continue;
+ }
+
+ BigDecimal deductQty = remainingQty.min(availableQty);
+ stockInventory.setQualitity(stockInventory.getQualitity().subtract(deductQty));
+ stockInventory.setVersion(stockInventory.getVersion() == null ? 1 : stockInventory.getVersion() + 1);
+ stockInventory.setUpdateTime(LocalDateTime.now());
+ stockInventoryMapper.updateById(stockInventory);
+
+ remainingQty = remainingQty.subtract(deductQty);
+ if (remainingQty.compareTo(BigDecimal.ZERO) <= 0) {
+ return true;
+ }
+ }
+
+ ProductModel productModel = productModelMapper.selectById(stockInventoryDto.getProductModelId());
+ Product product = productMapper.selectById(productModel.getProductId());
+ throw new RuntimeException(product.getProductName() + "/" + productModel.getModel() + "搴撳瓨涓嶈冻鏃犳硶鍑哄簱");
+ }
StockInventory oldStockInventory = stockInventoryMapper.selectOne(new QueryWrapper<StockInventory>().lambda().eq(StockInventory::getProductModelId, stockInventoryDto.getProductModelId())
.eq(StockInventory::getBatchNo, stockInventoryDto.getBatchNo()));
if (ObjectUtils.isEmpty(oldStockInventory)) {
diff --git a/src/main/resources/mapper/production/ProductionProductInputMapper.xml b/src/main/resources/mapper/production/ProductionProductInputMapper.xml
index 3eb9bda..35691be 100644
--- a/src/main/resources/mapper/production/ProductionProductInputMapper.xml
+++ b/src/main/resources/mapper/production/ProductionProductInputMapper.xml
@@ -7,6 +7,7 @@
<result property="productMainId" column="product_main_id"/>
<result property="productModelId" column="product_model_id"/>
<result property="quantity" column="quantity"/>
+ <result property="batchNo" column="batch_no"/>
<result property="tenantId" column="tenant_id"/>
<result property="createTime" column="create_time"/>
</resultMap>
--
Gitblit v1.9.3