From 5eec9b5a9d8bf9e49663d5a51cab7490fef5b204 Mon Sep 17 00:00:00 2001
From: maven <2163098428@qq.com>
Date: 星期二, 26 八月 2025 15:22:03 +0800
Subject: [PATCH] yys  生产管控(完成基本功能)

---
 main-business/src/main/java/com/ruoyi/business/service/impl/ProductionMasterServiceImpl.java |  103 ++++++++++++++++++++++++++++++++++++++++-----------
 1 files changed, 80 insertions(+), 23 deletions(-)

diff --git a/main-business/src/main/java/com/ruoyi/business/service/impl/ProductionMasterServiceImpl.java b/main-business/src/main/java/com/ruoyi/business/service/impl/ProductionMasterServiceImpl.java
index a10f889..25dae27 100644
--- a/main-business/src/main/java/com/ruoyi/business/service/impl/ProductionMasterServiceImpl.java
+++ b/main-business/src/main/java/com/ruoyi/business/service/impl/ProductionMasterServiceImpl.java
@@ -12,12 +12,16 @@
 import com.ruoyi.business.mapper.*;
 import com.ruoyi.business.service.ProductionMasterService;
 import com.ruoyi.common.exception.base.BaseException;
+import com.ruoyi.common.utils.StringUtils;
 import com.ruoyi.common.utils.bean.BeanUtils;
 import lombok.RequiredArgsConstructor;
 import org.springframework.stereotype.Service;
 import org.springframework.transaction.annotation.Transactional;
 
 import java.math.BigDecimal;
+import java.math.RoundingMode;
+import java.time.LocalDate;
+import java.time.format.DateTimeFormatter;
 import java.util.*;
 import java.util.stream.Collectors;
 
@@ -49,6 +53,32 @@
     public IPage<ProductionMasterDto> selectPMList(Page page, ProductionMasterDto productionMasterDto) {
         // 1. 鏋勫缓涓昏〃鏌ヨ鏉′欢
         LambdaQueryWrapper<ProductionMaster> masterQueryWrapper = new LambdaQueryWrapper<>();
+        String keyword = productionMasterDto.getSearchAll();
+        if (StringUtils.isNotBlank(keyword)) {
+            // 鏌ヨ鐓ょ鍚嶇О涓ā绯婂尮閰嶇殑coalId鍒楄〃
+            List<Long> matchedCoalIds = coalInfoMapper.selectList(
+                            new LambdaQueryWrapper<CoalInfo>().like(CoalInfo::getCoal, keyword)
+                    ).stream()
+                    .map(CoalInfo::getId)
+                    .toList();
+
+            // 缁勮鏌ヨ鏉′欢锛氱叅绉岻D鍦ㄥ尮閰嶇殑鍒楄〃涓�
+            // 濡傛灉 matchedCoalIds 涓虹┖锛岀洿鎺ヨ繑鍥� 0 鏉℃暟鎹紙鏋勯�犱竴涓笉鍙兘鎴愮珛鐨勬潯浠讹級
+            if (matchedCoalIds.isEmpty()) {
+                masterQueryWrapper.apply("1 = 0"); // 寮哄埗杩斿洖绌虹粨鏋�
+            }
+            // 濡傛灉鏈夊尮閰嶇殑 coalId锛屽垯鎸� coalId 鏌ヨ
+            else {
+                String ids = matchedCoalIds.stream()
+                        .map(String::valueOf)
+                        .collect(Collectors.joining(","));
+
+                masterQueryWrapper.apply(
+                        "{0} = ANY(string_to_array(coal_id, ','))",
+                        ids
+                );
+            }
+        }
 
         // 2. 鎵ц涓昏〃鍒嗛〉鏌ヨ
         IPage<ProductionMaster> entityPage = productionMasterMapper.selectPage(page, masterQueryWrapper);
@@ -77,7 +107,6 @@
         IPage<ProductionMasterDto> dtoPage = new Page<>();
         BeanUtils.copyProperties(entityPage, dtoPage, "records");
         dtoPage.setRecords(dtoList);
-
         return dtoPage;
     }
 
@@ -144,7 +173,7 @@
         batchInsertInventories(masterId, dto.getProductionInventoryList());
 
         // 鎻掑叆寰呭叆搴撴暟鎹�
-        insertPendingInventory(dto.getProductionList());
+//        insertPendingInventory(dto.getProductionList());
 
         return 1;
     }
@@ -212,8 +241,6 @@
             coalIds.add(p.getCoalId());
         }
 
-        List<CoalInfo> coalInfos = coalInfoMapper.selectList(new LambdaQueryWrapper<CoalInfo>().in(CoalInfo::getId, coalIds));
-
         ProductionMaster master = new ProductionMaster();
         master.setProductionQuantity(totalQuantity);
         master.setTotalCost(totalCost);
