From f6f57ba70679a0b050031f3cdf81b5bf5d4cbd60 Mon Sep 17 00:00:00 2001
From: liding <756868258@qq.com>
Date: 星期五, 11 七月 2025 15:28:37 +0800
Subject: [PATCH] 1.生产加工优化 2.销售,库存查询优化

---
 main-business/src/main/java/com/ruoyi/business/controller/HomePageController.java                       |    2 
 main-business/src/main/java/com/ruoyi/business/service/impl/SalesRecordServiceImpl.java                 |   41 +++++++++++--
 main-business/src/main/java/com/ruoyi/business/service/impl/PendingInventoryServiceImpl.java            |   29 +++++++++
 main-business/src/main/java/com/ruoyi/business/dto/PendingInventoryDto.java                             |    5 +
 main-business/src/main/java/com/ruoyi/business/dto/HomePageDto.java                                     |    2 
 main-business/src/main/java/com/ruoyi/business/dto/SalesRecordDto.java                                  |    2 
 main-business/src/main/java/com/ruoyi/business/service/impl/ProductionMasterServiceImpl.java            |   39 ++++++++++++-
 main-business/src/main/resources/db/migration/postgresql/V20250611160300__create_table_sales_record.sql |    6 +-
 8 files changed, 111 insertions(+), 15 deletions(-)

diff --git a/main-business/src/main/java/com/ruoyi/business/controller/HomePageController.java b/main-business/src/main/java/com/ruoyi/business/controller/HomePageController.java
index 792c8b9..3b7ca54 100644
--- a/main-business/src/main/java/com/ruoyi/business/controller/HomePageController.java
+++ b/main-business/src/main/java/com/ruoyi/business/controller/HomePageController.java
@@ -39,7 +39,7 @@
         Map<String, BigDecimal> maps = officialInventoryService.selectOfficialAllInfo();
         homePageDto.setInventory(maps);
         //鏈堝害缁熻
-        homePageDto.setResultMouth((List<Map<String, BigDecimal>>) map.get("resultMouth"));
+        homePageDto.setResultMouth((Map<String, BigDecimal>) map.get("resultMouth"));
 
         //閿�鍞暟鎹�
         homePageDto.setSalesResults((List<Map<String, Object>>) map.get("salesResults"));
diff --git a/main-business/src/main/java/com/ruoyi/business/dto/HomePageDto.java b/main-business/src/main/java/com/ruoyi/business/dto/HomePageDto.java
index 8743696..1ad3232 100644
--- a/main-business/src/main/java/com/ruoyi/business/dto/HomePageDto.java
+++ b/main-business/src/main/java/com/ruoyi/business/dto/HomePageDto.java
@@ -28,6 +28,6 @@
     //閿�鍞暟鎹�
     private List<Map<String, Object>> salesResults;
     //鏈堝害閿�鍞�
-    private List<Map<String, BigDecimal>> resultMouth;
+    private Map<String, BigDecimal> resultMouth;
 
 }
diff --git a/main-business/src/main/java/com/ruoyi/business/dto/PendingInventoryDto.java b/main-business/src/main/java/com/ruoyi/business/dto/PendingInventoryDto.java
index e81edb6..c7aa0cc 100644
--- a/main-business/src/main/java/com/ruoyi/business/dto/PendingInventoryDto.java
+++ b/main-business/src/main/java/com/ruoyi/business/dto/PendingInventoryDto.java
@@ -44,5 +44,10 @@
      */
     private String coal;
 
+    /**
+     * 鐧昏浜�
+     */
     private String registrant;
+
+    private String searchAll;
 }
diff --git a/main-business/src/main/java/com/ruoyi/business/dto/SalesRecordDto.java b/main-business/src/main/java/com/ruoyi/business/dto/SalesRecordDto.java
index 32560a2..0567117 100644
--- a/main-business/src/main/java/com/ruoyi/business/dto/SalesRecordDto.java
+++ b/main-business/src/main/java/com/ruoyi/business/dto/SalesRecordDto.java
@@ -6,5 +6,7 @@
 @Data
 public class SalesRecordDto extends SalesRecord {
 
+    private String searchAll;
+
     private String coal;
 }
diff --git a/main-business/src/main/java/com/ruoyi/business/service/impl/PendingInventoryServiceImpl.java b/main-business/src/main/java/com/ruoyi/business/service/impl/PendingInventoryServiceImpl.java
index 412e7bb..d76fcf5 100644
--- a/main-business/src/main/java/com/ruoyi/business/service/impl/PendingInventoryServiceImpl.java
+++ b/main-business/src/main/java/com/ruoyi/business/service/impl/PendingInventoryServiceImpl.java
@@ -15,6 +15,7 @@
 import com.ruoyi.business.dto.PendingInventoryDto;
 import com.ruoyi.business.entity.OfficialInventory;
 import com.ruoyi.business.entity.PendingInventory;
