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