From 366b67926809852c1090f14c5a24fe00109a81b5 Mon Sep 17 00:00:00 2001
From: maven <2163098428@qq.com>
Date: 星期一, 28 七月 2025 17:59:52 +0800
Subject: [PATCH] yys 首页接口开发
---
src/main/java/com/ruoyi/home/dto/HomeBusinessDto.java | 35 ++
src/main/java/com/ruoyi/home/dto/StatisticsReceivablePayableDto.java | 29 ++
src/main/java/com/ruoyi/approve/pojo/ApproveProcess.java | 9
src/main/java/com/ruoyi/home/controller/HomeController.java | 80 ++++++
src/main/java/com/ruoyi/home/dto/QualityStatisticsItem.java | 28 ++
src/main/java/com/ruoyi/sales/service/ISalesLedgerService.java | 2
src/main/java/com/ruoyi/dto/MapDto.java | 26 ++
src/main/java/com/ruoyi/home/service/impl/HomeServiceImpl.java | 368 ++++++++++++++++++++++++++++
src/main/java/com/ruoyi/sales/controller/SalesLedgerController.java | 4
src/main/java/com/ruoyi/home/dto/QualityStatisticsDto.java | 29 ++
src/main/java/com/ruoyi/home/service/HomeService.java | 28 ++
src/main/java/com/ruoyi/sales/service/impl/SalesLedgerServiceImpl.java | 92 ++++--
src/main/java/com/ruoyi/home/dto/AnalysisCustomerContractAmountsDto.java | 32 ++
13 files changed, 725 insertions(+), 37 deletions(-)
diff --git a/src/main/java/com/ruoyi/approve/pojo/ApproveProcess.java b/src/main/java/com/ruoyi/approve/pojo/ApproveProcess.java
index 8ede335..02e9f45 100644
--- a/src/main/java/com/ruoyi/approve/pojo/ApproveProcess.java
+++ b/src/main/java/com/ruoyi/approve/pojo/ApproveProcess.java
@@ -6,6 +6,8 @@
import com.baomidou.mybatisplus.annotation.*;
import com.fasterxml.jackson.annotation.JsonFormat;
+import io.swagger.annotations.ApiModel;
+import io.swagger.annotations.ApiModelProperty;
import lombok.Data;
/**
@@ -14,6 +16,7 @@
*/
@Data
@TableName("approve_process")
+@ApiModel
public class ApproveProcess{
/**
*
@@ -24,6 +27,7 @@
/**
* 娴佺▼缂栧彿
*/
+ @ApiModelProperty(value = "娴佺▼缂栧彿")
private String approveId;
/**
@@ -44,6 +48,7 @@
/**
* 鐢宠閮ㄩ棬鍚嶇О
*/
+ @ApiModelProperty(value = "鐢宠閮ㄩ棬鍚嶇О")
private String approveDeptName;
/**
@@ -59,6 +64,7 @@
/**
* 鐢宠鍘熷洜
*/
+ @ApiModelProperty(value = "鐢宠鍘熷洜")
private String approveReason;
/**
@@ -75,6 +81,7 @@
* 鐢宠鏃ユ湡
*/
@JsonFormat(pattern = "yyyy-MM-dd")
+ @ApiModelProperty(value = "鐢宠鏃ユ湡")
private Date approveTime;
/**
@@ -86,6 +93,7 @@
/**
* 瀹℃壒鐘舵�侊細0寰呭鏍革紝1瀹℃牳涓紝2瀹℃牳瀹屾垚 3瀹℃牳鏈�氳繃 4宸查噸鏂版彁浜�
*/
+ @ApiModelProperty(value = "瀹℃壒鐘舵�侊細0寰呭鏍革紝1瀹℃牳涓紝2瀹℃牳瀹屾垚 3瀹℃牳鏈�氳繃 4宸查噸鏂版彁浜�")
private Integer approveStatus;
/**
@@ -107,6 +115,7 @@
/**
* 瀹℃壒澶囨敞
*/
+ @ApiModelProperty(value = "瀹℃壒澶囨敞")
private String approveRemark;
/**
diff --git a/src/main/java/com/ruoyi/dto/MapDto.java b/src/main/java/com/ruoyi/dto/MapDto.java
new file mode 100644
index 0000000..f6822a5
--- /dev/null
+++ b/src/main/java/com/ruoyi/dto/MapDto.java
@@ -0,0 +1,26 @@
+package com.ruoyi.dto;
+
+import io.swagger.annotations.ApiModel;
+import io.swagger.annotations.ApiModelProperty;
+import lombok.Data;
+
+import java.math.BigDecimal;
+
+/**
+ * @author :yys
+ * @date : 2025/7/25 10:37
+ */
+@Data
+@ApiModel
+public class MapDto {
+
+ @ApiModelProperty(value = "鍚嶇О")
+ private String name;
+
+ @ApiModelProperty(value = "鏁伴噺")
+ private BigDecimal value;
+
+ @ApiModelProperty(value = "鍗犳瘮")
+ private String rate;
+
+}
diff --git a/src/main/java/com/ruoyi/home/controller/HomeController.java b/src/main/java/com/ruoyi/home/controller/HomeController.java
new file mode 100644
index 0000000..137b4b8
--- /dev/null
+++ b/src/main/java/com/ruoyi/home/controller/HomeController.java
@@ -0,0 +1,80 @@
+package com.ruoyi.home.controller;
+
+import com.baomidou.mybatisplus.core.metadata.IPage;
+import com.baomidou.mybatisplus.extension.plugins.pagination.Page;
+import com.ruoyi.approve.pojo.ApproveProcess;
+import com.ruoyi.framework.aspectj.lang.annotation.Log;
+import com.ruoyi.framework.aspectj.lang.enums.BusinessType;
+import com.ruoyi.framework.web.controller.BaseController;
+import com.ruoyi.framework.web.domain.AjaxResult;
+import com.ruoyi.home.dto.AnalysisCustomerContractAmountsDto;
+import com.ruoyi.home.dto.HomeBusinessDto;
+import com.ruoyi.home.dto.QualityStatisticsDto;
+import com.ruoyi.home.dto.StatisticsReceivablePayableDto;
+import com.ruoyi.home.service.HomeService;
+import com.ruoyi.production.dto.SalesLedgerWorkDto;
+import io.swagger.annotations.Api;
+import io.swagger.annotations.ApiOperation;
+import org.springframework.beans.factory.annotation.Autowired;
+import org.springframework.web.bind.annotation.GetMapping;
+import org.springframework.web.bind.annotation.RequestMapping;
+import org.springframework.web.bind.annotation.RequestParam;
+import org.springframework.web.bind.annotation.RestController;
+
+import java.util.List;
+
+/**
+ * @author :yys
+ * @date : 2025/7/25 9:15
+ */
+@RestController
+@Api(tags = "棣栭〉缁熻")
+@RequestMapping("/home")
+public class HomeController extends BaseController {
+
+ @Autowired
+ private HomeService homeService;
+
+ @GetMapping("/business")
+ @Log(title = "閿�鍞�-閲囪喘-搴撳瓨鏁版嵁", businessType = BusinessType.OTHER)
+ @ApiOperation("閿�鍞�-閲囪喘-搴撳瓨鏁版嵁")
+ public AjaxResult business(HomeBusinessDto req) {
+ HomeBusinessDto homeBusinessDto = homeService.business();
+ return AjaxResult.success(homeBusinessDto);
+ }
+
+
+ @GetMapping("/analysisCustomerContractAmounts")
+ @Log(title = "瀹㈡埛鍚堝悓閲戦鍒嗘瀽", businessType = BusinessType.OTHER)
+ @ApiOperation("瀹㈡埛鍚堝悓閲戦鍒嗘瀽")
+ public AjaxResult analysisCustomerContractAmounts(AnalysisCustomerContractAmountsDto req) {
+ AnalysisCustomerContractAmountsDto analysisCustomerContractAmounts = homeService.analysisCustomerContractAmounts();
+ return AjaxResult.success(analysisCustomerContractAmounts);
+ }
+
+ @GetMapping("/qualityStatistics")
+ @Log(title = "璐ㄩ噺鍒嗘瀽", businessType = BusinessType.OTHER)
+ @ApiOperation("璐ㄩ噺鍒嗘瀽")
+ public AjaxResult qualityStatistics(QualityStatisticsDto req) {
+ QualityStatisticsDto qualityStatisticsDto = homeService.qualityStatistics();
+ return AjaxResult.success(qualityStatisticsDto);
+ }
+
+ @GetMapping("/todos")
+ @Log(title = "寰呭姙浜嬮」", businessType = BusinessType.OTHER)
+ @ApiOperation("寰呭姙浜嬮」")
+ public AjaxResult todos(ApproveProcess req) {
+ List<ApproveProcess> approveProcessList = homeService.todos();
+ return AjaxResult.success(approveProcessList);
+ }
+
+ @GetMapping("/statisticsReceivablePayable")
+ @Log(title = "搴旀敹搴斾粯缁熻", businessType = BusinessType.OTHER)
+ @ApiOperation("搴旀敹搴斾粯缁熻")
+ public AjaxResult statisticsReceivablePayable(StatisticsReceivablePayableDto req, @RequestParam(value = "type", defaultValue = "1") Integer type ) {
+ StatisticsReceivablePayableDto statisticsReceivablePayable = homeService.statisticsReceivablePayable(type);
+ return AjaxResult.success(statisticsReceivablePayable);
+ }
+
+
+}
diff --git a/src/main/java/com/ruoyi/home/dto/AnalysisCustomerContractAmountsDto.java b/src/main/java/com/ruoyi/home/dto/AnalysisCustomerContractAmountsDto.java
new file mode 100644
index 0000000..4801705
--- /dev/null
+++ b/src/main/java/com/ruoyi/home/dto/AnalysisCustomerContractAmountsDto.java
@@ -0,0 +1,32 @@
+package com.ruoyi.home.dto;
+
+import com.ruoyi.dto.MapDto;
+import io.swagger.annotations.ApiModel;
+import io.swagger.annotations.ApiModelProperty;
+import lombok.Data;
+
+import java.math.BigDecimal;
+import java.util.List;
+
+/**
+ * @author :yys
+ * @date : 2025/7/25 10:31
+ */
+@Data
+@ApiModel
+public class AnalysisCustomerContractAmountsDto {
+
+ @ApiModelProperty(value = "鍚堝悓鎬婚噾棰�")
+ private BigDecimal sum;
+
+ @ApiModelProperty(value = "鏃ョ幆姣�")
+ private String chain;
+
+ @ApiModelProperty(value = "鍛ㄥ悓姣�")
+ private String yny;
+
+ private List<MapDto> item;
+
+
+
+}
diff --git a/src/main/java/com/ruoyi/home/dto/HomeBusinessDto.java b/src/main/java/com/ruoyi/home/dto/HomeBusinessDto.java
new file mode 100644
index 0000000..9acd9c6
--- /dev/null
+++ b/src/main/java/com/ruoyi/home/dto/HomeBusinessDto.java
@@ -0,0 +1,35 @@
+package com.ruoyi.home.dto;
+
+import io.swagger.annotations.ApiModel;
+import io.swagger.annotations.ApiModelProperty;
+import lombok.Data;
+
+import java.math.BigDecimal;
+
+/**
+ * @author :yys
+ * @date : 2025/7/25 9:25
+ */
+@Data
+@ApiModel
+public class HomeBusinessDto {
+
+ @ApiModelProperty("鏈湀閿�鍞噾棰�")
+ private BigDecimal monthSaleMoney;
+
+ @ApiModelProperty("鏈湀閿�鍞湭寮�绁ㄩ噾棰�")
+ private BigDecimal monthSaleHaveMoney;
+
+ @ApiModelProperty("鏈湀閲囪喘閲戦")
+ private BigDecimal monthPurchaseMoney;
+
+ @ApiModelProperty("鏈湀閲囪喘鏈紑绁ㄩ噾棰�")
+ private BigDecimal monthPurchaseHaveMoney;
+
+ @ApiModelProperty("褰撳墠搴撳瓨鏁伴噺")
+ private BigDecimal inventoryNum;
+
+ @ApiModelProperty("浠婃棩搴撳瓨鏁伴噺")
+ private BigDecimal todayInventoryNum;
+
+}
diff --git a/src/main/java/com/ruoyi/home/dto/QualityStatisticsDto.java b/src/main/java/com/ruoyi/home/dto/QualityStatisticsDto.java
new file mode 100644
index 0000000..970449a
--- /dev/null
+++ b/src/main/java/com/ruoyi/home/dto/QualityStatisticsDto.java
@@ -0,0 +1,29 @@
+package com.ruoyi.home.dto;
+
+import io.swagger.annotations.ApiModel;
+import io.swagger.annotations.ApiModelProperty;
+import lombok.Data;
+
+import java.math.BigDecimal;
+import java.util.List;
+
+/**
+ * @author :yys
+ * @date : 2025/7/25 11:22
+ */
+@Data
+@ApiModel
+public class QualityStatisticsDto {
+
+ @ApiModelProperty(value = "鍘熸潗鏂欏凡妫�娴嬫暟")
+ private BigDecimal supplierNum;
+
+ @ApiModelProperty(value = "鍑哄巶宸叉娴嬫暟")
+ private BigDecimal factoryNum;
+
+ @ApiModelProperty(value = "杩囩▼宸叉娴嬫暟")
+ private BigDecimal processNum;
+
+ private List<QualityStatisticsItem> item;
+
+}
diff --git a/src/main/java/com/ruoyi/home/dto/QualityStatisticsItem.java b/src/main/java/com/ruoyi/home/dto/QualityStatisticsItem.java
new file mode 100644
index 0000000..38ca74a
--- /dev/null
+++ b/src/main/java/com/ruoyi/home/dto/QualityStatisticsItem.java
@@ -0,0 +1,28 @@
+package com.ruoyi.home.dto;
+
+import io.swagger.annotations.ApiModel;
+import io.swagger.annotations.ApiModelProperty;
+import lombok.Data;
+
+import java.math.BigDecimal;
+
+/**
+ * @author :yys
+ * @date : 2025/7/25 11:27
+ */
+@Data
+@ApiModel
+public class QualityStatisticsItem {
+
+ @ApiModelProperty(value = "鍘熸潗鏂欎笉鍚堟牸鏁�")
+ private BigDecimal supplierNum;
+
+ @ApiModelProperty(value = "鍑哄巶涓嶅悎鏍兼暟")
+ private BigDecimal factoryNum;
+
+ @ApiModelProperty(value = "杩囩▼涓嶅悎鏍兼暟")
+ private BigDecimal processNum;
+
+ private String date;
+
+}
diff --git a/src/main/java/com/ruoyi/home/dto/StatisticsReceivablePayableDto.java b/src/main/java/com/ruoyi/home/dto/StatisticsReceivablePayableDto.java
new file mode 100644
index 0000000..c929543
--- /dev/null
+++ b/src/main/java/com/ruoyi/home/dto/StatisticsReceivablePayableDto.java
@@ -0,0 +1,29 @@
+package com.ruoyi.home.dto;
+
+import io.swagger.annotations.ApiModel;
+import io.swagger.annotations.ApiModelProperty;
+import lombok.Data;
+
+import java.math.BigDecimal;
+
+/**
+ * @author :yys
+ * @date : 2025/7/25 13:34
+ */
+@Data
+@ApiModel
+public class StatisticsReceivablePayableDto {
+
+ @ApiModelProperty("搴旀敹閲戦")
+ private BigDecimal receivableMoney;
+
+ @ApiModelProperty("搴斾粯閲戦")
+ private BigDecimal payableMoney;
+
+ @ApiModelProperty("棰勬敹閲戦")
+ private BigDecimal advanceMoney;
+
+ @ApiModelProperty("棰勪粯閲戦")
+ private BigDecimal prepayMoney;
+
+}
diff --git a/src/main/java/com/ruoyi/home/service/HomeService.java b/src/main/java/com/ruoyi/home/service/HomeService.java
new file mode 100644
index 0000000..49e7530
--- /dev/null
+++ b/src/main/java/com/ruoyi/home/service/HomeService.java
@@ -0,0 +1,28 @@
+package com.ruoyi.home.service;
+
+import com.ruoyi.approve.pojo.ApproveProcess;
+import com.ruoyi.home.dto.AnalysisCustomerContractAmountsDto;
+import com.ruoyi.home.dto.HomeBusinessDto;
+import com.ruoyi.home.dto.QualityStatisticsDto;
+import com.ruoyi.home.dto.StatisticsReceivablePayableDto;
+
+import java.util.List;
+
+/**
+ * @author :yys
+ * @date : 2025/7/25 9:23
+ */
+public interface HomeService {
+
+
+ HomeBusinessDto business();
+
+
+ AnalysisCustomerContractAmountsDto analysisCustomerContractAmounts();
+
+ QualityStatisticsDto qualityStatistics();
+
+ List<ApproveProcess> todos();
+
+ StatisticsReceivablePayableDto statisticsReceivablePayable(Integer type);
+}
diff --git a/src/main/java/com/ruoyi/home/service/impl/HomeServiceImpl.java b/src/main/java/com/ruoyi/home/service/impl/HomeServiceImpl.java
new file mode 100644
index 0000000..d346d41
--- /dev/null
+++ b/src/main/java/com/ruoyi/home/service/impl/HomeServiceImpl.java
@@ -0,0 +1,368 @@
+package com.ruoyi.home.service.impl;
+
+import com.baomidou.mybatisplus.core.conditions.query.LambdaQueryWrapper;
+import com.ruoyi.approve.mapper.ApproveProcessMapper;
+import com.ruoyi.approve.pojo.ApproveProcess;
+import com.ruoyi.common.utils.SecurityUtils;
+import com.ruoyi.dto.MapDto;
+import com.ruoyi.framework.security.LoginUser;
+import com.ruoyi.home.dto.*;
+import com.ruoyi.home.service.HomeService;
+import com.ruoyi.procurementrecord.mapper.ProcurementRecordMapper;
+import com.ruoyi.procurementrecord.mapper.ProcurementRecordOutMapper;
+import com.ruoyi.procurementrecord.pojo.ProcurementRecordOut;
+import com.ruoyi.procurementrecord.pojo.ProcurementRecordStorage;
+import com.ruoyi.project.system.domain.SysDept;
+import com.ruoyi.project.system.mapper.SysDeptMapper;
+import com.ruoyi.purchase.mapper.PaymentRegistrationMapper;
+import com.ruoyi.purchase.mapper.PurchaseLedgerMapper;
+import com.ruoyi.purchase.pojo.PaymentRegistration;
+import com.ruoyi.purchase.pojo.PurchaseLedger;
+import com.ruoyi.quality.mapper.QualityInspectMapper;
+import com.ruoyi.quality.pojo.QualityInspect;
+import com.ruoyi.sales.mapper.ReceiptPaymentMapper;
+import com.ruoyi.sales.mapper.SalesLedgerMapper;
+import com.ruoyi.sales.mapper.SalesLedgerProductMapper;
+import com.ruoyi.sales.pojo.ReceiptPayment;
+import com.ruoyi.sales.pojo.SalesLedger;
+import com.ruoyi.sales.pojo.SalesLedgerProduct;
+import lombok.extern.slf4j.Slf4j;
+import org.springframework.beans.factory.annotation.Autowired;
+import org.springframework.stereotype.Service;
+
+import java.math.BigDecimal;
+import java.math.RoundingMode;
+import java.time.*;
+import java.time.temporal.TemporalAdjusters;
+import java.util.*;
+import java.util.concurrent.atomic.AtomicInteger;
+import java.util.stream.Collectors;
+
+/**
+ * @author :yys
+ * @date : 2025/7/25 9:23
+ */
+@Service
+@Slf4j
+public class HomeServiceImpl implements HomeService {
+
+ @Autowired
+ private SalesLedgerMapper salesLedgerMapper;
+
+ @Autowired
+ private PurchaseLedgerMapper purchaseLedgerMapper;
+
+ @Autowired
+ private SalesLedgerProductMapper salesLedgerProductMapper;
+
+ @Autowired
+ private ProcurementRecordOutMapper procurementRecordOutMapper;
+
+ @Autowired
+ private ProcurementRecordMapper procurementRecordStorageMapper;
+
+ @Autowired
+ private QualityInspectMapper qualityStatisticsMapper;
+
+ @Autowired
+ private ApproveProcessMapper approveProcessMapper;
+
+ @Autowired
+ private ReceiptPaymentMapper receiptPaymentMapper;
+
+ @Autowired
+ private PaymentRegistrationMapper paymentRegistrationMapper;
+
+ @Autowired
+ private SysDeptMapper sysDeptMapper;
+
+ @Override
+ public HomeBusinessDto business() {
+ LocalDate now = LocalDate.now();
+ YearMonth currentMonth = YearMonth.from(now);
+ // 鍒涘缓LambdaQueryWrapper
+ LambdaQueryWrapper<SalesLedger> salesLedgerLambdaQueryWrapper = new LambdaQueryWrapper<>();
+ salesLedgerLambdaQueryWrapper.ge(SalesLedger::getEntryDate, currentMonth.atDay(1).atStartOfDay()) // 澶т簬绛変簬鏈湀绗竴澶�
+ .lt(SalesLedger::getEntryDate, currentMonth.plusMonths(1).atDay(1).atStartOfDay()); // 灏忎簬涓嬫湀绗竴澶�
+ List<SalesLedger> salesLedgers = salesLedgerMapper.selectList(salesLedgerLambdaQueryWrapper);
+ // 鍚堣鍚堝悓閲戦
+ BigDecimal contractAmount = salesLedgers.stream().map(SalesLedger::getContractAmount)
+ .filter(Objects::nonNull)
+ .reduce(BigDecimal.ZERO, BigDecimal::add);
+ LambdaQueryWrapper<SalesLedgerProduct> salesLedgerProductMapperLambdaQueryWrapper = new LambdaQueryWrapper<SalesLedgerProduct>();
+ salesLedgerProductMapperLambdaQueryWrapper.eq(SalesLedgerProduct::getType, 1)
+ .in(SalesLedgerProduct::getSalesLedgerId, salesLedgers.stream().map(SalesLedger::getId).collect(Collectors.toList()));
+ List<SalesLedgerProduct> salesLedgerProducts = salesLedgerProductMapper.selectList(salesLedgerProductMapperLambdaQueryWrapper);
+ // 鏈紑绁ㄩ噾棰�
+ BigDecimal noInvoiceAmountTotal = salesLedgerProducts.stream().map(SalesLedgerProduct::getNoInvoiceAmount)
+ .filter(Objects::nonNull)
+ .reduce(BigDecimal.ZERO, BigDecimal::add);
+
+ // 鍒涘缓LambdaQueryWrapper
+ 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);
+
+ LambdaQueryWrapper<SalesLedgerProduct> salesLedgerProductMapperLambdaQueryWrapperCopy = new LambdaQueryWrapper<SalesLedgerProduct>();
+ salesLedgerProductMapperLambdaQueryWrapper.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)
+ .filter(Objects::nonNull)
+ .reduce(BigDecimal.ZERO, BigDecimal::add);
+
+ // 缁熻搴撳瓨
+ List<ProcurementRecordStorage> procurementRecordStorages = procurementRecordStorageMapper.selectList(null);
+ BigDecimal stockAmount = procurementRecordStorages.stream()
+ .map(ProcurementRecordStorage::getInboundNum)
+ .filter(Objects::nonNull)
+ .reduce(BigDecimal.ZERO, BigDecimal::add);
+ List<ProcurementRecordOut> procurementRecordOuts = procurementRecordOutMapper.selectList(null);
+ BigDecimal outboundAmount = procurementRecordOuts.stream()
+ .map(ProcurementRecordOut::getInboundNum)
+ .filter(Objects::nonNull)
+ .reduce(BigDecimal.ZERO, BigDecimal::add);
+ BigDecimal stock = stockAmount.subtract(outboundAmount);
+ // 鑾峰彇褰撳ぉ鍏ュ簱鏁伴噺
+ LambdaQueryWrapper<ProcurementRecordStorage> procurementRecordStorageLambdaQueryWrapper = new LambdaQueryWrapper<>();
+ procurementRecordStorageLambdaQueryWrapper.ge(ProcurementRecordStorage::getCreateTime, now) // 澶т簬绛変簬褰撳ぉ
+ .lt(ProcurementRecordStorage::getCreateTime, now.plusDays(1)); // 灏忎簬鏄庡ぉ
+ List<ProcurementRecordStorage> procurementRecordStorages1 = procurementRecordStorageMapper.selectList(procurementRecordStorageLambdaQueryWrapper);
+ BigDecimal stockAmount1 = procurementRecordStorages1.stream()
+ .map(ProcurementRecordStorage::getInboundNum)
+ .filter(Objects::nonNull)
+ .reduce(BigDecimal.ZERO, BigDecimal::add);
+ // 鏋勫缓缁撴灉
+ HomeBusinessDto homeBusinessDto = new HomeBusinessDto();
+ homeBusinessDto.setMonthSaleMoney(contractAmount);
+ homeBusinessDto.setMonthSaleHaveMoney(noInvoiceAmountTotal);
+ homeBusinessDto.setMonthPurchaseMoney(receiveAmount);
+ homeBusinessDto.setMonthPurchaseHaveMoney(unReceiptPaymentAmount);
+ homeBusinessDto.setInventoryNum(stock);
+ homeBusinessDto.setTodayInventoryNum(stockAmount1);
+
+ return homeBusinessDto;
+ }
+
+ @Override
+ public AnalysisCustomerContractAmountsDto analysisCustomerContractAmounts() {
+ List<SalesLedger> salesLedgers = salesLedgerMapper.selectList(null);
+ // 鍚堣鍚堝悓閲戦
+ BigDecimal contractAmount = salesLedgers.stream().map(SalesLedger::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<SalesLedger> salesLedgers1 = salesLedgerMapper.selectList(new LambdaQueryWrapper<SalesLedger>()
+ .ge(SalesLedger::getEntryDate, startOfWeek) // 澶т簬绛変簬鏈懆鍛ㄤ竴
+ .gt(SalesLedger::getEntryDate, endOfWeek));
+ BigDecimal weekContractAmount = salesLedgers1.stream().map(SalesLedger::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<SalesLedger> salesLedgers2 = salesLedgerMapper.selectList(new LambdaQueryWrapper<SalesLedger>()
+ .ge(SalesLedger::getEntryDate, lastYearStartOfWeek) // 澶т簬绛変簬鍘诲勾鏈懆鍛ㄤ竴
+ .gt(SalesLedger::getEntryDate, lastYearEndOfWeek));
+ BigDecimal lastYearWeekContractAmount = salesLedgers2.stream().map(SalesLedger::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<SalesLedger> salesLedgers3 = salesLedgerMapper.selectList(new LambdaQueryWrapper<SalesLedger>()
+ .ge(SalesLedger::getEntryDate, today) // 澶т簬绛変簬鏄ㄥぉ
+ .lt(SalesLedger::getEntryDate, plusDays));
+ BigDecimal yesterdayContractAmount = salesLedgers3.stream().map(SalesLedger::getContractAmount)
+ .filter(Objects::nonNull)
+ .reduce(BigDecimal.ZERO, BigDecimal::add);
+ List<SalesLedger> salesLedgers4 = salesLedgerMapper.selectList(new LambdaQueryWrapper<SalesLedger>()
+ .ge(SalesLedger::getEntryDate, yesterday) // 澶т簬绛変簬鍘诲勾鏄ㄥぉ
+ .lt(SalesLedger::getEntryDate, today));
+ BigDecimal lastYearYesterdayContractAmount = salesLedgers4.stream().map(SalesLedger::getContractAmount)
+ .filter(Objects::nonNull)
+ .reduce(BigDecimal.ZERO, BigDecimal::add);
+ BigDecimal subtract1 = yesterdayContractAmount.subtract(lastYearYesterdayContractAmount);
+ // 鏃ョ幆姣�
+ String chain = "";
+ if(subtract1.compareTo(BigDecimal.ZERO) == 0 || lastYearYesterdayContractAmount.compareTo(BigDecimal.ZERO) == 0){
+ chain = "0.00";
+ }else{
+ chain = String.format("%.2f", subtract1.divide(lastYearYesterdayContractAmount, 2, RoundingMode.HALF_UP).multiply(new BigDecimal("100")));
+ }
+
+
+ AnalysisCustomerContractAmountsDto analysisCustomerContractAmountsDto = new AnalysisCustomerContractAmountsDto();
+ analysisCustomerContractAmountsDto.setSum(contractAmount);
+ analysisCustomerContractAmountsDto.setYny(weekYny);
+ analysisCustomerContractAmountsDto.setChain(chain);
+
+ Map<String, BigDecimal> collect = salesLedgers.stream().collect(Collectors.groupingBy(SalesLedger::getCustomerName, Collectors.reducing(BigDecimal.ZERO,
+ SalesLedger::getContractAmount, BigDecimal::add)));
+ List<MapDto> mapDtos = new ArrayList<>();
+ collect.forEach((k,v)->{
+ MapDto mapDto = new MapDto();
+ mapDto.setName(k);
+ mapDto.setValue(v);
+ 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() {
+ // 鑾峰彇涓�鍛ㄦ暟鎹�
+ // 鑾峰彇褰撳墠鏃堕棿
+ LocalDate today = LocalDate.now();
+ // 鑾峰彇鏈懆鍛ㄤ竴
+ LocalDate startOfWeek = today.with(DayOfWeek.MONDAY);
+ // 鑾峰彇鏈懆鍛ㄦ棩
+ LocalDate endOfWeek = today.with(DayOfWeek.SUNDAY);
+ LambdaQueryWrapper<QualityInspect> qualityInspectLambdaQueryWrapper = new LambdaQueryWrapper<>();
+ qualityInspectLambdaQueryWrapper.ge(QualityInspect::getCheckTime, startOfWeek)
+ .gt(QualityInspect::getCheckTime, endOfWeek);
+ List<QualityInspect> qualityInspects = qualityStatisticsMapper.selectList(qualityInspectLambdaQueryWrapper);
+ QualityStatisticsDto qualityStatisticsDto = new QualityStatisticsDto();
+ qualityStatisticsDto.setSupplierNum(qualityInspects.stream().filter(item -> item.getInspectType().equals(0)).map(QualityInspect::getQuantity).reduce(BigDecimal.ZERO, BigDecimal::add));
+ qualityStatisticsDto.setProcessNum(qualityInspects.stream().filter(item -> item.getInspectType().equals(1)).map(QualityInspect::getQuantity).reduce(BigDecimal.ZERO, BigDecimal::add));
+ qualityStatisticsDto.setFactoryNum(qualityInspects.stream().filter(item -> item.getInspectType().equals(2)).map(QualityInspect::getQuantity).reduce(BigDecimal.ZERO, BigDecimal::add));
+ List<QualityStatisticsItem> qualityStatisticsItems = new ArrayList<>();
+ for (int j = 1; j < 8; j++) {
+ LocalDate endTime = startOfWeek.plusDays(j);
+ LocalDate startTime = endTime.minusDays(1);
+ QualityStatisticsItem qualityStatisticsItem = new QualityStatisticsItem();
+ qualityStatisticsItem.setDate(startTime.toString());
+ qualityStatisticsItem.setSupplierNum(qualityInspects.stream()
+ .filter(item -> item.getInspectType().equals(0) && "涓嶅悎鏍�".equals(item.getCheckResult())
+ && (startTime.isEqual(item.getCheckTime().toInstant().atZone(ZoneId.systemDefault()).toLocalDate()) || startTime.isAfter(item.getCheckTime().toInstant().atZone(ZoneId.systemDefault()).toLocalDate()))
+ && endTime.isBefore(item.getCheckTime().toInstant().atZone(ZoneId.systemDefault()).toLocalDate()))
+ .map(QualityInspect::getQuantity)
+ .reduce(BigDecimal.ZERO, BigDecimal::add)
+ );
+ qualityStatisticsItem.setFactoryNum(qualityInspects.stream()
+ .filter(item -> item.getInspectType().equals(1) && "涓嶅悎鏍�".equals(item.getCheckResult())
+ && (startTime.isEqual(item.getCheckTime().toInstant().atZone(ZoneId.systemDefault()).toLocalDate()) || startTime.isAfter(item.getCheckTime().toInstant().atZone(ZoneId.systemDefault()).toLocalDate()))
+ && endTime.isBefore(item.getCheckTime().toInstant().atZone(ZoneId.systemDefault()).toLocalDate()))
+ .map(QualityInspect::getQuantity)
+ .reduce(BigDecimal.ZERO, BigDecimal::add)
+ );
+ qualityStatisticsItem.setProcessNum(qualityInspects.stream()
+ .filter(item -> item.getInspectType().equals(2) && "涓嶅悎鏍�".equals(item.getCheckResult())
+ && (startTime.isEqual(item.getCheckTime().toInstant().atZone(ZoneId.systemDefault()).toLocalDate()) || startTime.isAfter(item.getCheckTime().toInstant().atZone(ZoneId.systemDefault()).toLocalDate()))
+ && endTime.isBefore(item.getCheckTime().toInstant().atZone(ZoneId.systemDefault()).toLocalDate()))
+ .map(QualityInspect::getQuantity)
+ .reduce(BigDecimal.ZERO, BigDecimal::add));
+ qualityStatisticsItems.add(qualityStatisticsItem);
+ }
+ qualityStatisticsDto.setItem(qualityStatisticsItems);
+ return qualityStatisticsDto;
+ }
+
+ @Override
+ public List<ApproveProcess> todos() {
+ LoginUser loginUser = SecurityUtils.getLoginUser();
+ LambdaQueryWrapper<ApproveProcess> approveProcessLambdaQueryWrapper = new LambdaQueryWrapper<>();
+ approveProcessLambdaQueryWrapper.eq(ApproveProcess::getApproveDelete, 0)
+ .eq(ApproveProcess::getApproveUserCurrentId, loginUser.getUserId())
+ .ne(ApproveProcess::getApproveStatus, 2)
+ .eq(ApproveProcess::getTenantId, loginUser.getTenantId());
+ return approveProcessMapper.selectList(approveProcessLambdaQueryWrapper);
+ }
+
+ /**
+ *
+ * @param type 1-鍛� 2-鏈� 3-瀛e害
+ * @return
+ */
+ @Override
+ public StatisticsReceivablePayableDto statisticsReceivablePayable(Integer type) {
+ LocalDate today = LocalDate.now();
+ LocalDate startDate = null;
+ LocalDate endDate = null;
+ switch (type){
+ case 1:
+ // 鑾峰彇鏈懆鍛ㄤ竴
+ startDate = today.with(DayOfWeek.MONDAY);
+ // 鑾峰彇鏈懆鍛ㄦ棩
+ endDate = today.with(DayOfWeek.SUNDAY);
+ break;
+ case 2:
+ startDate = today.with(TemporalAdjusters.firstDayOfMonth());
+ endDate = today.with(TemporalAdjusters.lastDayOfMonth());
+ break;
+ case 3:
+ Month currentMonth = today.getMonth();
+ Month firstMonthOfQuarter = currentMonth.firstMonthOfQuarter();
+ Month lastMonthOfQuarter = Month.of(firstMonthOfQuarter.getValue() + 2);
+
+ startDate = today.withMonth(firstMonthOfQuarter.getValue())
+ .with(TemporalAdjusters.firstDayOfMonth());
+ endDate = today.withMonth(lastMonthOfQuarter.getValue())
+ .with(TemporalAdjusters.lastDayOfMonth());
+ break;
+ }
+ // 搴旀敹
+ List<SalesLedger> salesLedgers = salesLedgerMapper.selectList(new LambdaQueryWrapper<SalesLedger>()
+ .ge(SalesLedger::getEntryDate, startDate)
+ .lt(SalesLedger::getEntryDate, endDate)
+ );
+ BigDecimal receivableMoney = salesLedgers.stream().map(SalesLedger::getContractAmount).reduce(BigDecimal.ZERO, BigDecimal::add);
+ // 搴斾粯
+ List<PurchaseLedger> procurementRecords = purchaseLedgerMapper.selectList(new LambdaQueryWrapper<PurchaseLedger>()
+ .ge(PurchaseLedger::getEntryDate, startDate)
+ .lt(PurchaseLedger::getEntryDate, endDate)
+ );
+ BigDecimal payableMoney = procurementRecords.stream().map(PurchaseLedger::getContractAmount).reduce(BigDecimal.ZERO, BigDecimal::add);
+ // 棰勬敹
+ List<ReceiptPayment> receiptPayments = receiptPaymentMapper.selectList(new LambdaQueryWrapper<ReceiptPayment>()
+ .ge(ReceiptPayment::getReceiptPaymentDate, startDate)
+ .lt(ReceiptPayment::getReceiptPaymentDate, endDate));
+ BigDecimal advanceMoney = receiptPayments.stream().map(ReceiptPayment::getReceiptPaymentAmount).reduce(BigDecimal.ZERO, BigDecimal::add);
+ // 棰勪粯
+ List<PaymentRegistration> paymentRegistrations = paymentRegistrationMapper.selectList(new LambdaQueryWrapper<PaymentRegistration>()
+ .ge(PaymentRegistration::getPaymentDate, startDate)
+ .lt(PaymentRegistration::getPaymentDate, endDate));
+ BigDecimal prepayMoney = paymentRegistrations.stream().map(PaymentRegistration::getCurrentPaymentAmount).reduce(BigDecimal.ZERO, BigDecimal::add);
+ StatisticsReceivablePayableDto statisticsReceivablePayableDto = new StatisticsReceivablePayableDto();
+ statisticsReceivablePayableDto.setPayableMoney(payableMoney);
+ statisticsReceivablePayableDto.setReceivableMoney(receivableMoney);
+ statisticsReceivablePayableDto.setAdvanceMoney(advanceMoney);
+ statisticsReceivablePayableDto.setPrepayMoney(prepayMoney);
+
+ return statisticsReceivablePayableDto;
+ }
+}
diff --git a/src/main/java/com/ruoyi/sales/controller/SalesLedgerController.java b/src/main/java/com/ruoyi/sales/controller/SalesLedgerController.java
index 8853bb0..a18d5c4 100644
--- a/src/main/java/com/ruoyi/sales/controller/SalesLedgerController.java
+++ b/src/main/java/com/ruoyi/sales/controller/SalesLedgerController.java
@@ -161,8 +161,8 @@
* 杩戝崐骞村紑绁�,鍥炴閲戦
*/
@GetMapping("/getAmountHalfYear")
- public AjaxResult getAmountHalfYear() {
- return AjaxResult.success(salesLedgerService.getAmountHalfYear());
+ public AjaxResult getAmountHalfYear(@RequestParam(value = "type",defaultValue = "1") Integer type) {
+ return AjaxResult.success(salesLedgerService.getAmountHalfYear(type));
}
/**
diff --git a/src/main/java/com/ruoyi/sales/service/ISalesLedgerService.java b/src/main/java/com/ruoyi/sales/service/ISalesLedgerService.java
index b38e4af..b4cf320 100644
--- a/src/main/java/com/ruoyi/sales/service/ISalesLedgerService.java
+++ b/src/main/java/com/ruoyi/sales/service/ISalesLedgerService.java
@@ -32,7 +32,7 @@
List getTopFiveList();
- List<MonthlyAmountDto> getAmountHalfYear();
+ List<MonthlyAmountDto> getAmountHalfYear(Integer type);
IPage<SalesLedger> selectSalesLedgerListPage(Page page, SalesLedgerDto salesLedgerDto);
}
diff --git a/src/main/java/com/ruoyi/sales/service/impl/SalesLedgerServiceImpl.java b/src/main/java/com/ruoyi/sales/service/impl/SalesLedgerServiceImpl.java
index b6c43ed..fa807c9 100644
--- a/src/main/java/com/ruoyi/sales/service/impl/SalesLedgerServiceImpl.java
+++ b/src/main/java/com/ruoyi/sales/service/impl/SalesLedgerServiceImpl.java
@@ -204,53 +204,77 @@
}
@Override
- public List<MonthlyAmountDto> getAmountHalfYear() {
+ public List<MonthlyAmountDto> getAmountHalfYear(Integer type) {
LocalDate now = LocalDate.now();
- YearMonth currentMonth = YearMonth.from(now);
+ LocalDateTime currentDateTime = LocalDateTime.now();
- List<MonthlyAmountDto> monthlyAmounts = new ArrayList<>();
+ // 鏍规嵁 type 纭畾鏌ヨ鐨勬椂闂撮棿闅旓紙澶╂暟锛夊拰鎬绘煡璇㈠ぉ鏁�
+ int daysPerPeriod;
+ int totalDays;
+ switch (type) {
+ case 1:
+ daysPerPeriod = 5; // 姣�5澶╂煡涓�娆�
+ totalDays = 30; // 6娆� 脳 5澶� = 30澶�
+ break;
+ case 2:
+ daysPerPeriod = 15; // 姣�15澶╂煡涓�娆�
+ totalDays = 90; // 6娆� 脳 15澶� = 90澶�
+ break;
+ case 3:
+ daysPerPeriod = 30; // 姣�30澶╂煡涓�娆�
+ totalDays = 180; // 6娆� 脳 30澶� = 180澶�
+ break;
+ default:
+ throw new IllegalArgumentException("Invalid type value: " + type);
+ }
+ List<MonthlyAmountDto> result = new ArrayList<>();
+
+ // 寰幆6娆★紝姣忔鏌ヨ涓�涓椂闂存鐨勬暟鎹�
for (int i = 0; i < 6; i++) {
- YearMonth targetMonth = currentMonth.minusMonths(i);
- LocalDate firstDayOfMonth = targetMonth.atDay(1);
- LocalDate firstDayOfNextMonth = targetMonth.plusMonths(1).atDay(1);
+ // 璁$畻褰撳墠鏃堕棿娈电殑璧峰鍜岀粨鏉熸椂闂�
+ LocalDateTime endTime = currentDateTime.minusDays(i * daysPerPeriod);
+ LocalDateTime startTime = endTime.minusDays(daysPerPeriod);
- LocalDateTime startOfMonth = firstDayOfMonth.atStartOfDay();
- LocalDateTime startOfNextMonth = firstDayOfNextMonth.atStartOfDay();
+ // 鏌ヨ鍥炴閲戦
+ LambdaQueryWrapper<ReceiptPayment> receiptPaymentQuery = new LambdaQueryWrapper<>();
+ receiptPaymentQuery
+ .ge(ReceiptPayment::getCreateTime, startTime)
+ .lt(ReceiptPayment::getCreateTime, endTime);
+ List<ReceiptPayment> receiptPayments = receiptPaymentMapper.selectList(receiptPaymentQuery);
- LambdaQueryWrapper<ReceiptPayment> receiptPaymentLambdaQueryWrapper = new LambdaQueryWrapper<>();
- receiptPaymentLambdaQueryWrapper.ge(ReceiptPayment::getCreateTime, startOfMonth)
- .lt(ReceiptPayment::getCreateTime, startOfNextMonth);
+ // 鏌ヨ寮�绁ㄩ噾棰�
+ LambdaQueryWrapper<InvoiceLedger> invoiceLedgerQuery = new LambdaQueryWrapper<>();
+ invoiceLedgerQuery
+ .ge(InvoiceLedger::getCreateTime, startTime)
+ .lt(InvoiceLedger::getCreateTime, endTime);
+ List<InvoiceLedger> invoiceLedgers = invoiceLedgerMapper.selectList(invoiceLedgerQuery);
- LambdaQueryWrapper<InvoiceLedger> invoiceLedgerLambdaQueryWrapper = new LambdaQueryWrapper<>();
- invoiceLedgerLambdaQueryWrapper.ge(InvoiceLedger::getCreateTime, startOfMonth)
- .lt(InvoiceLedger::getCreateTime, startOfNextMonth);
-
- // 鑾峰彇鍥炴閲戦
- List<ReceiptPayment> receiptPaymentList = receiptPaymentMapper.selectList(receiptPaymentLambdaQueryWrapper);
- //寮�绁ㄩ噾棰�
- List<InvoiceLedger> invoiceLedgerList = invoiceLedgerMapper.selectList(invoiceLedgerLambdaQueryWrapper);
-
- // 浣跨敤 Stream 姹傚拰
- BigDecimal invoiceAmount = invoiceLedgerList.stream()
- .map(InvoiceLedger::getInvoiceTotal)
- .filter(Objects::nonNull)
- .reduce(BigDecimal.ZERO, BigDecimal::add);
-
- BigDecimal receiptAmount = receiptPaymentList.stream()
+ // 璁$畻鍥炴鎬婚
+ BigDecimal receiptAmount = receiptPayments.stream()
.map(ReceiptPayment::getReceiptPaymentAmount)
.filter(Objects::nonNull)
.reduce(BigDecimal.ZERO, BigDecimal::add);
- MonthlyAmountDto monthlyAmount = new MonthlyAmountDto();
- monthlyAmount.setMonth(targetMonth.format(DateTimeFormatter.ofPattern("yyyy-MM")));
- monthlyAmount.setInvoiceAmount(invoiceAmount);
- monthlyAmount.setReceiptAmount(receiptAmount);
+ // 璁$畻寮�绁ㄦ�婚
+ BigDecimal invoiceAmount = invoiceLedgers.stream()
+ .map(InvoiceLedger::getInvoiceTotal)
+ .filter(Objects::nonNull)
+ .reduce(BigDecimal.ZERO, BigDecimal::add);
- monthlyAmounts.add(monthlyAmount);
+ // 鏋勯�犺繑鍥炵殑 DTO
+ MonthlyAmountDto dto = new MonthlyAmountDto();
+ dto.setMonth(startTime.format(DateTimeFormatter.ofPattern("yyyy-MM-dd")) + " ~ " +
+ endTime.format(DateTimeFormatter.ofPattern("yyyy-MM-dd")));
+ dto.setReceiptAmount(receiptAmount);
+ dto.setInvoiceAmount(invoiceAmount);
+
+ result.add(dto);
}
- Collections.reverse(monthlyAmounts);
- return monthlyAmounts;
+
+ // 鍙嶈浆鍒楄〃锛屼娇鏃堕棿椤哄簭浠庢棭鍒版櫄
+ Collections.reverse(result);
+ return result;
}
@Override
--
Gitblit v1.9.3