+import com.ruoyi.business.entity.SalesRecord;
 import com.ruoyi.business.mapper.OfficialInventoryMapper;
 import com.ruoyi.business.mapper.PendingInventoryMapper;
 import com.ruoyi.business.service.InputInventoryRecordService;
@@ -22,6 +23,7 @@
 import com.ruoyi.business.service.PendingInventoryService;
 import com.ruoyi.common.core.domain.entity.SysUser;
 import com.ruoyi.common.exception.base.BaseException;
+import com.ruoyi.common.utils.StringUtils;
 import com.ruoyi.common.utils.bean.BeanUtils;
 import com.ruoyi.system.mapper.SysUserMapper;
 import lombok.RequiredArgsConstructor;
@@ -29,6 +31,8 @@
 import org.springframework.transaction.annotation.Transactional;
 
 import java.math.BigDecimal;
+import java.time.LocalDate;
+import java.time.format.DateTimeParseException;
 import java.util.*;
 import java.util.function.Function;
 import java.util.stream.Collectors;
@@ -65,6 +69,31 @@
     public IPage<PendingInventoryDto> selectPendingInventoryList(Page page, PendingInventoryDto pendingInventoryDto) {
         // 1. 鏋勫缓涓绘煡璇�
         LambdaQueryWrapper<PendingInventory> queryWrapper = new LambdaQueryWrapper<>();
+        if (StringUtils.isNotBlank(pendingInventoryDto.getSearchAll())) {
+            String searchValue = pendingInventoryDto.getSearchAll();
+            // 1. 鍏堝皾璇曚綔涓烘棩鏈熸煡璇�
+            try {
+                LocalDate RegistrationDate = LocalDate.parse(searchValue);
+                queryWrapper.eq(PendingInventory::getRegistrationDate, RegistrationDate);
+            } catch (DateTimeParseException e) {
+                // 2. 濡傛灉涓嶆槸鏃ユ湡锛屽垯浣滀负鐓ょ鍚嶇О鏌ヨ
+                LambdaQueryWrapper<CoalInfo> coalQueryWrapper = new LambdaQueryWrapper<>();
+                coalQueryWrapper.like(CoalInfo::getCoal, searchValue);
+                List<CoalInfo> coalInfos = coalInfoMapper.selectList(coalQueryWrapper);
+                if (!coalInfos.isEmpty()) {
+                    // 鎻愬彇鎵�鏈夊尮閰嶇殑鐓ょID
+                    List<Long> coalIds = coalInfos.stream()
+                            .map(CoalInfo::getId)
+                            .collect(Collectors.toList());
+                    // 浣跨敤in鏌ヨ鍖归厤浠绘剰涓�涓叅绉岻D
+                    queryWrapper.in(PendingInventory::getCoalId, coalIds);
+                } else {
+                    // 3. 濡傛灉鎵句笉鍒扮叅绉嶏紝鍙互杩斿洖绌虹粨鏋�
+                    queryWrapper.eq(PendingInventory::getCoalId, "-1"); // 浣跨敤涓嶅彲鑳藉瓨鍦ㄧ殑ID
+                }
+            }
+        }
+
         queryWrapper.orderByDesc(PendingInventory::getCreateTime);
 
         // 2. 鎵ц涓昏〃鍒嗛〉鏌ヨ
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 4157611..6a2d46c 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
@@ -19,7 +19,9 @@
 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;
 
@@ -282,13 +284,44 @@
      * 灏嗗姞宸ヤ骇鐢熺殑浜у搧璁板綍鍒板緟鍏ュ簱琛�
      */
     private void insertPendingInventory(List<Production> list) {
+        LocalDate currentDate = LocalDate.now();
+        DateTimeFormatter formatter = DateTimeFormatter.ofPattern("yyyy-MM-dd");
+        String formattedDate = currentDate.format(formatter);
+        // 甯搁噺瀹氫箟锛氫繚鐣�2浣嶅皬鏁帮紝鍥涜垗浜斿叆妯″紡
+        final int SCALE = 2;
+        final RoundingMode ROUNDING_MODE = RoundingMode.HALF_UP;
+        // 绋庣巼13%锛岀敤瀛楃涓叉瀯閫燘igDecimal閬垮厤绮惧害璇樊
+        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.setUnit("t");
+            pending.setSupplierName(formattedDate + " - " + "鐢熶骇鍔犲伐鍏ュ簱");
+
+            // 1. 闈炵┖澶勭悊锛氶伩鍏峮ull瀵艰嚧鐨勮繍绠楀紓甯�
+            BigDecimal totalCost = p.getTotalCost() == null ? BigDecimal.ZERO : p.getTotalCost();
+            BigDecimal productionQuantity = p.getProductionQuantity() == null ? BigDecimal.ZERO : p.getProductionQuantity();
+
+            // 2. 鍚◣鎬讳环 = 鍚◣鍗曚环 * 浜ч噺 鈫� 淇濈暀2浣嶅皬鏁�
+            BigDecimal totalPriceIncludingTax = totalCost.multiply(productionQuantity)
+                    .setScale(SCALE, ROUNDING_MODE);
+            pending.setTotalPriceIncludingTax(totalPriceIncludingTax);
+
+            // 3. 鍚◣鍗曚环 鈫� 鐩存帴淇濈暀2浣嶅皬鏁�
+            pending.setPriceIncludingTax(totalCost.setScale(SCALE, ROUNDING_MODE));
+
+            // 4. 涓嶅惈绋庡崟浠� = 鍚◣鍗曚环 / 1.13 鈫� 鍏堥珮绮惧害璁$畻锛屽啀淇濈暀2浣�
+            BigDecimal priceExcludingTax = totalCost.divide(TAX_RATE, 10, ROUNDING_MODE) // 涓棿淇濈暀10浣嶉槻璇樊
+                    .setScale(SCALE, ROUNDING_MODE);   // 鏈�缁堜繚鐣�2浣�
+            pending.setPriceExcludingTax(priceExcludingTax);
+
+            // 5. 涓嶅惈绋庢�讳环 = 涓嶅惈绋庡崟浠� * 浜ч噺 鈫� 淇濈暀2浣嶅皬鏁�
+            BigDecimal totalPriceExcludingTax = priceExcludingTax.multiply(productionQuantity)
+                    .setScale(SCALE, ROUNDING_MODE);
+            pending.setTotalPriceExcludingTax(totalPriceExcludingTax);
+
             pending.setRegistrantId(p.getProducerId());
             pending.setRegistrationDate(LocalDate.now());
             pendingInventoryMapper.insert(pending);
diff --git a/main-business/src/main/java/com/ruoyi/business/service/impl/SalesRecordServiceImpl.java b/main-business/src/main/java/com/ruoyi/business/service/impl/SalesRecordServiceImpl.java
index d2e9256..145cf5b 100644
--- a/main-business/src/main/java/com/ruoyi/business/service/impl/SalesRecordServiceImpl.java
+++ b/main-business/src/main/java/com/ruoyi/business/service/impl/SalesRecordServiceImpl.java
@@ -19,6 +19,7 @@
 import com.ruoyi.business.service.SalesRecordService;
 import com.ruoyi.common.core.domain.entity.SysUser;
 import com.ruoyi.common.exception.base.BaseException;
+import com.ruoyi.common.utils.StringUtils;
 import com.ruoyi.common.utils.bean.BeanUtils;
 import com.ruoyi.system.mapper.SysUserMapper;
 import lombok.RequiredArgsConstructor;
@@ -67,6 +68,32 @@
     public IPage<SalesRecordDto> selectSalesRecordList(Page<SalesRecord> page, SalesRecordDto salesRecordDto) {
         // 1. 鍒涘缓鏌ヨ鏉′欢锛屾寜鍒涘缓鏃堕棿鍊掑簭鎺掑簭
         LambdaQueryWrapper<SalesRecord> queryWrapper = new LambdaQueryWrapper<>();
+
+        if (StringUtils.isNotBlank(salesRecordDto.getSearchAll())) {
+            String searchValue = salesRecordDto.getSearchAll();
+            // 1. 鍏堝皾璇曚綔涓烘棩鏈熸煡璇�
+            try {
+                LocalDate saleDate = LocalDate.parse(searchValue);
+                queryWrapper.eq(SalesRecord::getSaleDate, saleDate);
+            } catch (DateTimeParseException e) {
+                // 2. 濡傛灉涓嶆槸鏃ユ湡锛屽垯浣滀负鐓ょ鍚嶇О鏌ヨ
+                LambdaQueryWrapper<CoalInfo> coalQueryWrapper = new LambdaQueryWrapper<>();
+                coalQueryWrapper.like(CoalInfo::getCoal, searchValue);
+                List<CoalInfo> coalInfos = coalInfoMapper.selectList(coalQueryWrapper);
+                if (!coalInfos.isEmpty()) {
+                    // 鎻愬彇鎵�鏈夊尮閰嶇殑鐓ょID
+                    List<Long> coalIds = coalInfos.stream()
+                            .map(CoalInfo::getId)
+                            .collect(Collectors.toList());
+                    // 浣跨敤in鏌ヨ鍖归厤浠绘剰涓�涓叅绉岻D
+                    queryWrapper.in(SalesRecord::getCoalId, coalIds);
+                } else {
+                    // 3. 濡傛灉鎵句笉鍒扮叅绉嶏紝鍙互杩斿洖绌虹粨鏋�
+                    queryWrapper.eq(SalesRecord::getCoalId, "-1"); // 浣跨敤涓嶅彲鑳藉瓨鍦ㄧ殑ID
+                }
+            }
+        }
+
         queryWrapper.orderByDesc(SalesRecord::getCreateTime);
 
         // 2. 鑾峰彇鍒嗛〉鐨勯攢鍞褰�
@@ -509,13 +536,13 @@
                         )
                 ));
 
