From c3a981e80973ac52b5988aca62b87409976c6fb1 Mon Sep 17 00:00:00 2001
From: 云 <2163098428@qq.com>
Date: 星期四, 18 六月 2026 13:09:28 +0800
Subject: [PATCH] 1.计量器具台账上传附件报错 2.质量拉的数据不对(未明确) 3.计量器具台账逾期的做标红提醒 4.设备保养定时任务和记录要加上具体的保养内容 5.质量要区分质检规则抽检还是全检,抽检的话是抽多少百分比 6.供应商管理东西太少了,没有资质文件啊这些东西(是不是可以参考pro) 7.采购审批把人从李莹莹改成龙红星

---
 src/main/java/com/ruoyi/purchase/service/impl/PurchaseLedgerServiceImpl.java |   83 ++++++++++++++++++++++++++++++++++++++++-
 1 files changed, 81 insertions(+), 2 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..96be8cf 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;
@@ -116,6 +118,7 @@
     private final StockInRecordService stockInRecordService;
     private final StockUtils stockUtils;
     private final ApprovalTemplateMapper approvalTemplateMapper;
+    private final SparePartsMapper sparePartsMapper;
 
     @Override
     public List<PurchaseLedger> selectPurchaseLedgerList(PurchaseLedger purchaseLedger) {
@@ -162,6 +165,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 +335,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 +370,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);
@@ -387,7 +424,26 @@
         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()))
@@ -515,6 +571,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 +728,13 @@
             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());
+                }
+            }
         }
 
         // 鍒嗙粍澶勭悊

--
Gitblit v1.9.3