From b22ebe8fad1691b35adcf321fe2e136795b3f81d Mon Sep 17 00:00:00 2001
From: 云 <2163098428@qq.com>
Date: 星期一, 29 六月 2026 17:58:00 +0800
Subject: [PATCH] 库位
---
src/main/java/com/ruoyi/purchase/service/impl/PurchaseLedgerServiceImpl.java | 105 ++++++++++++++++++++++++++++++++++++++++++++++++++--
1 files changed, 101 insertions(+), 4 deletions(-)
diff --git a/src/main/java/com/ruoyi/purchase/service/impl/PurchaseLedgerServiceImpl.java b/src/main/java/com/ruoyi/purchase/service/impl/PurchaseLedgerServiceImpl.java
index 7a70435..49bd0a5 100644
--- a/src/main/java/com/ruoyi/purchase/service/impl/PurchaseLedgerServiceImpl.java
+++ b/src/main/java/com/ruoyi/purchase/service/impl/PurchaseLedgerServiceImpl.java
@@ -33,6 +33,8 @@
import com.ruoyi.framework.security.LoginUser;
import com.ruoyi.framework.web.domain.AjaxResult;
import com.ruoyi.framework.web.domain.R;
+import com.ruoyi.measuringinstrumentledger.mapper.SparePartsMapper;
+import com.ruoyi.measuringinstrumentledger.pojo.SpareParts;
import com.ruoyi.other.mapper.TempFileMapper;
import com.ruoyi.procurementrecord.mapper.ProcurementRecordMapper;
import com.ruoyi.procurementrecord.pojo.ProcurementRecordStorage;
@@ -62,6 +64,8 @@
import com.ruoyi.sales.service.impl.CommonFileServiceImpl;
import com.ruoyi.stock.pojo.StockInRecord;
import com.ruoyi.stock.service.StockInRecordService;
+import com.ruoyi.device.mapper.DeviceLedgerMapper;
+import com.ruoyi.device.pojo.DeviceLedger;
import lombok.RequiredArgsConstructor;
import lombok.extern.slf4j.Slf4j;
import org.springframework.beans.BeanUtils;
@@ -116,6 +120,8 @@
private final StockInRecordService stockInRecordService;
private final StockUtils stockUtils;
private final ApprovalTemplateMapper approvalTemplateMapper;
+ private final SparePartsMapper sparePartsMapper;
+ private final DeviceLedgerMapper deviceLedgerMapper;
@Override
public List<PurchaseLedger> selectPurchaseLedgerList(PurchaseLedger purchaseLedger) {
@@ -162,6 +168,9 @@
purchaseLedger.setRecorderId(purchaseLedgerDto.getRecorderId());
purchaseLedger.setApprovalStatus(1);
+ if (purchaseLedger.getId() == null) {
+ purchaseLedger.setStatus(1);
+ }
// 3. 鏂板鎴栨洿鏂颁富琛�
if (purchaseLedger.getId() == null) {
purchaseLedgerMapper.insert(purchaseLedger);
@@ -329,7 +338,9 @@
for (SalesLedgerProduct product : products) {
try {
boolean processed;
- if (Boolean.TRUE.equals(product.getIsChecked())) {
+ if (product.getProductType() != null && product.getProductType() == 2) {
+ processed = processPurchaseSparePart(purchaseLedger, product);
+ } else if (Boolean.TRUE.equals(product.getIsChecked())) {
processed = processPurchaseQualityProduct(purchaseLedger, product);
} else {
processed = processPurchaseDirectProduct(purchaseLedger, product);
@@ -362,6 +373,35 @@
}
}
+ // 鏇存柊鏀惰揣鐘舵��
+ List<Long> processedIds = details.stream()
+ .filter(d -> "SUCCESS".equals(d.get("status")) || "PARTIAL".equals(d.get("status")))
+ .map(d -> (Long) d.get("purchaseLedgerId"))
+ .filter(Objects::nonNull)
+ .collect(Collectors.toList());
+ if (!processedIds.isEmpty()) {
+ PurchaseLedgerDto statusQuery = new PurchaseLedgerDto();
+ statusQuery.setIds(processedIds);
+ IPage<PurchaseLedgerDto> statusPage = this.selectPurchaseLedgerListPage(
+ new com.baomidou.mybatisplus.extension.plugins.pagination.Page<>(1, processedIds.size()),
+ statusQuery
+ );
+ if (statusPage != null && CollectionUtils.isNotEmpty(statusPage.getRecords())) {
+ for (PurchaseLedgerDto dto : statusPage.getRecords()) {
+ PurchaseLedger update = new PurchaseLedger();
+ update.setId(dto.getId());
+ if ("瀹屽叏鍏ュ簱".equals(dto.getStockInStatus())) {
+ update.setStatus(3);
+ } else if ("鍏ュ簱涓�".equals(dto.getStockInStatus())) {
+ update.setStatus(2);
+ } else {
+ update.setStatus(1);
+ }
+ purchaseLedgerMapper.updateById(update);
+ }
+ }
+ }
+
Map<String, Object> summary = new LinkedHashMap<>();
summary.put("totalCount", distinctIds.size());
summary.put("successCount", successCount);
@@ -384,10 +424,30 @@
qualityInspect.setProductModelId(saleProduct.getProductModelId());
qualityInspect.setUnit(saleProduct.getUnit());
qualityInspect.setQuantity(saleProduct.getQuantity());
+ qualityInspect.setWarehouse(saleProduct.getStorageLocation());
qualityInspectMapper.insert(qualityInspect);
List<QualityTestStandard> qualityTestStandard = qualityTestStandardMapper.getQualityTestStandardByProductId(saleProduct.getProductId(), 0,null);
if (qualityTestStandard.size()>0){
- qualityInspect.setTestStandardId(qualityTestStandard.get(0).getId());
+ QualityTestStandard std = qualityTestStandard.get(0);
+ qualityInspect.setTestStandardId(std.getId());
+ // 鏍规嵁 inspectRule 璁剧疆鎶芥姣斾緥鍜屾娊妫�鏁伴噺榛樿鍊�
+ if (std.getInspectRule() == null || std.getInspectRule() == 0) {
+ // 鍏ㄦ
+ qualityInspect.setInspectRule(0);
+ qualityInspect.setSampleRatio(java.math.BigDecimal.valueOf(100));
+ qualityInspect.setSampleQuantity(saleProduct.getQuantity() != null ? saleProduct.getQuantity() : java.math.BigDecimal.ZERO);
+ } else {
+ // 鎶芥
+ qualityInspect.setInspectRule(1);
+ java.math.BigDecimal ratio = std.getSampleRatio() != null ? std.getSampleRatio() : java.math.BigDecimal.ZERO;
+ qualityInspect.setSampleRatio(ratio);
+ if (saleProduct.getQuantity() != null && ratio.compareTo(java.math.BigDecimal.ZERO) > 0) {
+ qualityInspect.setSampleQuantity(saleProduct.getQuantity().multiply(ratio)
+ .divide(java.math.BigDecimal.valueOf(100), 0, java.math.RoundingMode.CEILING));
+ } else {
+ qualityInspect.setSampleQuantity(java.math.BigDecimal.ZERO);
+ }
+ }
qualityInspectMapper.updateById(qualityInspect);
qualityTestStandardParamMapper.selectList(Wrappers.<QualityTestStandardParam>lambdaQuery()
.eq(QualityTestStandardParam::getTestStandardId,qualityTestStandard.get(0).getId()))
@@ -439,13 +499,18 @@
if (CollectionUtils.isEmpty(stockRecords)
&& qualityInspect.getQualifiedQuantity() != null
&& qualityInspect.getQualifiedQuantity().compareTo(BigDecimal.ZERO) > 0) {
+ // 浼樺厛浣跨敤璐ㄦ鍗曚腑鐨勫簱浣嶏紝濡傛灉娌℃湁鍒欎娇鐢ㄤ骇鍝佹槑缁嗕腑鐨勫簱浣�
+ String warehouse = StringUtils.hasText(qualityInspect.getWarehouse())
+ ? qualityInspect.getWarehouse()
+ : product.getStorageLocation();
stockUtils.addStockWithBatchNo(
product.getProductModelId(),
qualityInspect.getQualifiedQuantity(),
StockInQualifiedRecordTypeEnum.CUSTOMIZATION_UNSTOCK_OUT.getCode(),
qualityInspect.getId(),
null,
- purchaseInspectTime == null ? null : purchaseInspectTime.plusDays(1)
+ purchaseInspectTime == null ? null : purchaseInspectTime.plusDays(1),
+ warehouse
);
stockRecords = findQualityStockRecords(qualityInspect.getId(), product.getProductModelId());
}
@@ -492,7 +557,8 @@
StockInQualifiedRecordTypeEnum.PURCHASE_STOCK_IN.getCode(),
purchaseLedger.getId(),
purchaseLedger.getPurchaseContractNumber() + "-" + product.getId(),
- stockCreateTime
+ stockCreateTime,
+ product.getStorageLocation()
);
stockRecords = findDirectStockRecords(purchaseLedger.getId(), purchaseLedger.getPurchaseContractNumber(), product.getProductModelId(), product.getId());
}
@@ -515,6 +581,22 @@
approveStockRecords(Collections.singletonList(targetStockRecord));
stockRecords = findDirectStockRecords(purchaseLedger.getId(), purchaseLedger.getPurchaseContractNumber(), product.getProductModelId(), product.getId());
return hasApprovedStockRecord(stockRecords);
+ }
+
+ private boolean processPurchaseSparePart(PurchaseLedger purchaseLedger, SalesLedgerProduct product) {
+ if (purchaseLedger == null || product == null || product.getProductModelId() == null) {
+ return false;
+ }
+ SpareParts spareParts = sparePartsMapper.selectById(product.getProductModelId());
+ if (spareParts == null) {
+ return false;
+ }
+ BigDecimal newQty = spareParts.getQuantity() != null
+ ? spareParts.getQuantity().add(product.getQuantity())
+ : product.getQuantity();
+ spareParts.setQuantity(newQty);
+ sparePartsMapper.updateById(spareParts);
+ return true;
}
private LocalDateTime toStartOfDayPlusDays(Date date, int days) {
@@ -656,6 +738,21 @@
if (productModelId != null && modelMap.containsKey(productModelId)) {
product.setSpecificationModel(modelMap.get(productModelId));
}
+
+ if (product.getProductType() != null && product.getProductType() == 2) {
+ SpareParts spareParts = sparePartsMapper.selectById(productModelId);
+ if (spareParts != null) {
+ product.setProductCategory(spareParts.getName());
+ }
+ }
+
+ // 濡傛灉鏈夎澶嘔D浣嗘病鏈夊簱浣嶏紝浠庤澶囪〃鑷姩濉厖搴撲綅
+ if (product.getDeviceId() != null && StringUtils.isEmpty(product.getStorageLocation())) {
+ DeviceLedger device = deviceLedgerMapper.selectById(product.getDeviceId());
+ if (device != null && StringUtils.isNotEmpty(device.getStorageLocation())) {
+ product.setStorageLocation(device.getStorageLocation());
+ }
+ }
}
// 鍒嗙粍澶勭悊
--
Gitblit v1.9.3