-        //鏋勫缓缁撴灉锛堜繚鎸佺叅绉嶉『搴忥紝閿�閲忛粯璁や负0锛�
-        List<Map<String, Object>> resultMouth = new ArrayList<>();
+        // 2. 鍒涘缓 resultMouth锛屽瓨鍌ㄧ叅绉嶅強鍏堕攢閲忥紙Map 缁撴瀯锛�
+        Map<String, BigDecimal> resultMouthMap = new LinkedHashMap<>();
         for (CoalInfo coal : allCoalTypes) {
-            Map<String, Object> item = new LinkedHashMap<>();
-            item.put("coal", coal.getCoal()); // 鐓ょ鍚嶇О
-            item.put("saleQuantity", salesByCoalId.getOrDefault(coal.getId(), BigDecimal.valueOf(0))); // 閿�閲�
-            resultMouth.add(item);
+            resultMouthMap.put(
+                    coal.getCoal(),  // 鐓ょ鍚嶇О锛堝 "鏃犵儫鐓�"锛�
+                    salesByCoalId.getOrDefault(coal.getId(), BigDecimal.valueOf(0)) // 閿�閲�
+            );
         }
 
         result.put("revenueAmount", revenueAmount.setScale(2, RoundingMode.HALF_UP));
@@ -526,7 +553,7 @@
         result.put("trendQuantity", trendQuantity);
         result.put("revenueDistribution", revenueDistribution);
         result.put("salesResults", results);
