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/home/service/impl/HomeServiceImpl.java | 393 ++++++++++++++++++++++++++++++++++---------------------
1 files changed, 244 insertions(+), 149 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 fac571b..59f244f 100644
--- a/src/main/java/com/ruoyi/home/service/impl/HomeServiceImpl.java
+++ b/src/main/java/com/ruoyi/home/service/impl/HomeServiceImpl.java
@@ -3,10 +3,18 @@
import com.baomidou.mybatisplus.core.conditions.query.LambdaQueryWrapper;
import com.baomidou.mybatisplus.core.conditions.query.QueryWrapper;
import com.baomidou.mybatisplus.core.toolkit.ObjectUtils;
+import com.baomidou.mybatisplus.extension.plugins.pagination.Page;
+import com.ruoyi.account.bean.dto.purchase.PurchaseInboundDto;
+import com.ruoyi.account.bean.dto.purchase.PurchaseReturnDto;
+import com.ruoyi.account.bean.dto.sales.SalesOutboundDto;
+import com.ruoyi.account.bean.dto.sales.SalesReturnDto;
+import com.ruoyi.account.bean.vo.purchase.PurchaseInboundVo;
+import com.ruoyi.account.bean.vo.purchase.PurchaseReturnVo;
+import com.ruoyi.account.bean.vo.sales.SalesOutboundVo;
+import com.ruoyi.account.bean.vo.sales.SalesReturnVo;
import com.ruoyi.account.mapper.AccountStatementMapper;
import com.ruoyi.account.mapper.purchase.AccountPurchasePaymentMapper;
import com.ruoyi.account.mapper.sales.AccountSalesCollectionMapper;
-import com.ruoyi.account.pojo.AccountStatement;
import com.ruoyi.account.pojo.purchase.AccountPurchasePayment;
import com.ruoyi.account.pojo.sales.AccountSalesCollection;
import com.ruoyi.approve.mapper.ApproveProcessMapper;
@@ -29,11 +37,13 @@
import com.ruoyi.home.dto.*;
import com.ruoyi.home.mapper.HomeMapper;
import com.ruoyi.home.service.HomeService;
+import com.ruoyi.procurementrecord.mapper.ReturnManagementMapper;
import com.ruoyi.production.bean.dto.ProductionProductOutputDto;
import com.ruoyi.production.mapper.*;
import com.ruoyi.project.system.domain.SysDept;
import com.ruoyi.project.system.mapper.SysDeptMapper;
import com.ruoyi.purchase.mapper.PurchaseLedgerMapper;
+import com.ruoyi.purchase.mapper.PurchaseReturnOrdersMapper;
import com.ruoyi.purchase.pojo.PurchaseLedger;
import com.ruoyi.quality.mapper.QualityInspectMapper;
import com.ruoyi.quality.mapper.QualityUnqualifiedMapper;
@@ -45,7 +55,9 @@
import com.ruoyi.sales.pojo.SalesLedgerProduct;
import com.ruoyi.staff.mapper.StaffOnJobMapper;
import com.ruoyi.staff.pojo.StaffOnJob;
+import com.ruoyi.stock.mapper.StockInRecordMapper;
import com.ruoyi.stock.mapper.StockInventoryMapper;
+import com.ruoyi.stock.mapper.StockOutRecordMapper;
import lombok.RequiredArgsConstructor;
import lombok.extern.slf4j.Slf4j;
import org.springframework.stereotype.Service;
@@ -71,6 +83,10 @@
public class HomeServiceImpl implements HomeService {
private final SalesLedgerMapper salesLedgerMapper;
+ private final StockOutRecordMapper stockOutRecordMapper;
+ private final ReturnManagementMapper returnManagementMapper;
+ private final StockInRecordMapper stockInRecordMapper;
+ private final PurchaseReturnOrdersMapper purchaseReturnOrdersMapper;
private final PurchaseLedgerMapper purchaseLedgerMapper;
@@ -163,6 +179,34 @@
homeBusinessDto.setMonthPurchaseMoney(receiveAmount.setScale(2, RoundingMode.HALF_UP).toString());
homeBusinessDto.setMonthPurchaseHaveMoney(BigDecimal.ZERO.setScale(2, RoundingMode.HALF_UP).toString());
}
+
+ // 涓婃湀閿�鍞噾棰�
+ YearMonth lastMonth = currentMonth.minusMonths(1);
+ LambdaQueryWrapper<SalesLedger> lastMonthSalesWrapper = new LambdaQueryWrapper<>();
+ lastMonthSalesWrapper.ge(SalesLedger::getEntryDate, lastMonth.atDay(1).atStartOfDay())
+ .lt(SalesLedger::getEntryDate, lastMonth.plusMonths(1).atDay(1).atStartOfDay());
+ List<SalesLedger> lastMonthSalesLedgers = salesLedgerMapper.selectList(lastMonthSalesWrapper);
+ if (!CollectionUtils.isEmpty(lastMonthSalesLedgers)) {
+ BigDecimal lastMonthContractAmount = lastMonthSalesLedgers.stream()
+ .map(SalesLedger::getContractAmount)
+ .filter(Objects::nonNull)
+ .reduce(BigDecimal.ZERO, BigDecimal::add);
+ homeBusinessDto.setLastMonthSaleMoney(lastMonthContractAmount.setScale(2, RoundingMode.HALF_UP).toString());
+ }
+
+ // 涓婃湀閲囪喘閲戦
+ LambdaQueryWrapper<PurchaseLedger> lastMonthPurchaseWrapper = new LambdaQueryWrapper<>();
+ lastMonthPurchaseWrapper.ge(PurchaseLedger::getEntryDate, lastMonth.atDay(1).atStartOfDay())
+ .lt(PurchaseLedger::getEntryDate, lastMonth.plusMonths(1).atDay(1).atStartOfDay());
+ List<PurchaseLedger> lastMonthPurchaseLedgers = purchaseLedgerMapper.selectList(lastMonthPurchaseWrapper);
+ if (!CollectionUtils.isEmpty(lastMonthPurchaseLedgers)) {
+ BigDecimal lastMonthPurchaseAmount = lastMonthPurchaseLedgers.stream()
+ .map(PurchaseLedger::getContractAmount)
+ .filter(Objects::nonNull)
+ .reduce(BigDecimal.ZERO, BigDecimal::add);
+ homeBusinessDto.setLastMonthPurchaseMoney(lastMonthPurchaseAmount.setScale(2, RoundingMode.HALF_UP).toString());
+ }
+
// 缁熻搴撳瓨
BigDecimal stockQuantityTotal = stockInventoryMapper.selectTotal();
homeBusinessDto.setInventoryNum(stockQuantityTotal.setScale(2, RoundingMode.HALF_UP).toString());
@@ -297,19 +341,35 @@
queryWrapper.ge(QualityInspect::getCheckTime, monthStart.toString())
.le(QualityInspect::getCheckTime, monthEnd.toString());
List<QualityInspect> monthInspects = qualityStatisticsMapper.selectList(queryWrapper);
+
+ // 缁熻鎬绘暟閲忥紙鍚堟牸鏁伴噺 + 涓嶅悎鏍兼暟閲忥級
BigDecimal reduce = monthInspects.stream()
.filter(inspect -> inspect.getInspectType().equals(0))
- .map(QualityInspect::getQuantity)
+ .map(inspect -> {
+ BigDecimal qualified = inspect.getQualifiedQuantity() != null ? inspect.getQualifiedQuantity() : BigDecimal.ZERO;
+ BigDecimal unqualified = inspect.getUnqualifiedQuantity() != null ? inspect.getUnqualifiedQuantity() : BigDecimal.ZERO;
+ return qualified.add(unqualified);
+ })
.reduce(BigDecimal.ZERO, BigDecimal::add);
supplierNum = supplierNum.add(reduce);
+
BigDecimal reduce1 = monthInspects.stream()
.filter(inspect -> inspect.getInspectType().equals(1))
- .map(QualityInspect::getQuantity)
+ .map(inspect -> {
+ BigDecimal qualified = inspect.getQualifiedQuantity() != null ? inspect.getQualifiedQuantity() : BigDecimal.ZERO;
+ BigDecimal unqualified = inspect.getUnqualifiedQuantity() != null ? inspect.getUnqualifiedQuantity() : BigDecimal.ZERO;
+ return qualified.add(unqualified);
+ })
.reduce(BigDecimal.ZERO, BigDecimal::add);
processNum = processNum.add(reduce1);
+
BigDecimal reduce2 = monthInspects.stream()
.filter(inspect -> inspect.getInspectType().equals(2))
- .map(QualityInspect::getQuantity)
+ .map(inspect -> {
+ BigDecimal qualified = inspect.getQualifiedQuantity() != null ? inspect.getQualifiedQuantity() : BigDecimal.ZERO;
+ BigDecimal unqualified = inspect.getUnqualifiedQuantity() != null ? inspect.getUnqualifiedQuantity() : BigDecimal.ZERO;
+ return qualified.add(unqualified);
+ })
.reduce(BigDecimal.ZERO, BigDecimal::add);
factoryNum = factoryNum.add(reduce2);
@@ -319,25 +379,22 @@
// 1. 渚涘簲鍟嗘楠岋紙绫诲瀷0锛�- 鍚堟牸鏁伴噺
BigDecimal supplierQualified = monthInspects.stream()
- .filter(inspect -> inspect.getInspectType().equals(0)
- && "鍚堟牸".equals(inspect.getCheckResult()))
- .map(QualityInspect::getQuantity)
+ .filter(inspect -> inspect.getInspectType().equals(0))
+ .map(inspect -> inspect.getQualifiedQuantity() != null ? inspect.getQualifiedQuantity() : BigDecimal.ZERO)
.reduce(BigDecimal.ZERO, BigDecimal::add);
item.setSupplierNum(supplierQualified);
// 2. 宸ュ簭妫�楠岋紙绫诲瀷1锛�- 鍚堟牸鏁伴噺
BigDecimal processQualified = monthInspects.stream()
- .filter(inspect -> inspect.getInspectType().equals(1)
- && "鍚堟牸".equals(inspect.getCheckResult()))
- .map(QualityInspect::getQuantity)
+ .filter(inspect -> inspect.getInspectType().equals(1))
+ .map(inspect -> inspect.getQualifiedQuantity() != null ? inspect.getQualifiedQuantity() : BigDecimal.ZERO)
.reduce(BigDecimal.ZERO, BigDecimal::add);
item.setProcessNum(processQualified);
// 3. 宸ュ巶妫�楠岋紙绫诲瀷2锛�- 鍚堟牸鏁伴噺
BigDecimal factoryQualified = monthInspects.stream()
- .filter(inspect -> inspect.getInspectType().equals(2)
- && "鍚堟牸".equals(inspect.getCheckResult()))
- .map(QualityInspect::getQuantity)
+ .filter(inspect -> inspect.getInspectType().equals(2))
+ .map(inspect -> inspect.getQualifiedQuantity() != null ? inspect.getQualifiedQuantity() : BigDecimal.ZERO)
.reduce(BigDecimal.ZERO, BigDecimal::add);
item.setFactoryNum(factoryQualified);
@@ -404,14 +461,26 @@
LocalDate startDate = range[0];
LocalDate endDate = range[1];
+ //閿�鍞嚭搴�
BigDecimal receivableBase = sumSalesContractAmount(startDate, endDate);
+ //閿�鍞��璐�
+ BigDecimal salesReturnAmount = sumSalesReturnAmount(startDate, endDate);
+ //閲囪喘鍏ュ簱
BigDecimal payableBase = sumPurchaseContractAmount(startDate, endDate);
+ //閲囪喘閫�璐�
+ BigDecimal purchaseReturnAmount = sumPurchaseReturnAmount(startDate, endDate);
+ //鏀舵
BigDecimal advanceMoney = sumCollectionAmount(startDate, endDate);
+ //浠樻
BigDecimal prepayMoney = sumPaymentAmount(startDate, endDate);
- dto.setReceivableMoney(scaleMoney(maxZero(receivableBase.subtract(advanceMoney))));
- dto.setPayableMoney(scaleMoney(maxZero(payableBase.subtract(prepayMoney))));
+ //搴旀敹閲戦=閿�鍞嚭搴�-閿�鍞��璐�
+ dto.setReceivableMoney(scaleMoney(maxZero(receivableBase.subtract(salesReturnAmount))));
+ //搴斾粯閲戦=閲囪喘鍏ュ簱-閲囪喘閫�璐�
+ dto.setPayableMoney(scaleMoney(maxZero(payableBase.subtract(purchaseReturnAmount))));
+ //鏀舵閲戦=鏀舵鍗�
dto.setAdvanceMoney(scaleMoney(advanceMoney));
+ //浠樻閲戦=浠樻鍗�
dto.setPrepayMoney(scaleMoney(prepayMoney));
return dto;
}
@@ -1226,33 +1295,21 @@
YearMonth currentMonth = YearMonth.from(today);
LocalDate startDate = currentMonth.atDay(1);
LocalDate endDate = currentMonth.atEndOfMonth();
-
+ //鏀舵
BigDecimal monthlyIncome = sumCollectionAmount(startDate, endDate);
+ //閿�鍞嚭搴�
BigDecimal receivableBase = sumSalesContractAmount(startDate, endDate);
- String collectionRate = toRateString(monthlyIncome, receivableBase);
-
- String currentMonthText = currentMonth.toString();
- List<AccountStatement> receivableStatements = defaultList(accountStatementMapper.selectList(
- new LambdaQueryWrapper<AccountStatement>()
- .eq(AccountStatement::getAccountType, 1)
- .le(AccountStatement::getStatementMonth, currentMonthText)));
-
- long overdueNum = receivableStatements.stream()
- .filter(item -> item.getStatementMonth() != null && item.getStatementMonth().compareTo(currentMonthText) < 0)
- .filter(item -> defaultDecimal(item.getClosingBalance()).compareTo(BigDecimal.ZERO) > 0)
- .count();
-
- long totalReceivableCount = receivableStatements.size();
- String overdueRate = totalReceivableCount == 0
- ? "0.00"
- : BigDecimal.valueOf(overdueNum)
- .multiply(BigDecimal.valueOf(100))
- .divide(BigDecimal.valueOf(totalReceivableCount), 2, RoundingMode.HALF_UP)
- .toString();
-
+ //閿�鍞��璐�
+ BigDecimal salesReturnAmount = sumSalesReturnAmount(startDate, endDate);
+ //鍥炴鐜�=鏀舵/(閿�鍞嚭搴�-閿�鍞��璐�)搴旀敹
+ String collectionRate = toRateString(monthlyIncome, receivableBase.subtract(salesReturnAmount));
+ //閫炬湡鏁�=(閿�鍞嚭搴撻噾棰�-閿�鍞��璐ч噾棰�)搴旀敹閲戦-鏀舵閲戦
+ BigDecimal overdueAmount = receivableBase.subtract(salesReturnAmount).subtract(monthlyIncome);
+ //閫炬湡鐜�=閫炬湡鏁�/搴旀敹閲戦
+ String overdueRate = toRateString(overdueAmount, receivableBase);
dto.setMonthlyIncome(scaleMoney(monthlyIncome));
dto.setCollectionRate(collectionRate);
- dto.setOverdueNum(BigDecimal.valueOf(overdueNum));
+ dto.setOverdueNum(overdueAmount);
dto.setOverdueRate(overdueRate);
return dto;
}
@@ -1264,16 +1321,25 @@
YearMonth currentMonth = YearMonth.from(today);
LocalDate startDate = currentMonth.atDay(1);
LocalDate endDate = currentMonth.atEndOfMonth();
-
+ //鏀嚭
BigDecimal monthlyExpenditure = sumPaymentAmount(startDate, endDate);
+ //閲囪喘鍏ュ簱
BigDecimal payableBase = sumPurchaseContractAmount(startDate, endDate);
+ //閲囪喘閫�璐�
+ BigDecimal purchaseReturnAmount = sumPurchaseReturnAmount(startDate, endDate);
+ //浠樻鐜�=浠樻/(閲囪喘鍏ュ簱-閲囪喘閫�璐�)搴斾粯
+ String paymentRate = toRateString(monthlyExpenditure, payableBase.subtract(purchaseReturnAmount));
+ //鏀舵
BigDecimal monthlyIncome = sumCollectionAmount(startDate, endDate);
+ //姣涘埄娑�= 鏀舵-鏀嚭
BigDecimal grossProfit = monthlyIncome.subtract(monthlyExpenditure);
+ //鍒╂鼎鐜�=姣涘埄娑�/鏀舵
+ String profitMarginRate = toRateString(grossProfit, monthlyIncome);
dto.setMonthlyExpenditure(scaleMoney(monthlyExpenditure));
- dto.setPaymentRate(toRateString(monthlyExpenditure, payableBase));
+ dto.setPaymentRate(paymentRate);
dto.setGrossProfit(scaleMoney(grossProfit));
- dto.setProfitMarginRate(toRateString(grossProfit, monthlyIncome));
+ dto.setProfitMarginRate(profitMarginRate);
return dto;
}
@@ -1655,14 +1721,15 @@
LocalDate endDate = range[1];
String startStr = startDate.toString();
- String endStr = endDate.toString();
+ // 浣跨敤鍖洪棿鍙冲紑锛�< endDate + 1 澶╋級淇濊瘉妫�娴嬫椂闂村惈鏃跺垎绉掓椂涔熻兘瑕嗙洊鍒� endDate 褰撳ぉ
+ String endExclusiveStr = endDate.plusDays(1).toString();
List<QualityInspect> list = qualityInspectMapper.selectList(
new LambdaQueryWrapper<QualityInspect>()
.eq(QualityInspect::getInspectType, inspectType)
.eq(QualityInspect::getInspectState, 1)
.ge(QualityInspect::getCheckTime, startStr)
- .le(QualityInspect::getCheckTime, endStr));
+ .lt(QualityInspect::getCheckTime, endExclusiveStr));
return buildQualifiedAnalysis(list);
}
@@ -1701,8 +1768,8 @@
QualityQualifiedAnalysisDto dto = new QualityQualifiedAnalysisDto();
if (CollectionUtils.isEmpty(list)) {
- dto.setQualifiedCount(0);
- dto.setUnqualifiedCount(0);
+ dto.setQualifiedCount(BigDecimal.valueOf(0));
+ dto.setUnqualifiedCount(BigDecimal.valueOf(0));
dto.setQualifiedRate(BigDecimal.ZERO.setScale(2));
dto.setUnqualifiedRate(BigDecimal.ZERO.setScale(2));
return dto;
@@ -1712,17 +1779,14 @@
BigDecimal unqualifiedCount = BigDecimal.ZERO;
for (QualityInspect item : list) {
- if ("鍚堟牸".equals(item.getCheckResult())) {
- qualifiedCount = qualifiedCount.add(item.getQuantity());
- } else {
- unqualifiedCount = unqualifiedCount.add(item.getQuantity());
- }
+ qualifiedCount = qualifiedCount.add(item.getQualifiedQuantity() != null ? item.getQualifiedQuantity() : BigDecimal.ZERO);
+ unqualifiedCount = unqualifiedCount.add(item.getUnqualifiedQuantity() != null ? item.getUnqualifiedQuantity() : BigDecimal.ZERO);
}
BigDecimal totalCount = qualifiedCount.add(unqualifiedCount);
- dto.setQualifiedCount(qualifiedCount.intValue());
- dto.setUnqualifiedCount(unqualifiedCount.intValue());
+ dto.setQualifiedCount(qualifiedCount);
+ dto.setUnqualifiedCount(unqualifiedCount);
if (totalCount.compareTo(BigDecimal.ZERO) == 0) {
dto.setQualifiedRate(BigDecimal.ZERO.setScale(2));
@@ -1745,74 +1809,64 @@
@Override
public QualityInspectionCountDto qualityInspectionCount() {
- String todayStr = LocalDate.now().toString();
- String prevDayStr = LocalDate.now().minusDays(1).toString();
- // 鏌ヨ鍑烘埅姝粖鏃ョ殑鎬绘楠屾暟
- List<QualityInspect> todayList = qualityInspectMapper.selectList(new LambdaQueryWrapper<QualityInspect>()
- .le(QualityInspect::getCheckTime, todayStr));
- // 鏌ヨ鍑烘埅姝㈠墠涓�澶╃殑鎬绘楠屾暟
- List<QualityInspect> prevList = qualityInspectMapper.selectList(new LambdaQueryWrapper<QualityInspect>()
- .le(QualityInspect::getCheckTime, prevDayStr));
- // 璁$畻浠婃棩鐨勬�绘楠屾暟
- BigDecimal todayCount = todayList.stream()
- .map(QualityInspect::getQuantity)
- .reduce(BigDecimal.ZERO, BigDecimal::add);
- // 璁$畻鍓嶄竴澶╃殑鎬绘楠屾暟
- BigDecimal prevCount = prevList.stream()
- .map(QualityInspect::getQuantity)
- .reduce(BigDecimal.ZERO, BigDecimal::add);
+ LocalDate today = LocalDate.now();
+ String todayStartStr = today.toString();
+ String tomorrowStartStr = today.plusDays(1).toString();
+ String yesterdayStartStr = today.minusDays(1).toString();
- // 璁$畻浠婃棩鐩稿鏄ㄥぉ鐨勪竴涓�绘瘮澧為暱
- BigDecimal growthRate = calcGrowthRate(todayCount, prevCount);
+ // 绱鎬绘楠屾暟锛堟埅姝粖鏃� 24:00 涔嬪墠鐨勬墍鏈夎褰曪級
+ BigDecimal totalCount = sumInspectQuantity(null, tomorrowStartStr, null);
+ // 浠婃棩鍗曟棩妫�楠屾暟
+ BigDecimal todayCount = sumInspectQuantity(todayStartStr, tomorrowStartStr, null);
+ // 鏄ㄦ棩鍗曟棩妫�楠屾暟
+ BigDecimal yesterdayCount = sumInspectQuantity(yesterdayStartStr, todayStartStr, null);
+ // 鎬绘楠屾暟鍚屾瘮澧為暱 = (浠婃棩鍗曟棩 - 鏄ㄦ棩鍗曟棩) / 鏄ㄦ棩鍗曟棩 脳 100%
+ BigDecimal growthRate = calcGrowthRate(todayCount, yesterdayCount);
- // 璁$畻浠婂ぉ鐨勫緟瀹屾垚鏁伴噺
- List<QualityInspect> todayPendingList = qualityInspectMapper.selectList(new LambdaQueryWrapper<QualityInspect>()
- .eq(QualityInspect::getInspectState, 0)
- .eq(QualityInspect::getCheckTime, todayStr));
+ // 浠婃棩寰呭畬鎴愶紙inspectState=0锛�
+ BigDecimal todayPendingCount = sumInspectQuantity(todayStartStr, tomorrowStartStr, 0);
+ BigDecimal yesterdayPendingCount = sumInspectQuantity(yesterdayStartStr, todayStartStr, 0);
+ BigDecimal todayPendingCountGrowthRate = calcGrowthRate(todayPendingCount, yesterdayPendingCount);
- // 璁$畻鍓嶄竴澶╃殑寰呭畬鎴愭暟閲�
- List<QualityInspect> prevPendingList = qualityInspectMapper.selectList(new LambdaQueryWrapper<QualityInspect>()
- .eq(QualityInspect::getInspectState, 0)
- .eq(QualityInspect::getCheckTime, prevDayStr));
- // 璁$畻浠婂ぉ鐨勫緟瀹屾垚鏁伴噺
- BigDecimal todayPendingCount = todayPendingList.stream()
- .map(QualityInspect::getQuantity)
- .reduce(BigDecimal.ZERO, BigDecimal::add);
+ // 浠婃棩宸插畬鎴愶紙inspectState=1锛�
+ BigDecimal todayCompletedCount = sumInspectQuantity(todayStartStr, tomorrowStartStr, 1);
+ BigDecimal yesterdayCompletedCount = sumInspectQuantity(yesterdayStartStr, todayStartStr, 1);
+ BigDecimal todayCompletedCountGrowthRate = calcGrowthRate(todayCompletedCount, yesterdayCompletedCount);
- // 璁$畻鍓嶄竴澶╃殑寰呭畬鎴愭暟閲�
- BigDecimal prevPendingCount = prevPendingList.stream()
- .map(QualityInspect::getQuantity)
- .reduce(BigDecimal.ZERO, BigDecimal::add);
- // 璁$畻浠婂ぉ鐨勫緟瀹屾垚鏁伴噺鐩稿鏄ㄥぉ鐨勪竴涓悓姣斿闀�
- BigDecimal todayPendingCountGrowthRate = calcGrowthRate(todayPendingCount, prevPendingCount);
- // 璁$畻浠婂ぉ鐨勫凡瀹屾垚鏁伴噺
- List<QualityInspect> todayCompletedList = qualityInspectMapper
- .selectList(new LambdaQueryWrapper<QualityInspect>()
- .eq(QualityInspect::getInspectState, 1)
- .eq(QualityInspect::getCheckTime, todayStr));
- // 璁$畻鍓嶄竴澶╃殑宸插畬鎴愭暟閲�
- List<QualityInspect> prevCompletedList = qualityInspectMapper
- .selectList(new LambdaQueryWrapper<QualityInspect>()
- .eq(QualityInspect::getInspectState, 1)
- .eq(QualityInspect::getCheckTime, prevDayStr));
- // 璁$畻浠婂ぉ鐨勫凡瀹屾垚鏁伴噺
- BigDecimal todayCompletedCount = todayCompletedList.stream()
- .map(QualityInspect::getQuantity)
- .reduce(BigDecimal.ZERO, BigDecimal::add);
- // 璁$畻鍓嶄竴澶╃殑宸插畬鎴愭暟閲�
- BigDecimal prevCompletedCount = prevCompletedList.stream()
- .map(QualityInspect::getQuantity)
- .reduce(BigDecimal.ZERO, BigDecimal::add);
- // 璁$畻浠婂ぉ鐨勫凡瀹屾垚鏁伴噺鐩稿鏄ㄥぉ鐨勪竴涓悓姣斿闀�
- BigDecimal todayCompletedCountGrowthRate = calcGrowthRate(todayCompletedCount, prevCompletedCount);
QualityInspectionCountDto dto = new QualityInspectionCountDto();
- dto.setTotalCount(todayCount);
+ dto.setTotalCount(totalCount);
dto.setTotalCountGrowthRate(growthRate);
dto.setTodayPendingCount(todayPendingCount);
dto.setTodayPendingCountGrowthRate(todayPendingCountGrowthRate);
dto.setTodayCompletedCount(todayCompletedCount);
dto.setTodayCompletedCountGrowthRate(todayCompletedCountGrowthRate);
return dto;
+ }
+
+ /**
+ * 閫氳繃 SQL SUM 鑱氬悎 quality_inspect.quantity锛岄伩鍏嶆妸鍏ㄨ〃鍔犺浇鍒板唴瀛�
+ */
+ private BigDecimal sumInspectQuantity(String startInclusive, String endExclusive, Integer inspectState) {
+ QueryWrapper<QualityInspect> wrapper = new QueryWrapper<>();
+ wrapper.select("COALESCE(SUM(quantity), 0) AS total");
+ if (startInclusive != null) {
+ wrapper.ge("check_time", startInclusive);
+ }
+ if (endExclusive != null) {
+ wrapper.lt("check_time", endExclusive);
+ }
+ if (inspectState != null) {
+ wrapper.eq("inspect_state", inspectState);
+ }
+ List<Map<String, Object>> rows = qualityInspectMapper.selectMaps(wrapper);
+ if (rows == null || rows.isEmpty()) {
+ return BigDecimal.ZERO;
+ }
+ Object total = rows.get(0).get("total");
+ if (total == null) {
+ return BigDecimal.ZERO;
+ }
+ return total instanceof BigDecimal ? (BigDecimal) total : new BigDecimal(total.toString());
}
private BigDecimal calcGrowthRate(BigDecimal today, BigDecimal prev) {
@@ -1829,14 +1883,14 @@
public NonComplianceWarningDto nonComplianceWarning() {
String[] range = lastSevenDaysDateRange();
String startStr = range[0];
- String endStr = range[1];
+ String endExclusiveStr = range[1];
// 鏌ヨ杩戜竷澶╁凡澶勭悊涓嶅悎鏍兼暟鎹�
List<QualityUnqualified> list = qualityUnqualifiedMapper.selectList(
new LambdaQueryWrapper<QualityUnqualified>()
.eq(QualityUnqualified::getInspectState, 1)
.ge(QualityUnqualified::getCheckTime, startStr)
- .le(QualityUnqualified::getCheckTime, endStr));
+ .lt(QualityUnqualified::getCheckTime, endExclusiveStr));
NonComplianceWarningDto dto = new NonComplianceWarningDto();
@@ -1935,24 +1989,24 @@
}
/**
- * 鑾峰彇杩戜竷澶╃殑鏃ユ湡鍖洪棿锛堜粎鍚勾鏈堟棩锛�
+ * 鑾峰彇杩戜竷澶╃殑鏃ユ湡鍖洪棿锛堜粎鍚勾鏈堟棩锛夛細杩斿洖 [start, endExclusive] 鈥斺�� endExclusive 鏄粖澶� + 1 澶╋紝渚夸簬浣跨敤 lt 鍖呭惈浠婂ぉ鍏ㄩ儴
*/
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.plusDays(1).toString()};
}
@Override
public List<CompletedInspectionCountDto> completedInspectionCount() {
String[] range = lastSevenDaysDateRange();
String startStr = range[0];
- String endStr = range[1];
+ String endExclusiveStr = range[1];
// 鏌ヨ杩戜竷澶╁凡瀹屾垚鐨勬楠屾暟鎹�
List<QualityInspect> list = qualityInspectMapper.selectList(new LambdaQueryWrapper<QualityInspect>()
.eq(QualityInspect::getInspectState, 1)
.ge(QualityInspect::getCheckTime, startStr)
- .le(QualityInspect::getCheckTime, endStr));
+ .lt(QualityInspect::getCheckTime, endExclusiveStr));
DateTimeFormatter formatter = DateTimeFormatter.ofPattern("MM-dd");
@@ -1985,13 +2039,11 @@
continue;
}
- BigDecimal quantity = item.getQuantity();
+ BigDecimal qualifiedQty = item.getQualifiedQuantity() != null ? item.getQualifiedQuantity() : BigDecimal.ZERO;
+ BigDecimal unqualifiedQty = item.getUnqualifiedQuantity() != null ? item.getUnqualifiedQuantity() : BigDecimal.ZERO;
- if ("鍚堟牸".equals(item.getCheckResult())) {
- dto.setQualifiedCount(dto.getQualifiedCount().add(quantity));
- } else {
- dto.setUnqualifiedCount(dto.getUnqualifiedCount().add(quantity));
- }
+ dto.setQualifiedCount(dto.getQualifiedCount().add(qualifiedQty));
+ dto.setUnqualifiedCount(dto.getUnqualifiedCount().add(unqualifiedQty));
}
// 璁$畻鍚堟牸鐜�
@@ -2006,8 +2058,15 @@
@Override
public List<UnqualifiedProductRankDto> unqualifiedProductRanking() {
+ // 闄愬畾杩� 30 澶╋紝閬垮厤鍏ㄨ〃鍔犺浇
+ LocalDate today = LocalDate.now();
+ String startStr = today.minusDays(29).toString();
+ String endExclusiveStr = today.plusDays(1).toString();
+
List<QualityInspect> list = qualityInspectMapper.selectList(new LambdaQueryWrapper<QualityInspect>()
- .eq(QualityInspect::getInspectState, 1));
+ .eq(QualityInspect::getInspectState, 1)
+ .ge(QualityInspect::getCheckTime, startStr)
+ .lt(QualityInspect::getCheckTime, endExclusiveStr));
if (CollectionUtils.isEmpty(list)) {
return new ArrayList<>();
@@ -2032,14 +2091,12 @@
BigDecimal unqualifiedCount = BigDecimal.ZERO;
for (QualityInspect item : items) {
- BigDecimal qty = item.getQuantity();
- totalCount = totalCount.add(qty);
+ BigDecimal qualifiedQty = item.getQualifiedQuantity() != null ? item.getQualifiedQuantity() : BigDecimal.ZERO;
+ BigDecimal unqualifiedQty = item.getUnqualifiedQuantity() != null ? item.getUnqualifiedQuantity() : BigDecimal.ZERO;
- if ("鍚堟牸".equals(item.getCheckResult())) {
- qualifiedCount = qualifiedCount.add(qty);
- } else {
- unqualifiedCount = unqualifiedCount.add(qty);
- }
+ totalCount = totalCount.add(qualifiedQty.add(unqualifiedQty));
+ qualifiedCount = qualifiedCount.add(qualifiedQty);
+ unqualifiedCount = unqualifiedCount.add(unqualifiedQty);
}
if (totalCount.compareTo(BigDecimal.ZERO) == 0) {
@@ -2160,7 +2217,7 @@
List<QualityInspect> qualityInspectList = qualityInspectMapper
.selectList(new LambdaQueryWrapper<QualityInspect>()
.ge(QualityInspect::getCheckTime, startDate.toString())
- .le(QualityInspect::getCheckTime, endDate.toString())
+ .lt(QualityInspect::getCheckTime, endDate.plusDays(1).toString())
.eq(QualityInspect::getInspectState, 1));
QualityStatisticsDto dto = new QualityStatisticsDto();
@@ -2168,13 +2225,17 @@
dto.setProcessNum(sumQuantity(qualityInspectList, 1)); // 杩囩▼
dto.setFactoryNum(sumQuantity(qualityInspectList, 2)); // 鍑哄巶
- // 鍋囪 qualityInspectList 鏄竴涓� List<QualityInspect> 绫诲瀷鐨勯泦鍚�
- Map<String, List<QualityInspect>> groupedByCheckResult = qualityInspectList.stream()
- .collect(Collectors.groupingBy(QualityInspect::getCheckResult));
- List<QualityInspect> qualityInspects = groupedByCheckResult.get("涓嶅悎鏍�");
- if (ObjectUtils.isNull(qualityInspects) || qualityInspects.size() == 0) {
- return null;
+ // 鏍规嵁 unqualifiedQuantity > 0 绛涢�変笉鍚堟牸璁板綍
+ List<QualityInspect> qualityInspects = qualityInspectList.stream()
+ .filter(i -> i.getUnqualifiedQuantity() != null && i.getUnqualifiedQuantity().compareTo(BigDecimal.ZERO) > 0)
+ .collect(Collectors.toList());
+
+ if (ObjectUtils.isEmpty(qualityInspects)) {
+ // 鍗充娇娌℃湁涓嶅悎鏍艰褰曪紝涔熷簲璇ヨ繑鍥炵粺璁℃暟鎹紝鍙槸鍥捐〃椤逛负绌�
+ dto.setItem(new ArrayList<>());
+ return dto;
}
+
// 4. 澶勭悊鍥捐〃椤� (Item)
List<QualityStatisticsItem> itemList = new ArrayList<>();
@@ -2217,8 +2278,11 @@
private BigDecimal sumQuantity(List<QualityInspect> list, Integer type) {
return list.stream()
.filter(i -> i.getInspectType().equals(type))
- .map(QualityInspect::getQuantity)
- .filter(Objects::nonNull)
+ .map(i -> {
+ BigDecimal qualified = i.getQualifiedQuantity() != null ? i.getQualifiedQuantity() : BigDecimal.ZERO;
+ BigDecimal unqualified = i.getUnqualifiedQuantity() != null ? i.getUnqualifiedQuantity() : BigDecimal.ZERO;
+ return qualified.add(unqualified);
+ })
.reduce(BigDecimal.ZERO, BigDecimal::add);
}
@@ -2226,11 +2290,18 @@
QualityStatisticsItem item = new QualityStatisticsItem();
item.setDate(dateLabel);
- item.setSupplierNum(list.stream().filter(i -> i.getInspectType() == 0).map(QualityInspect::getQuantity)
+ // 缁熻姣忕妫�楠岀被鍨嬬殑涓嶅悎鏍兼暟閲�
+ item.setSupplierNum(list.stream()
+ .filter(i -> Objects.equals(i.getInspectType(), 0))
+ .map(i -> i.getUnqualifiedQuantity() != null ? i.getUnqualifiedQuantity() : BigDecimal.ZERO)
.reduce(BigDecimal.ZERO, BigDecimal::add));
- item.setProcessNum(list.stream().filter(i -> i.getInspectType() == 1).map(QualityInspect::getQuantity)
+ item.setProcessNum(list.stream()
+ .filter(i -> Objects.equals(i.getInspectType(), 1))
+ .map(i -> i.getUnqualifiedQuantity() != null ? i.getUnqualifiedQuantity() : BigDecimal.ZERO)
.reduce(BigDecimal.ZERO, BigDecimal::add));
- item.setFactoryNum(list.stream().filter(i -> i.getInspectType() == 2).map(QualityInspect::getQuantity)
+ item.setFactoryNum(list.stream()
+ .filter(i -> Objects.equals(i.getInspectType(), 2))
+ .map(i -> i.getUnqualifiedQuantity() != null ? i.getUnqualifiedQuantity() : BigDecimal.ZERO)
.reduce(BigDecimal.ZERO, BigDecimal::add));
return item;
@@ -2297,20 +2368,43 @@
return new LocalDate[]{startDate, endDate};
}
+ //璁$畻鏃ユ湡鍐呯殑閿�鍞嚭搴撻噾棰�
private BigDecimal sumSalesContractAmount(LocalDate startDate, LocalDate endDate) {
- List<SalesLedger> salesLedgers = defaultList(salesLedgerMapper.selectList(new LambdaQueryWrapper<SalesLedger>()
- .ge(SalesLedger::getEntryDate, toDate(startDate))
- .lt(SalesLedger::getEntryDate, toExclusiveEndDate(endDate))));
- return sumAmount(salesLedgers, SalesLedger::getContractAmount);
+ SalesOutboundDto salesOutboundDto = new SalesOutboundDto();
+ salesOutboundDto.setStartDate(startDate);
+ salesOutboundDto.setEndDate(endDate);
+ List<SalesOutboundVo> salesOutboundVos = stockOutRecordMapper.listPageAccountSales(new Page(1, -1), salesOutboundDto).getRecords();
+ return sumAmount(salesOutboundVos, SalesOutboundVo::getOutboundAmount);
}
+ //璁$畻鏃ユ湡鍐呯殑閿�鍞��璐ч噾棰�
+ private BigDecimal sumSalesReturnAmount(LocalDate startDate, LocalDate endDate) {
+ SalesReturnDto salesReturnDto = new SalesReturnDto();
+ salesReturnDto.setStartDate(startDate);
+ salesReturnDto.setEndDate(endDate);
+ List<SalesReturnVo> salesReturnVos = returnManagementMapper.listPageAccountSalesReturn(new Page(1, -1), salesReturnDto).getRecords();
+ return sumAmount(salesReturnVos, SalesReturnVo::getRefundAmount);
+ }
+
+ //璁$畻鏃ユ湡鍐呯殑閲囪喘鍏ュ簱閲戦
private BigDecimal sumPurchaseContractAmount(LocalDate startDate, LocalDate endDate) {
- List<PurchaseLedger> purchaseLedgers = defaultList(purchaseLedgerMapper.selectList(new LambdaQueryWrapper<PurchaseLedger>()
- .ge(PurchaseLedger::getEntryDate, toDate(startDate))
- .lt(PurchaseLedger::getEntryDate, toExclusiveEndDate(endDate))));
- return sumAmount(purchaseLedgers, PurchaseLedger::getContractAmount);
+ PurchaseInboundDto purchaseInboundDto = new PurchaseInboundDto();
+ purchaseInboundDto.setStartDate(startDate);
+ purchaseInboundDto.setEndDate(endDate);
+ List<PurchaseInboundVo> purchaseInboundVos = stockInRecordMapper.listPageAccountPurchase(new Page(1, -1), purchaseInboundDto).getRecords();
+ return sumAmount(purchaseInboundVos, PurchaseInboundVo::getInboundAmount);
}
+ //璁$畻鏃ユ湡鍐呯殑閲囪喘閫�璐ч噾棰�
+ private BigDecimal sumPurchaseReturnAmount(LocalDate startDate, LocalDate endDate) {
+ PurchaseReturnDto purchaseReturnDto = new PurchaseReturnDto();
+ purchaseReturnDto.setStartDate(startDate);
+ purchaseReturnDto.setEndDate(endDate);
+ List<PurchaseReturnVo> purchaseReturnVos = purchaseReturnOrdersMapper.listPageAccountPurchaseReturn(new Page(1, -1), purchaseReturnDto).getRecords();
+ return sumAmount(purchaseReturnVos, PurchaseReturnVo::getTotalAmount);
+ }
+
+ //璁$畻鏃ユ湡鍐呯殑鎬绘敹娆鹃噾棰�
private BigDecimal sumCollectionAmount(LocalDate startDate, LocalDate endDate) {
List<AccountSalesCollection> collections = defaultList(accountSalesCollectionMapper.selectList(
new LambdaQueryWrapper<AccountSalesCollection>()
@@ -2319,6 +2413,7 @@
return sumAmount(collections, AccountSalesCollection::getCollectionAmount);
}
+ //璁$畻鏃ユ湡鍐呯殑鎬讳粯娆鹃噾棰�
private BigDecimal sumPaymentAmount(LocalDate startDate, LocalDate endDate) {
List<AccountPurchasePayment> payments = defaultList(accountPurchasePaymentMapper.selectList(
new LambdaQueryWrapper<AccountPurchasePayment>()
--
Gitblit v1.9.3