From 875adbd59a28453cdf443c3244e2691ad1dd02ac Mon Sep 17 00:00:00 2001
From: gongchunyi <deslre0381@gmail.com>
Date: 星期四, 17 九月 2026 00:13:08 +0800
Subject: [PATCH] fix: 产品父类名称适配
---
src/main/java/com/ruoyi/home/service/impl/HomeServiceImpl.java | 167 ++++++++++++++++++++++++++++---------------------------
1 files changed, 86 insertions(+), 81 deletions(-)
diff --git a/src/main/java/com/ruoyi/home/service/impl/HomeServiceImpl.java b/src/main/java/com/ruoyi/home/service/impl/HomeServiceImpl.java
index 84d1934..500b934 100644
--- a/src/main/java/com/ruoyi/home/service/impl/HomeServiceImpl.java
+++ b/src/main/java/com/ruoyi/home/service/impl/HomeServiceImpl.java
@@ -145,6 +145,12 @@
@Autowired
private ProductProcessMapper productProcessMapper;
+
+ @Autowired
+ private AccountExpenseMapper accountExpenseMapper;
+
+ @Autowired
+ private AccountIncomeMapper accountIncomeMapper;
@Override
public HomeBusinessDto business() {
@@ -179,28 +185,31 @@
LambdaQueryWrapper<PurchaseLedger> queryWrapper = new LambdaQueryWrapper<>();
queryWrapper.ge(PurchaseLedger::getEntryDate, currentMonth.atDay(1).atStartOfDay()) // 澶т簬绛変簬鏈湀绗竴澶�
.lt(PurchaseLedger::getEntryDate, currentMonth.plusMonths(1).atDay(1).atStartOfDay()); // 灏忎簬涓嬫湀绗竴澶�
- // 鎵ц鏌ヨ骞惰绠楁�诲拰
+
List<PurchaseLedger> purchaseLedgers = purchaseLedgerMapper.selectList(queryWrapper);
if (!CollectionUtils.isEmpty(purchaseLedgers)) {
- LambdaQueryWrapper<SalesLedgerProduct> salesLedgerProductMapperLambdaQueryWrapperCopy = new LambdaQueryWrapper<SalesLedgerProduct>();
- salesLedgerProductMapperLambdaQueryWrapperCopy.eq(SalesLedgerProduct::getType, 2)
+ LambdaQueryWrapper<SalesLedgerProduct> salesLedgerProductMapperLambdaQueryWrapperCopy = new LambdaQueryWrapper<>();
+ salesLedgerProductMapperLambdaQueryWrapperCopy.eq(SalesLedgerProduct::getType, 2) // 閲囪喘绫诲瀷
.in(SalesLedgerProduct::getSalesLedgerId,
purchaseLedgers.stream().map(PurchaseLedger::getId).collect(Collectors.toList()));
+
List<SalesLedgerProduct> salesLedgerProductsCopy = salesLedgerProductMapper
.selectList(salesLedgerProductMapperLambdaQueryWrapperCopy);
- // 鍚堣鍚堝悓閲戦
+
+ // 鍚堣鍚堝悓鎬婚噾棰�
BigDecimal receiveAmount = purchaseLedgers.stream()
.map(PurchaseLedger::getContractAmount)
.filter(Objects::nonNull)
.reduce(BigDecimal.ZERO, BigDecimal::add);
- // 鏈紑绁ㄩ噾棰�
+
+ // 寰呬粯娆炬�婚噾棰�
BigDecimal unReceiptPaymentAmount = salesLedgerProductsCopy.stream()
- .map(SalesLedgerProduct::getNoInvoiceAmount)
+ .map(SalesLedgerProduct::getPendingTicketsTotal)
.filter(Objects::nonNull)
.reduce(BigDecimal.ZERO, BigDecimal::add);
+
homeBusinessDto.setMonthPurchaseMoney(receiveAmount.setScale(2, RoundingMode.HALF_UP).toString());
- homeBusinessDto
- .setMonthPurchaseHaveMoney(unReceiptPaymentAmount.setScale(2, RoundingMode.HALF_UP).toString());
+ homeBusinessDto.setMonthPurchaseHaveMoney(unReceiptPaymentAmount.setScale(2, RoundingMode.HALF_UP).toString());
}
// 缁熻搴撳瓨
BigDecimal stockQuantityTotal = stockInventoryMapper.selectTotal();
@@ -465,8 +474,8 @@
}
// 搴旀敹
List<SalesLedger> salesLedgers = salesLedgerMapper.selectList(new LambdaQueryWrapper<SalesLedger>()
- // .ge(SalesLedger::getEntryDate, startDate)
- // .lt(SalesLedger::getEntryDate, endDate)
+ // .ge(SalesLedger::getEntryDate, startDate)
+ // .lt(SalesLedger::getEntryDate, endDate)
);
// BigDecimal receivableMoney =
// salesLedgers.stream().map(SalesLedger::getContractAmount).reduce(BigDecimal.ZERO,
@@ -475,8 +484,8 @@
// 搴斾粯
List<PurchaseLedger> procurementRecords = purchaseLedgerMapper
.selectList(new LambdaQueryWrapper<PurchaseLedger>()
- // .ge(PurchaseLedger::getEntryDate, startDate)
- // .lt(PurchaseLedger::getEntryDate, endDate)
+ // .ge(PurchaseLedger::getEntryDate, startDate)
+ // .lt(PurchaseLedger::getEntryDate, endDate)
);
// BigDecimal payableMoney =
// procurementRecords.stream().map(PurchaseLedger::getContractAmount).reduce(BigDecimal.ZERO,
@@ -484,8 +493,8 @@
BigDecimal payableMoney = sumAmount(procurementRecords, PurchaseLedger::getContractAmount);
// 棰勬敹
List<ReceiptPayment> receiptPayments = receiptPaymentMapper.selectList(new LambdaQueryWrapper<ReceiptPayment>()
- // .ge(ReceiptPayment::getReceiptPaymentDate, startDate)
- // .lt(ReceiptPayment::getReceiptPaymentDate, endDate)
+ // .ge(ReceiptPayment::getReceiptPaymentDate, startDate)
+ // .lt(ReceiptPayment::getReceiptPaymentDate, endDate)
);
// BigDecimal advanceMoney =
// receiptPayments.stream().map(ReceiptPayment::getReceiptPaymentAmount).reduce(BigDecimal.ZERO,
@@ -494,8 +503,8 @@
// 棰勪粯
List<PaymentRegistration> paymentRegistrations = paymentRegistrationMapper
.selectList(new LambdaQueryWrapper<PaymentRegistration>()
- // .ge(PaymentRegistration::getPaymentDate, startDate)
- // .lt(PaymentRegistration::getPaymentDate, endDate)
+ // .ge(PaymentRegistration::getPaymentDate, startDate)
+ // .lt(PaymentRegistration::getPaymentDate, endDate)
);
// BigDecimal prepayMoney =
// paymentRegistrations.stream().map(PaymentRegistration::getCurrentPaymentAmount).reduce(BigDecimal.ZERO,
@@ -559,7 +568,7 @@
productionProgressDto.setCompletedOrderDetails(productOrderDtos);
long totalCount = productOrderDtos.size();
long count = productOrderDtos.stream().filter(
- productOrderDto -> productOrderDto.getCompleteQuantity().compareTo(productOrderDto.getQuantity()) >= 0)
+ productOrderDto -> productOrderDto.getCompleteQuantity().compareTo(productOrderDto.getQuantity()) >= 0)
.count();
long count2 = productOrderDtos.stream()
.filter(productOrderDto -> productOrderDto.getCompleteQuantity().compareTo(BigDecimal.ZERO) == 0)
@@ -1079,26 +1088,17 @@
@Override
public List<Map<String, Object>> productInOutAnalysis(Integer type) {
- String targetName;
+ // 0-鍘熸潗鏂� 1-鍗婃垚鍝� 2-鎴愬搧
+ Integer modelType;
if (type == 1) {
- targetName = "鍘熸潗鏂�";
+ modelType = 0;
} else if (type == 2) {
- targetName = "鎴愬搧";
+ modelType = 2;
} else if (type == 3) {
- targetName = "鍗婃垚鍝�";
+ modelType = 1;
} else {
return new ArrayList<>();
}
-
- LambdaQueryWrapper<Product> queryWrapper = new LambdaQueryWrapper<>();
- queryWrapper.eq(Product::getProductName, targetName).isNull(Product::getParentId);
- Product rootCategory = productMapper.selectOne(queryWrapper);
-
- if (rootCategory == null) {
- log.warn("鏈壘鍒板悕绉颁负 {} 鐨勯《绾т骇鍝佸垎绫�", targetName);
- return new ArrayList<>();
- }
- Long rootCategoryId = rootCategory.getId();
LocalDate now = LocalDate.now();
DateTimeFormatter displayDtf = DateTimeFormatter.ofPattern("M/d");
@@ -1106,10 +1106,10 @@
String startDate = now.minusDays(6).toString();
String endDate = now.toString();
- List<Map<String, Object>> inCounts = stockInventoryMapper.selectDailyStockInCounts(rootCategoryId, startDate,
+ List<Map<String, Object>> inCounts = stockInventoryMapper.selectDailyStockInCounts(modelType, startDate,
endDate + " 23:59:59");
- List<Map<String, Object>> outCounts = stockInventoryMapper.selectDailyStockOutCounts(rootCategoryId, startDate,
+ List<Map<String, Object>> outCounts = stockInventoryMapper.selectDailyStockOutCounts(modelType, startDate,
endDate + " 23:59:59");
Map<LocalDate, BigDecimal> inMap = inCounts.stream()
@@ -1144,12 +1144,6 @@
public List<MapDto> productTurnoverDays() {
return homeMapper.productTurnoverDays();
}
-
- @Autowired
- private AccountExpenseMapper accountExpenseMapper;
-
- @Autowired
- private AccountIncomeMapper accountIncomeMapper;
public List<Map<String, Object>> incomeExpenseAnalysis(Integer type) {
@@ -1274,36 +1268,21 @@
String startStr = startDate.format(DateTimeFormatter.ofPattern("yyyy-MM-dd"));
String endStr = endDate.format(DateTimeFormatter.ofPattern("yyyy-MM-dd"));
- // List<IncomeExpenseAnalysisDto> incomeList =
- // salesLedgerMapper.selectIncomeStats(startStr, endStr, dateFormat);
- List<IncomeExpenseAnalysisDto> incomeList = new ArrayList<>();
- List<IncomeExpenseAnalysisDto> purchaseList = purchaseLedgerMapper.selectPurchaseStats(startStr, endStr,
- dateFormat);
- List<IncomeExpenseAnalysisDto> expenseList = accountExpenseMapper.selectAccountExpenseStats(startStr, endStr,
- dateFormat);
+ List<IncomeExpenseAnalysisDto> incomeList = accountIncomeMapper.selectIncomeStats(startStr, endStr, dateFormat);
+ List<IncomeExpenseAnalysisDto> expenseList = accountExpenseMapper.selectAccountExpenseStats(startStr, endStr, dateFormat);
Map<String, BigDecimal> incomeMap = incomeList.stream().collect(Collectors
- .toMap(IncomeExpenseAnalysisDto::getDateStr, IncomeExpenseAnalysisDto::getAmount, BigDecimal::add));
- Map<String, BigDecimal> purchaseMap = purchaseList.stream().collect(Collectors
.toMap(IncomeExpenseAnalysisDto::getDateStr, IncomeExpenseAnalysisDto::getAmount, BigDecimal::add));
Map<String, BigDecimal> expenseMap = expenseList.stream().collect(Collectors
.toMap(IncomeExpenseAnalysisDto::getDateStr, IncomeExpenseAnalysisDto::getAmount, BigDecimal::add));
List<MapDto> result = new ArrayList<>();
-
for (String month : months) {
MapDto dto = new MapDto();
dto.setName(month);
-
BigDecimal income = incomeMap.getOrDefault(month, BigDecimal.ZERO);
-
- BigDecimal purchase = purchaseMap.getOrDefault(month, BigDecimal.ZERO);
- income = BigDecimal.ZERO;
BigDecimal expense = expenseMap.getOrDefault(month, BigDecimal.ZERO);
- BigDecimal totalExpense = purchase.add(expense);
-
- BigDecimal profit = income.subtract(totalExpense);
-
+ BigDecimal profit = income.subtract(expense);
dto.setValue(profit.setScale(2, RoundingMode.HALF_UP).toString());
result.add(dto);
}
@@ -1948,7 +1927,7 @@
endDate = today.with(DayOfWeek.SUNDAY);
}
- return new LocalDate[] { startDate, endDate };
+ return new LocalDate[]{startDate, endDate};
}
private QualityQualifiedAnalysisDto buildQualifiedAnalysis(List<QualityInspect> list) {
@@ -2125,33 +2104,23 @@
continue;
}
- // 鎵惧埌浜у搧澶х被
- Product parent = product.getParentId() == null
- ? product
- : productMap.get(product.getParentId());
+ // 鎵惧埌浜у搧搴撴牴鑺傜偣锛堜骇鍝佸ぇ绫伙級
+ Product rootProduct = findRootProduct(product, productMap);
- if (parent == null) {
- continue;
- }
+ String categoryTitle = resolveProductCategory(rootProduct.getProductName());
- switch (parent.getProductName()) {
- case "鍘熸潗鏂�":
- rawMaterialCount = rawMaterialCount.add(quantity);
- break;
- case "鍗婃垚鍝�":
- semiFinishedCount = semiFinishedCount.add(quantity);
- break;
- case "鎴愬搧":
- finishedCount = finishedCount.add(quantity);
- break;
- default:
- break;
+ if ("鍘熸潗鏂�".equals(categoryTitle)) {
+ rawMaterialCount = rawMaterialCount.add(quantity);
+ } else if ("鍗婃垚鍝�".equals(categoryTitle)) {
+ semiFinishedCount = semiFinishedCount.add(quantity);
+ } else if ("鎴愬搧".equals(categoryTitle)) {
+ finishedCount = finishedCount.add(quantity);
}
// 缁勮鏄庣粏
NonComplianceWarningDto.Item child = new NonComplianceWarningDto.Item();
// child.setProductTitle(item.getProductName());
- child.setParentProductTitle(parent.getProductName());
+ child.setParentProductTitle(categoryTitle);
child.setProductTitle(item.getProductName());
child.setDescription(item.getDefectivePhenomena());
child.setDate(formatDate(item.getCheckTime()));
@@ -2168,6 +2137,42 @@
dto.setChildren(children);
return dto;
+ }
+
+ /**
+ * 鍚戜笂鏌ユ壘浜у搧搴撴牴鑺傜偣锛堜骇鍝佸ぇ绫伙級
+ */
+ private Product findRootProduct(Product product, Map<Long, Product> productMap) {
+ Product current = product;
+ int depth = 0;
+ while (current.getParentId() != null && depth++ < 20) {
+ Product parent = productMap.get(current.getParentId());
+ if (parent == null) {
+ break;
+ }
+ current = parent;
+ }
+ return current;
+ }
+
+ /**
+ * 鏍规嵁浜у搧搴撴牴鑺傜偣鍚嶇О璇嗗埆浜у搧澶х被锛氬師鏉愭枡/鍗婃垚鍝�/鎴愬搧
+ * 娉ㄦ剰鍏堝垽鏂崐鎴愬搧锛岄伩鍏嶈鎴愬搧鍖呭惈
+ */
+ private String resolveProductCategory(String rootName) {
+ if (rootName == null) {
+ return "";
+ }
+ if (rootName.contains("鍗婃垚鍝�")) {
+ return "鍗婃垚鍝�";
+ }
+ if (rootName.contains("鎴愬搧")) {
+ return "鎴愬搧";
+ }
+ if (rootName.contains("鍘熸潗鏂�")) {
+ return "鍘熸潗鏂�";
+ }
+ return rootName;
}
private BigDecimal calcRate(BigDecimal part, BigDecimal total) {
@@ -2194,7 +2199,7 @@
*/
public static String[] lastSevenDaysDateRange() {
LocalDate today = LocalDate.now();
- return new String[] { today.minusDays(6).toString(), today.toString() };
+ return new String[]{today.minusDays(6).toString(), today.toString()};
}
@Override
@@ -2427,7 +2432,7 @@
Map<String, List<QualityInspect>> groupedByCheckResult = qualityInspectList.stream()
.collect(Collectors.groupingBy(QualityInspect::getCheckResult));
List<QualityInspect> qualityInspects = groupedByCheckResult.get("涓嶅悎鏍�");
- if(ObjectUtils.isNull(qualityInspects) || qualityInspects.size()==0){
+ if (ObjectUtils.isNull(qualityInspects) || qualityInspects.size() == 0) {
return null;
}
// 4. 澶勭悊鍥捐〃椤� (Item)
@@ -2493,7 +2498,7 @@
@Override
public List<processDataProductionStatisticsDto> processDataProductionStatistics(Integer type,
- List<Long> processIds) {
+ List<Long> processIds) {
LoginUser loginUser = SecurityUtils.getLoginUser();
Long userId = SecurityUtils.isAdmin(loginUser.getUserId()) ? null : loginUser.getUserId();
--
Gitblit v1.9.3