-        result.put("resultMouth", resultMouth);
+        result.put("resultMouth", resultMouthMap);
 
         return result;
     }
diff --git a/main-business/src/main/resources/db/migration/postgresql/V20250611160300__create_table_sales_record.sql b/main-business/src/main/resources/db/migration/postgresql/V20250611160300__create_table_sales_record.sql
index 4f0fe0e..f26b885 100644
--- a/main-business/src/main/resources/db/migration/postgresql/V20250611160300__create_table_sales_record.sql
+++ b/main-business/src/main/resources/db/migration/postgresql/V20250611160300__create_table_sales_record.sql
@@ -5,7 +5,7 @@
     sale_date           DATE           NOT NULL,          -- 閿�鍞棩鏈�
     customer_id         BIGINT,                           -- 瀹㈡埛id
     customer            VARCHAR(255)   NOT NULL,          -- 瀹㈡埛
-    coal_id             VARCHAR(255)   NOT NULL,          -- 鐓ょ id
+    coal_id             BIGINT   NOT NULL,          -- 鐓ょ id
     price_including_tax DECIMAL(10, 2) NOT NULL,          -- 鍗曚环锛堝惈绋庯級
     inventory_quantity  DECIMAL(10, 0) NOT NULL,          -- 搴撳瓨鏁伴噺
     unit                VARCHAR(100)   NOT NULL,          -- 鍗曚綅
@@ -18,8 +18,8 @@
     gross_profit        DECIMAL(10, 2),                   -- 姣涘埄娑�
     net_profit          DECIMAL(10, 2),                   -- 鍑�鍒╂鼎
     registrant_id       BIGINT,                           -- 鐧昏浜篿d
-    registrant          VARCHAR(255)   NOT NULL,          -- 鐧昏浜�
-    registration_date   DATE           NOT NULL,          -- 鐧昏鏃ユ湡
+    registrant          VARCHAR(255)   ,          -- 鐧昏浜�
+    registration_date   DATE           ,          -- 鐧昏鏃ユ湡
 
     create_time         TIMESTAMP WITHOUT TIME ZONE,          -- 涓婁紶鏃堕棿锛岄粯璁ゅ綋鍓嶆椂闂�
     update_time         TIMESTAMP WITHOUT TIME ZONE,          -- 鏈�鍚庢洿鏂版椂闂达紝榛樿褰撳墠鏃堕棿

--
Gitblit v1.9.3