From 161c5e12e3d7f5e2f4345ed3609fe05037ea2b23 Mon Sep 17 00:00:00 2001
From: buhuazhen <hua100783@gmail.com>
Date: 星期一, 25 五月 2026 17:15:05 +0800
Subject: [PATCH] feat: 大屏调整
---
src/main/java/com/ruoyi/home/controller/HomeController.java | 8 ++
src/main/java/com/ruoyi/home/service/HomeService.java | 2
src/main/java/com/ruoyi/account/service/impl/AccountExpenseServiceImpl.java | 29 ++++++---
src/main/java/com/ruoyi/home/service/impl/HomeServiceImpl.java | 90 ++++++++++++++++++++++++++++++
4 files changed, 119 insertions(+), 10 deletions(-)
diff --git a/src/main/java/com/ruoyi/account/service/impl/AccountExpenseServiceImpl.java b/src/main/java/com/ruoyi/account/service/impl/AccountExpenseServiceImpl.java
index 446efca..feb6522 100644
--- a/src/main/java/com/ruoyi/account/service/impl/AccountExpenseServiceImpl.java
+++ b/src/main/java/com/ruoyi/account/service/impl/AccountExpenseServiceImpl.java
@@ -155,35 +155,44 @@
@Override
public Map<String, List<String>> analysis() {
- // 鑾峰彇鏈懆鐨勬椂闂磋寖鍥�
- LocalDate startOfWeek = LocalDate.now().with(DayOfWeek.MONDAY);
- LocalDate endOfWeek = LocalDate.now().with(DayOfWeek.SUNDAY);
+ // 缁熻鏈�杩�12涓湀鐨勬暟鎹�
+ LocalDate today = LocalDate.now();
Map<String, List<String>> result = new HashMap<>();
- List<String> days = new ArrayList<>();
+ List<String> months = new ArrayList<>();
List<String> totalIncomeList = new ArrayList<>();
List<String> totalExpenseList = new ArrayList<>();
List<String> netIncomeList = new ArrayList<>();
- // 鏍规嵁鏃堕棿鑼冨洿寰幆鏌ヨ姣忎竴澶╃殑鎬绘敹鍏ワ紝鎬绘敮鍑�,鍑�鏀跺叆锛堟�绘敹鍏�-鎬绘敮鍑猴級
- for (LocalDate date = startOfWeek; date.isBefore(endOfWeek) || date.isEqual(endOfWeek); date = date.plusDays(1)) {
+ DateTimeFormatter formatter = DateTimeFormatter.ofPattern("yyyy-MM");
+
+ // 浠庡綋鍓嶆湀浠藉線鍓嶆帹12涓湀
+ for (int i = 0; i < 12; i++) {
+ LocalDate monthDate = today.minusMonths(i);
+ LocalDate startOfMonth = monthDate.withDayOfMonth(1);
+ LocalDate endOfMonth = monthDate.withDayOfMonth(monthDate.lengthOfMonth());
+
+ // 鏌ヨ璇ユ湀鐨勬�绘敹鍏�
BigDecimal totalIncome = accountIncomeMapper.selectList(Wrappers.<AccountIncome>lambdaQuery()
- .eq(AccountIncome::getInputTime, date.toString()))
+ .between(AccountIncome::getInputTime, startOfMonth.toString(), endOfMonth.toString()))
.stream()
.map(AccountIncome::getIncomeMoney)
.filter(Objects::nonNull)
.reduce(BigDecimal.ZERO, BigDecimal::add);
+
+ // 鏌ヨ璇ユ湀鐨勬�绘敮鍑�
BigDecimal totalExpense = accountExpenseMapper.selectList(Wrappers.<AccountExpense>lambdaQuery()
- .eq(AccountExpense::getInputTime, date.toString()))
+ .between(AccountExpense::getInputTime, startOfMonth.toString(), endOfMonth.toString()))
.stream()
.map(AccountExpense::getExpenseMoney)
.filter(Objects::nonNull)
.reduce(BigDecimal.ZERO, BigDecimal::add);
+
BigDecimal netIncome = totalIncome.subtract(totalExpense);
- days.add(date.toString());
+ months.add(monthDate.format(formatter));
totalIncomeList.add(totalIncome.toString());
totalExpenseList.add(totalExpense.toString());
netIncomeList.add(netIncome.toString());
}
- result.put("days", days); // 澶�
+ result.put("months", months); // 鏈堜唤
result.put("totalIncome", totalIncomeList); // 鏀跺叆
result.put("totalExpense", totalExpenseList); // 鏀嚭
result.put("netIncome", netIncomeList); // 鍑�鏀跺叆
diff --git a/src/main/java/com/ruoyi/home/controller/HomeController.java b/src/main/java/com/ruoyi/home/controller/HomeController.java
index d0af0b5..40f0f6f 100644
--- a/src/main/java/com/ruoyi/home/controller/HomeController.java
+++ b/src/main/java/com/ruoyi/home/controller/HomeController.java
@@ -53,6 +53,14 @@
return AjaxResult.success(analysisCustomerContractAmounts);
}
+ @GetMapping("/analysisSupplierContractAmounts")
+ @Log(title = "渚涘簲鍟嗗悎鍚岄噾棰濆垎鏋�", businessType = BusinessType.OTHER)
+ @ApiOperation("渚涘簲鍟嗗悎鍚岄噾棰濆垎鏋�")
+ public AjaxResult analysisSupplierContractAmounts(AnalysisCustomerContractAmountsDto req) {
+ AnalysisCustomerContractAmountsDto analysisSupplierContractAmounts = homeService.analysisSupplierContractAmounts();
+ return AjaxResult.success(analysisSupplierContractAmounts);
+ }
+
@GetMapping("/qualityStatistics")
@Log(title = "璐ㄩ噺鍒嗘瀽", businessType = BusinessType.OTHER)
@ApiOperation("璐ㄩ噺鍒嗘瀽")
diff --git a/src/main/java/com/ruoyi/home/service/HomeService.java b/src/main/java/com/ruoyi/home/service/HomeService.java
index 1902488..dc26788 100644
--- a/src/main/java/com/ruoyi/home/service/HomeService.java
+++ b/src/main/java/com/ruoyi/home/service/HomeService.java
@@ -21,6 +21,8 @@
AnalysisCustomerContractAmountsDto analysisCustomerContractAmounts();
+ AnalysisCustomerContractAmountsDto analysisSupplierContractAmounts();
+
QualityStatisticsDto qualityStatistics();
List<ApproveProcess> todos() throws ParseException;
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 ad6ca2f..174d0b6 100644
--- a/src/main/java/com/ruoyi/home/service/impl/HomeServiceImpl.java
+++ b/src/main/java/com/ruoyi/home/service/impl/HomeServiceImpl.java
@@ -258,6 +258,96 @@
return analysisCustomerContractAmountsDto;
}
+ @Override
+ public AnalysisCustomerContractAmountsDto analysisSupplierContractAmounts() {
+ List<PurchaseLedger> purchaseLedgers = purchaseLedgerMapper.selectList(null);
+ // 鍚堣鍚堝悓閲戦
+ BigDecimal contractAmount = purchaseLedgers.stream().map(PurchaseLedger::getContractAmount)
+ .filter(Objects::nonNull)
+ .reduce(BigDecimal.ZERO, BigDecimal::add);
+ // 璁$畻鍛ㄥ悓姣�
+ // 鑾峰彇褰撳墠鏃堕棿
+ LocalDate today = LocalDate.now();
+
+ // 鑾峰彇鏈懆鍛ㄤ竴
+ LocalDate startOfWeek = today.with(DayOfWeek.MONDAY);
+
+ // 鑾峰彇鏈懆鍛ㄦ棩
+ LocalDate endOfWeek = today.with(DayOfWeek.SUNDAY);
+ List<PurchaseLedger> purchaseLedgers1 = purchaseLedgerMapper.selectList(new LambdaQueryWrapper<PurchaseLedger>()
+ .ge(PurchaseLedger::getEntryDate, startOfWeek) // 澶т簬绛変簬鏈懆鍛ㄤ竴
+ .lt(PurchaseLedger::getEntryDate, endOfWeek.plusDays(1))); // 浣跨敤 lt 骞跺姞涓婁竴澶╂潵鍖呭惈鍛ㄦ棩
+ BigDecimal weekContractAmount = purchaseLedgers1.stream().map(PurchaseLedger::getContractAmount)
+ .filter(Objects::nonNull)
+ .reduce(BigDecimal.ZERO, BigDecimal::add);
+ // 鑾峰彇鍘诲勾鏈懆鏃堕棿
+ LocalDate lastYearStartOfWeek = today.minusYears(1).with(DayOfWeek.MONDAY);
+ LocalDate lastYearEndOfWeek = today.minusYears(1).with(DayOfWeek.SUNDAY);
+ List<PurchaseLedger> purchaseLedgers2 = purchaseLedgerMapper.selectList(new LambdaQueryWrapper<PurchaseLedger>()
+ .ge(PurchaseLedger::getEntryDate, lastYearStartOfWeek) // 澶т簬绛変簬鍘诲勾鏈懆鍛ㄤ竴
+ .lt(PurchaseLedger::getEntryDate, lastYearEndOfWeek.plusDays(1))); // 浣跨敤 lt 骞跺姞涓婁竴澶╂潵鍖呭惈鍛ㄦ棩
+ BigDecimal lastYearWeekContractAmount = purchaseLedgers2.stream().map(PurchaseLedger::getContractAmount)
+ .filter(Objects::nonNull)
+ .reduce(BigDecimal.ZERO, BigDecimal::add);
+ BigDecimal subtract = weekContractAmount.subtract(lastYearWeekContractAmount);
+ String weekYny = "";
+ // 鍛ㄥ悓姣�
+ if(subtract.compareTo(BigDecimal.ZERO) == 0 || lastYearWeekContractAmount.compareTo(BigDecimal.ZERO) == 0){
+ weekYny = "0.00";
+ }else{
+ weekYny = String.format("%.2f", subtract.divide(lastYearWeekContractAmount, 2, RoundingMode.HALF_UP).multiply(new BigDecimal("100")));
+ }
+
+ // 璁$畻鏃ョ幆姣�
+ LocalDate yesterday = today.minusDays(1);
+ LocalDate plusDays = today.plusDays(1);
+ List<PurchaseLedger> purchaseLedgers3 = purchaseLedgerMapper.selectList(new LambdaQueryWrapper<PurchaseLedger>()
+ .ge(PurchaseLedger::getEntryDate, today) // 澶т簬绛変簬浠婂ぉ
+ .lt(PurchaseLedger::getEntryDate, plusDays)); // 浣跨敤 lt 骞跺姞涓婁竴澶╂潵鍖呭惈褰撳ぉ
+ BigDecimal todayContractAmount = purchaseLedgers3.stream().map(PurchaseLedger::getContractAmount)
+ .filter(Objects::nonNull)
+ .reduce(BigDecimal.ZERO, BigDecimal::add);
+ List<PurchaseLedger> purchaseLedgers4 = purchaseLedgerMapper.selectList(new LambdaQueryWrapper<PurchaseLedger>()
+ .ge(PurchaseLedger::getEntryDate, yesterday) // 澶т簬绛変簬鏄ㄥぉ
+ .lt(PurchaseLedger::getEntryDate, today)); // 浣跨敤 lt
+ BigDecimal yesterdayContractAmount = purchaseLedgers4.stream().map(PurchaseLedger::getContractAmount)
+ .filter(Objects::nonNull)
+ .reduce(BigDecimal.ZERO, BigDecimal::add);
+ BigDecimal subtract1 = todayContractAmount.subtract(yesterdayContractAmount);
+ // 鏃ョ幆姣�
+ String chain = "";
+ if(subtract1.compareTo(BigDecimal.ZERO) == 0 || yesterdayContractAmount.compareTo(BigDecimal.ZERO) == 0){
+ chain = "0.00";
+ }else{
+ chain = String.format("%.2f", subtract1.divide(yesterdayContractAmount, 2, RoundingMode.HALF_UP).multiply(new BigDecimal("100")));
+ }
+
+ AnalysisCustomerContractAmountsDto analysisCustomerContractAmountsDto = new AnalysisCustomerContractAmountsDto();
+ // 灏嗗悎鍚岄噾棰濅繚鐣欎袱浣嶅皬鏁�
+ analysisCustomerContractAmountsDto.setSum(contractAmount.setScale(2, RoundingMode.HALF_UP).toString());
+ analysisCustomerContractAmountsDto.setYny(weekYny);
+ analysisCustomerContractAmountsDto.setChain(chain);
+
+ // 鎸変緵搴斿晢鍚嶇О鍒嗙粍缁熻
+ Map<String, BigDecimal> collect = purchaseLedgers.stream().collect(Collectors.groupingBy(PurchaseLedger::getSupplierName, Collectors.reducing(BigDecimal.ZERO,
+ PurchaseLedger::getContractAmount, BigDecimal::add)));
+ List<MapDto> mapDtos = new ArrayList<>();
+ collect.forEach((k,v)->{
+ MapDto mapDto = new MapDto();
+ mapDto.setName(k);
+ // 灏嗛噾棰濆�间繚鐣欎袱浣嶅皬鏁�
+ mapDto.setValue(v.setScale(2, RoundingMode.HALF_UP).toString());
+ if(contractAmount.compareTo(new BigDecimal(0)) == 0){
+ mapDto.setRate("0");
+ }else{
+ mapDto.setRate(String.format("%.2f", v.divide(contractAmount, 2, RoundingMode.HALF_UP).multiply(new BigDecimal("100"))));
+ }
+ mapDtos.add(mapDto);
+ });
+ analysisCustomerContractAmountsDto.setItem(mapDtos);
+ return analysisCustomerContractAmountsDto;
+ }
+
@Override
public QualityStatisticsDto qualityStatistics() {
--
Gitblit v1.9.3