@@ -236,6 +263,7 @@
             BeanUtils.copyProperties(p, copy);
             copy.setId(null);
             copy.setProductionMasterId(masterId);
+            copy.setStatus(1);
             productionMapper.insert(copy);
         }
     }
@@ -256,15 +284,44 @@
     /**
      * 灏嗗姞宸ヤ骇鐢熺殑浜у搧璁板綍鍒板緟鍏ュ簱琛�
      */
-    private void insertPendingInventory(List<Production> list) {
+    public void insertPendingInventory(List<Production> list) {
+        LocalDate currentDate = LocalDate.now();
+        DateTimeFormatter formatter = DateTimeFormatter.ofPattern("yyyy-MM-dd");
+        String formattedDate = currentDate.format(formatter);
+        final int SCALE = 2;
+        final RoundingMode ROUNDING_MODE = RoundingMode.HALF_UP;
+        final BigDecimal TAX_RATE = new BigDecimal("1.13");
+
         for (Production p : list) {
             PendingInventory pending = new PendingInventory();
             pending.setCoalId(p.getCoalId());
             pending.setInventoryQuantity(p.getProductionQuantity());
-            pending.setSupplierName("鐢熶骇鍔犲伐鍏ュ簱");
-            pending.setTotalPriceIncludingTax(p.getTotalCost());
-            pending.setPriceIncludingTax(p.getPurchasePrice());
-            pending.setPriceIncludingTax(p.getPurchasePrice());
+            pending.setUnit("鍚�");
+            pending.setSupplierName(formattedDate + " - " + "鐢熶骇鍔犲伐鍏ュ簱");
+
+            // 闈炵┖澶勭悊
+            BigDecimal totalCost = p.getTotalCost() == null ? BigDecimal.ZERO : p.getTotalCost();
+            BigDecimal productionQuantity = p.getProductionQuantity() == null ? BigDecimal.ZERO : p.getProductionQuantity();
+
+            // 鍚◣鎬讳环
+            BigDecimal totalPriceIncludingTax = totalCost.multiply(productionQuantity)
+                    .setScale(SCALE, ROUNDING_MODE);
+            pending.setTotalPriceIncludingTax(totalPriceIncludingTax);
+
+            // 鍚◣鍗曚环
+            pending.setPriceIncludingTax(totalCost.setScale(SCALE, ROUNDING_MODE));
+
+            // 涓嶅惈绋庡崟浠凤紙鐩存帴淇濈暀2浣嶅皬鏁帮級
+            BigDecimal priceExcludingTax = totalCost.divide(TAX_RATE, SCALE, ROUNDING_MODE);
+            pending.setPriceExcludingTax(priceExcludingTax);
+
+            // 涓嶅惈绋庢�讳环
+            BigDecimal totalPriceExcludingTax = priceExcludingTax.multiply(productionQuantity)
+                    .setScale(SCALE, ROUNDING_MODE);
+            pending.setTotalPriceExcludingTax(totalPriceExcludingTax);
+
+            pending.setRegistrantId(p.getProducerId());
+            pending.setRegistrationDate(LocalDate.now());
             pendingInventoryMapper.insert(pending);
         }
     }
@@ -346,20 +403,20 @@
         }
 
         // 鎵归噺鏇存柊瀹樻柟搴撳瓨
-        for (Map.Entry<Long, BigDecimal> entry : inventoryAdjustMap.entrySet()) {
-            OfficialInventory official = officialInventoryMapper.selectById(entry.getKey());
-            if (official == null) {
-                throw new BaseException("瀹樻柟搴撳瓨涓嶅瓨鍦紝ID: " + entry.getKey());
-            }
-
-            // 浣跨敤绾跨▼瀹夊叏鐨凚igDecimal鎿嶄綔
-            official.setInventoryQuantity(
-                    Optional.ofNullable(official.getInventoryQuantity())
-                            .orElse(BigDecimal.ZERO)
-                            .add(entry.getValue())
-            );
-            officialInventoryMapper.updateById(official);
-        }
+//        for (Map.Entry<Long, BigDecimal> entry : inventoryAdjustMap.entrySet()) {
+//            OfficialInventory official = officialInventoryMapper.selectById(entry.getKey());
+//            if (official == null) {
+//                throw new BaseException("瀹樻柟搴撳瓨涓嶅瓨鍦紝ID: " + entry.getKey());
+//            }
+//
+//            // 浣跨敤绾跨▼瀹夊叏鐨凚igDecimal鎿嶄綔
+//            official.setInventoryQuantity(
+//                    Optional.ofNullable(official.getInventoryQuantity())
+//                            .orElse(BigDecimal.ZERO)
+//                            .add(entry.getValue())
+//            );
+//            officialInventoryMapper.updateById(official);
+//        }
 
         // 鎵归噺鍒犻櫎鐢熶骇搴撳瓨
         if (!productionIdsToDelete.isEmpty()) {

--
Gitblit v1.9.3