From 4107cf0d0e2edf99dd8d74d5580d95c2b35c1990 Mon Sep 17 00:00:00 2001
From: yaowanxin <3588231647@qq.com>
Date: 星期一, 22 九月 2025 15:06:34 +0800
Subject: [PATCH] 报表统计功能,增添最低库存字段
---
src/main/java/com/ruoyi/procurementrecord/controller/ProcurementRecordController.java | 5 +
src/main/java/com/ruoyi/procurementrecord/dto/ProcurementPageDtoCopy.java | 37 +++++++++
src/main/java/com/ruoyi/procurementrecord/service/ProcurementRecordService.java | 3
src/main/java/com/ruoyi/procurementrecord/dto/ProcurementDto.java | 5 +
src/main/resources/mapper/procurementrecord/ProcurementRecordMapper.xml | 17 ++++
src/main/java/com/ruoyi/procurementrecord/dto/ProcurementPageDto.java | 33 ++++++++
src/main/java/com/ruoyi/procurementrecord/service/impl/ProcurementRecordServiceImpl.java | 103 +++++++++++++++++++++++++
src/main/java/com/ruoyi/procurementrecord/pojo/ProcurementRecordStorage.java | 5 +
8 files changed, 204 insertions(+), 4 deletions(-)
diff --git a/src/main/java/com/ruoyi/procurementrecord/controller/ProcurementRecordController.java b/src/main/java/com/ruoyi/procurementrecord/controller/ProcurementRecordController.java
index a106fb2..4a7b85a 100644
--- a/src/main/java/com/ruoyi/procurementrecord/controller/ProcurementRecordController.java
+++ b/src/main/java/com/ruoyi/procurementrecord/controller/ProcurementRecordController.java
@@ -80,6 +80,11 @@
IPage<ProcurementPageDtoCopy> result =procurementRecordService.listPageCopy(page, procurementDto);
return AjaxResult.success(result);
}
+ @GetMapping("/getReportList")
+ @Log(title = "搴撳瓨鎶ヨ〃鏌ヨ", businessType = BusinessType.OTHER)
+ public AjaxResult getReportList(Page page, ProcurementPageDto procurementDto) {
+ return AjaxResult.success(procurementRecordService.getReportList(page, procurementDto));
+ }
/**
* 瀵煎嚭
diff --git a/src/main/java/com/ruoyi/procurementrecord/dto/ProcurementDto.java b/src/main/java/com/ruoyi/procurementrecord/dto/ProcurementDto.java
index 63ce258..7864f93 100644
--- a/src/main/java/com/ruoyi/procurementrecord/dto/ProcurementDto.java
+++ b/src/main/java/com/ruoyi/procurementrecord/dto/ProcurementDto.java
@@ -57,6 +57,11 @@
private BigDecimal quantity;
/**
+ * 鏈�浣庡簱瀛樻暟閲�
+ */
+ @Excel(name = "鏈�浣庡簱瀛樻暟閲�")
+ private BigDecimal minStock;
+ /**
* 寰呭叆搴撴暟閲�
*/
@Excel(name = "寰呭叆搴撴暟閲�")
diff --git a/src/main/java/com/ruoyi/procurementrecord/dto/ProcurementPageDto.java b/src/main/java/com/ruoyi/procurementrecord/dto/ProcurementPageDto.java
index 51ad7bd..387a8b5 100644
--- a/src/main/java/com/ruoyi/procurementrecord/dto/ProcurementPageDto.java
+++ b/src/main/java/com/ruoyi/procurementrecord/dto/ProcurementPageDto.java
@@ -1,10 +1,13 @@
package com.ruoyi.procurementrecord.dto;
+
import com.fasterxml.jackson.annotation.JsonFormat;
import com.ruoyi.framework.aspectj.lang.annotation.Excel;
import lombok.Data;
+import org.springframework.format.annotation.DateTimeFormat;
import java.math.BigDecimal;
+import java.time.LocalDate;
import java.time.LocalDateTime;
/**
@@ -112,5 +115,35 @@
*/
@Excel(name = "涓嶅惈绋庢�讳环")
private BigDecimal taxExclusiveTotalPrice;
+ /**
+ * 鎶ヨ〃鏃ユ姤
+ */
+ @JsonFormat(pattern = "yyyy-MM-dd", timezone = "GMT+8")
+ @DateTimeFormat(pattern = "yyyy-MM-dd")
+ private LocalDate reportDate;
+ /**
+ * 鎶ヨ〃鏈堟姤
+ */
+ @JsonFormat(pattern = "yyyy-MM-dd", timezone = "GMT+8")
+ @DateTimeFormat(pattern = "yyyy-MM-dd")
+ private LocalDate startMonth;
+ /**
+ * 鎶ヨ〃鏈堟姤
+ */
+ @JsonFormat(pattern = "yyyy-MM-dd", timezone = "GMT+8")
+ @DateTimeFormat(pattern = "yyyy-MM-dd")
+ private LocalDate endMonth;
+ /**
+ * 鎶ヨ〃鏈堟姤
+ */
+ @JsonFormat(pattern = "yyyy-MM-dd", timezone = "GMT+8")
+ @DateTimeFormat(pattern = "yyyy-MM-dd")
+ private LocalDate startDate;
+ /**
+ * 鎶ヨ〃鏈堟姤
+ */
+ @JsonFormat(pattern = "yyyy-MM-dd", timezone = "GMT+8")
+ @DateTimeFormat(pattern = "yyyy-MM-dd")
+ private LocalDate endDate;
}
diff --git a/src/main/java/com/ruoyi/procurementrecord/dto/ProcurementPageDtoCopy.java b/src/main/java/com/ruoyi/procurementrecord/dto/ProcurementPageDtoCopy.java
index 9ef5677..f2e214e 100644
--- a/src/main/java/com/ruoyi/procurementrecord/dto/ProcurementPageDtoCopy.java
+++ b/src/main/java/com/ruoyi/procurementrecord/dto/ProcurementPageDtoCopy.java
@@ -5,6 +5,7 @@
import lombok.Data;
import java.math.BigDecimal;
+import java.time.LocalDate;
import java.time.LocalDateTime;
/**
@@ -43,7 +44,11 @@
@Excel(name = "寰呭嚭搴撴暟閲�")
private BigDecimal inboundNum0;
-
+ /**
+ * 鏈�浣庡簱瀛樻暟閲�
+ */
+ @Excel(name = "鏈�浣庡簱瀛樻暟閲�")
+ private BigDecimal minStock;
/**
* 鍑哄叆搴撴椂闂�
*/
@@ -124,5 +129,35 @@
*/
@Excel(name = "涓嶅惈绋庢�讳环")
private BigDecimal taxExclusiveTotalPrice;
+ /**
+ * 鎶ヨ〃鏃ユ姤
+ */
+ @Excel(name = "鎶ヨ〃鏃ユ姤")
+ @JsonFormat(pattern = "yyyy-MM-dd", timezone = "GMT+8")
+ private LocalDate reportDate;
+ /**
+ * 鎶ヨ〃鏈堟姤
+ */
+ @Excel(name = "鎶ヨ〃鏈堟姤寮�濮嬫椂闂�")
+ @JsonFormat(pattern = "yyyy-MM-dd", timezone = "GMT+8")
+ private LocalDate startMonth;
+ /**
+ * 鎶ヨ〃鏈堟姤
+ */
+ @Excel(name = "鎶ヨ〃鏈堟姤缁撴潫鏃堕棿")
+ @JsonFormat(pattern = "yyyy-MM-dd", timezone = "GMT+8")
+ private LocalDate endMonth;
+ /**
+ * 鎶ヨ〃鏈堟姤
+ */
+ @Excel(name = "鎶ヨ〃浣滀笟寮�濮嬫椂闂�")
+ @JsonFormat(pattern = "yyyy-MM-dd", timezone = "GMT+8")
+ private LocalDate startDate;
+ /**
+ * 鎶ヨ〃鏈堟姤
+ */
+ @Excel(name = "鎶ヨ〃浣滀笟缁撴潫鏃堕棿")
+ @JsonFormat(pattern = "yyyy-MM-dd", timezone = "GMT+8")
+ private LocalDate endDate;
}
diff --git a/src/main/java/com/ruoyi/procurementrecord/pojo/ProcurementRecordStorage.java b/src/main/java/com/ruoyi/procurementrecord/pojo/ProcurementRecordStorage.java
index 495a8a6..a0f73d9 100644
--- a/src/main/java/com/ruoyi/procurementrecord/pojo/ProcurementRecordStorage.java
+++ b/src/main/java/com/ruoyi/procurementrecord/pojo/ProcurementRecordStorage.java
@@ -35,12 +35,17 @@
* 鍏ュ簱鏁伴噺
*/
private BigDecimal inboundNum;
+// /**
+// * 鏈�浣庡簱瀛樻暟閲�
+// */
+// private BigDecimal minStock;
/**
* 鍏ュ簱鐢ㄦ埛
*/
private String createBy;
+
/**
* 鍏ュ簱鐢ㄦ埛id
*/
diff --git a/src/main/java/com/ruoyi/procurementrecord/service/ProcurementRecordService.java b/src/main/java/com/ruoyi/procurementrecord/service/ProcurementRecordService.java
index c7e1699..79603ae 100644
--- a/src/main/java/com/ruoyi/procurementrecord/service/ProcurementRecordService.java
+++ b/src/main/java/com/ruoyi/procurementrecord/service/ProcurementRecordService.java
@@ -8,6 +8,7 @@
import javax.servlet.http.HttpServletResponse;
import java.util.List;
+import java.util.Map;
/**
* @author :yys
@@ -31,4 +32,6 @@
int updateManagement(ProcurementManagementUpdateDto procurementDto);
void exportCopy(HttpServletResponse response);
+
+ Map<String, Object> getReportList(Page page, ProcurementPageDto procurementDto);
}
diff --git a/src/main/java/com/ruoyi/procurementrecord/service/impl/ProcurementRecordServiceImpl.java b/src/main/java/com/ruoyi/procurementrecord/service/impl/ProcurementRecordServiceImpl.java
index 06612f6..1e237f0 100644
--- a/src/main/java/com/ruoyi/procurementrecord/service/impl/ProcurementRecordServiceImpl.java
+++ b/src/main/java/com/ruoyi/procurementrecord/service/impl/ProcurementRecordServiceImpl.java
@@ -4,7 +4,6 @@
import com.baomidou.mybatisplus.core.metadata.IPage;
import com.baomidou.mybatisplus.extension.plugins.pagination.Page;
import com.baomidou.mybatisplus.extension.service.impl.ServiceImpl;
-import com.ruoyi.common.utils.DateUtils;
import com.ruoyi.common.utils.SecurityUtils;
import com.ruoyi.common.utils.poi.ExcelUtil;
import com.ruoyi.framework.security.LoginUser;
@@ -17,7 +16,6 @@
import com.ruoyi.project.system.domain.SysUser;
import com.ruoyi.project.system.mapper.SysUserMapper;
import com.ruoyi.sales.mapper.SalesLedgerProductMapper;
-import com.ruoyi.sales.pojo.SalesLedgerProduct;
import lombok.RequiredArgsConstructor;
import lombok.extern.slf4j.Slf4j;
import org.springframework.stereotype.Service;
@@ -25,9 +23,10 @@
import javax.servlet.http.HttpServletResponse;
import java.math.BigDecimal;
+import java.time.LocalDate;
import java.time.LocalDateTime;
import java.time.format.DateTimeFormatter;
-import java.util.List;
+import java.util.*;
import java.util.stream.Collectors;
/**
@@ -231,6 +230,104 @@
}
@Override
+ public Map<String, Object> getReportList(Page page, ProcurementPageDto procurementDto) {
+ // 鏋勫缓鎶ヨ〃鏁版嵁缁撴瀯
+ Map<String, Object> reportData = new HashMap<>();
+ // 2. 鏋勫缓鍥捐〃鏁版嵁
+ Map<String, Object> chartData = new HashMap<>();
+
+ IPage<ProcurementPageDtoCopy> procurementPageDtoCopyIPage = procurementRecordMapper.listPageCopy(page, procurementDto);
+ List<ProcurementPageDtoCopy> procurementPageDtoCopyList = procurementPageDtoCopyIPage.getRecords();
+ // 璁$畻寰呭叆搴撴暟閲�
+ reportData.put("tableData", procurementPageDtoCopyList);
+ // 鏌ヨ閲囪喘璁板綍宸插叆搴撴暟閲�
+ List<Integer> collect = procurementPageDtoCopyList.stream().map(ProcurementPageDtoCopy::getId).collect(Collectors.toList());
+ if(CollectionUtils.isEmpty(collect)){
+ return reportData;
+ }
+ LambdaQueryWrapper<ProcurementRecordOut> procurementRecordLambdaQueryWrapper = new LambdaQueryWrapper<>();
+ procurementRecordLambdaQueryWrapper.in(ProcurementRecordOut::getProcurementRecordStorageId, collect);
+ List<ProcurementRecordOut> procurementRecords = procurementRecordOutMapper.selectList(procurementRecordLambdaQueryWrapper);
+ if(CollectionUtils.isEmpty( procurementRecords)){
+ return reportData;
+ }
+ int totalIn =0;
+ int totalOut =0;
+ int currentStock =0;
+ int turnoverRate =0;
+ List<String> dates = new ArrayList<>();
+ List<Integer> values = new ArrayList<>();
+ List<String> comparisonDates = new ArrayList<>();
+ List<Integer> inValues = new ArrayList<>();
+ List<Integer> outValues = new ArrayList<>();
+ // 瀹氫箟鏃ユ湡鏍煎紡鍖栧櫒锛屾寚瀹氫负yyyy-MM-dd鏍煎紡
+ DateTimeFormatter dateFormatter = DateTimeFormatter.ISO_LOCAL_DATE;
+ for (ProcurementPageDtoCopy dto : procurementPageDtoCopyList) {
+ dates.add(dto.getCreateTime().format(dateFormatter));
+ comparisonDates.add(dto.getCreateTime().format(dateFormatter));
+
+ // 鏍规嵁閲囪喘鍙拌处ID绛涢�夊搴旂殑鍑哄簱璁板綍
+ List<ProcurementRecordOut> collect1 = procurementRecords.stream()
+ .filter(ProcurementRecordOut -> ProcurementRecordOut.getProcurementRecordStorageId().equals(dto.getId()))
+ .collect(Collectors.toList());
+
+ // 濡傛灉娌℃湁鐩稿叧鐨勫嚭搴撹褰曪紝璺宠繃璇ユ潯鏁版嵁
+ if(CollectionUtils.isEmpty(collect1)){
+ dto.setInboundNum0(dto.getInboundNum());
+ continue;
+ }
+
+ // 璁$畻宸插嚭搴撴暟閲忔�诲拰锛屽苟璁剧疆寰呭嚭搴撴暟閲�
+ BigDecimal totalInboundNum = collect1.stream()
+ .map(ProcurementRecordOut::getInboundNum)
+ .reduce(BigDecimal.ZERO, BigDecimal::add);
+
+ // 寰呭嚭搴撴暟閲� = 鎬绘暟閲� - 宸插嚭搴撴暟閲�
+ dto.setInboundNum0(dto.getInboundNum().subtract(totalInboundNum));
+
+ // 璁$畻鎬诲叆搴撴暟閲�
+ totalIn += dto.getInboundNum().intValue();
+ inValues.add(totalIn);
+ // 璁$畻鎬诲嚭搴撴暟閲�
+ totalOut += totalInboundNum.intValue();
+ outValues.add(totalOut);
+ // 璁$畻褰撳墠搴撳瓨
+ currentStock += dto.getInboundNum().intValue() - totalInboundNum.intValue();
+ values.add(currentStock);
+ // 璁$畻鍛ㄨ浆鐜�
+ if(totalIn > 0){
+ turnoverRate = totalOut * 100 / totalIn;
+ }
+ }
+
+
+ // 1. 鏋勫缓姹囨�绘暟鎹�
+ Map<String, Object> summary = new HashMap<>();
+ summary.put("totalIn", totalIn); // 鎬诲叆搴撻噺锛屽疄闄呭簲浠庢暟鎹绠�
+ summary.put("totalOut", totalOut); // 鎬诲嚭搴撻噺锛屽疄闄呭簲浠庢暟鎹绠�
+ summary.put("currentStock", currentStock); // 褰撳墠搴撳瓨閲忥紝瀹為檯搴斾粠鏁版嵁璁$畻
+ summary.put("turnoverRate", turnoverRate); // 鍛ㄨ浆鐜囷紝瀹為檯搴斾粠鏁版嵁璁$畻
+ reportData.put("summary", summary);
+
+ // 2. 鏋勫缓鍥捐〃鏁版嵁
+// Map<String, Object> chartData = new HashMap<>();
+// List<String> dates = Arrays.asList("2025-09-15", "2025-09-16", "2025-09-17", "2025-09-18", "2025-09-19");
+// List<Integer> values = Arrays.asList(300, 350, 400, 380, 420);
+
+ chartData.put("dates", dates);
+ chartData.put("values", values);
+ chartData.put("comparisonDates", comparisonDates); // 瀹為檯搴斾粠鏁版嵁璁$畻
+ chartData.put("inValues", inValues); // 瀹為檯搴斾粠鏁版嵁璁$畻
+ chartData.put("outValues", outValues); // 瀹為檯搴斾粠鏁版嵁璁$畻
+ reportData.put("chartData", chartData);
+
+ // 3. 璁剧疆琛ㄦ牸鏁版嵁
+ reportData.put("tableData", procurementPageDtoCopyList);
+
+ return reportData;
+ }
+
+ @Override
public int add(ProcurementAddDto procurementDto) {
LoginUser loginUser = SecurityUtils.getLoginUser();
// 鎵归噺鏂板
diff --git a/src/main/resources/mapper/procurementrecord/ProcurementRecordMapper.xml b/src/main/resources/mapper/procurementrecord/ProcurementRecordMapper.xml
index 7d0f59b..e367bc8 100644
--- a/src/main/resources/mapper/procurementrecord/ProcurementRecordMapper.xml
+++ b/src/main/resources/mapper/procurementrecord/ProcurementRecordMapper.xml
@@ -11,6 +11,7 @@
t2.specification_model,
t2.unit,
t2.quantity,
+ t2.min_stock,
t2.quantity as quantity0,
t2.tax_rate,
t2.tax_inclusive_unit_price,
@@ -89,6 +90,7 @@
t1.create_user,
t2.specification_model,
t2.unit,
+ t2.min_stock,
t2.tax_rate,
t2.tax_inclusive_unit_price,
t2.tax_inclusive_total_price,
@@ -107,6 +109,21 @@
<if test="req.supplierName != null and req.supplierName != ''">
and t3.supplier_name like concat('%',#{req.supplierName},'%')
</if>
+ <if test="req.reportDate != null">
+ and t1.create_time >= #{req.reportDate} and t1.create_time < DATE_ADD(#{req.reportDate}, INTERVAL 1 DAY)
+ </if>
+ <if test="req.startMonth != null">
+ and t1.create_time >= #{req.startMonth}
+ </if>
+ <if test="req.endMonth != null">
+ and t1.create_time <= #{req.endMonth}
+ </if>
+ <if test="req.startDate != null">
+ and t1.create_time >= #{req.startDate}
+ </if>
+ <if test="req.endDate != null">
+ and t1.create_time <= #{req.endDate}
+ </if>
</where>
</select>
<select id="listCopy" resultType="com.ruoyi.procurementrecord.dto.ProcurementPageDtoCopy">
--
Gitblit v1.9.3