From 712b1df6fdee09bd92388a60a9f5d890d711387b Mon Sep 17 00:00:00 2001
From: liding <756868258@qq.com>
Date: 星期四, 19 三月 2026 17:34:24 +0800
Subject: [PATCH] fix:1.入库管理和耗材导出优化 2.仓储物流和耗材物流导出修改 3.首页统计仓储物流和耗材物料两边的数据
---
src/main/java/com/ruoyi/home/dto/HomeBusinessDto.java | 8 ++
src/main/resources/mapper/consumables/ConsumablesInventoryMapper.xml | 17 +++++
src/main/java/com/ruoyi/home/dto/QualityStatisticsDto.java | 3 +
src/main/java/com/ruoyi/consumables/execl/ConsumablesInRecordExportData.java | 2
src/main/java/com/ruoyi/quality/pojo/RawMaterial.java | 17 +++++
src/main/resources/mapper/stock/StockInventoryMapper.xml | 12 ++++
src/main/java/com/ruoyi/common/enums/StockOutQualifiedRecordTypeEnum.java | 2
src/main/java/com/ruoyi/consumables/service/impl/ConsumablesInventoryServiceImpl.java | 2
src/main/java/com/ruoyi/consumables/execl/ConsumablesInventoryExportData.java | 9 ++-
src/main/java/com/ruoyi/home/service/impl/HomeServiceImpl.java | 104 +++++++++++++++++++---------------
10 files changed, 123 insertions(+), 53 deletions(-)
diff --git a/src/main/java/com/ruoyi/common/enums/StockOutQualifiedRecordTypeEnum.java b/src/main/java/com/ruoyi/common/enums/StockOutQualifiedRecordTypeEnum.java
index f4d92f7..f02a11a 100644
--- a/src/main/java/com/ruoyi/common/enums/StockOutQualifiedRecordTypeEnum.java
+++ b/src/main/java/com/ruoyi/common/enums/StockOutQualifiedRecordTypeEnum.java
@@ -5,7 +5,7 @@
@Getter
public enum StockOutQualifiedRecordTypeEnum implements BaseEnum<String> {
- CUSTOMIZATION_STOCK_OUT("1", "鍚堟牸鑷畾涔夊嚭搴�");
+ CUSTOMIZATION_STOCK_OUT("0", "鍚堟牸鑷畾涔夊嚭搴�");
// PRODUCTION_REPORT_STOCK_OUT("3", "鐢熶骇鎶ュ伐-鍑哄簱");
// SALE_STOCK_OUT("8", "閿�鍞�-鍑哄簱"),
// SALE_SHIP_STOCK_OUT("13", "閿�鍞�-鍙戣揣鍑哄簱");
diff --git a/src/main/java/com/ruoyi/consumables/execl/ConsumablesInRecordExportData.java b/src/main/java/com/ruoyi/consumables/execl/ConsumablesInRecordExportData.java
index 12681e6..247e3fe 100644
--- a/src/main/java/com/ruoyi/consumables/execl/ConsumablesInRecordExportData.java
+++ b/src/main/java/com/ruoyi/consumables/execl/ConsumablesInRecordExportData.java
@@ -21,7 +21,7 @@
@Excel(name = "鍏ュ簱鏉ユ簮")
private String recordType;
@Excel(name = "鍏ュ簱鏁伴噺")
- private String ConsumablesInNum;
+ private String stockInNum;
@Excel(name = "鍏ュ簱鏃堕棿")
@DateTimeFormat(pattern = "yyyy-MM-dd HH:mm:ss")
@JsonFormat(pattern = "yyyy-MM-dd HH:mm:ss")
diff --git a/src/main/java/com/ruoyi/consumables/execl/ConsumablesInventoryExportData.java b/src/main/java/com/ruoyi/consumables/execl/ConsumablesInventoryExportData.java
index 01e4e6f..2714ec6 100644
--- a/src/main/java/com/ruoyi/consumables/execl/ConsumablesInventoryExportData.java
+++ b/src/main/java/com/ruoyi/consumables/execl/ConsumablesInventoryExportData.java
@@ -21,13 +21,16 @@
@Excel(name = "搴撳瓨鏁伴噺")
private BigDecimal qualitity;
-
- @Excel(name = "棰勮鏁伴噺")
- private BigDecimal warnNum;
+//
+// @Excel(name = "棰勮鏁伴噺")
+// private BigDecimal warnNum;
@Excel(name = "鍐荤粨鏁伴噺")
private BigDecimal lockedQuantity;
+ @Excel(name = "鍑�閲嶏紙鍚級")
+ private BigDecimal netWeight;
+
@Excel(name = "澶囨敞")
private String remark;
//
diff --git a/src/main/java/com/ruoyi/consumables/service/impl/ConsumablesInventoryServiceImpl.java b/src/main/java/com/ruoyi/consumables/service/impl/ConsumablesInventoryServiceImpl.java
index 95001f1..b0ecb27 100644
--- a/src/main/java/com/ruoyi/consumables/service/impl/ConsumablesInventoryServiceImpl.java
+++ b/src/main/java/com/ruoyi/consumables/service/impl/ConsumablesInventoryServiceImpl.java
@@ -162,7 +162,7 @@
consumablesInventoryDto.setRecordType(StockInQualifiedRecordTypeEnum.CUSTOMIZATION_STOCK_IN.getCode());
consumablesInventoryDto.setQualitity(dto.getQualitity());
consumablesInventoryDto.setRemark(dto.getRemark());
- consumablesInventoryDto.setWarnNum(dto.getWarnNum());
+ consumablesInventoryDto.setNetWeight(dto.getNetWeight());
if (ObjectUtils.isNotEmpty(dto.getLockedQuantity()) && dto.getLockedQuantity().compareTo(dto.getQualitity()) > 0) {
throw new RuntimeException("鍐荤粨鏁伴噺涓嶈兘瓒呰繃鏈瀵煎叆鐨勫簱瀛樻暟閲�");
}
diff --git a/src/main/java/com/ruoyi/home/dto/HomeBusinessDto.java b/src/main/java/com/ruoyi/home/dto/HomeBusinessDto.java
index 6c5a20a..de0b719 100644
--- a/src/main/java/com/ruoyi/home/dto/HomeBusinessDto.java
+++ b/src/main/java/com/ruoyi/home/dto/HomeBusinessDto.java
@@ -4,8 +4,6 @@
import io.swagger.annotations.ApiModelProperty;
import lombok.Data;
-import java.math.BigDecimal;
-
/**
* @author :yys
* @date : 2025/7/25 9:25
@@ -29,7 +27,13 @@
@ApiModelProperty("褰撳墠搴撳瓨鏁伴噺")
private String inventoryNum = "0.00";
+ @ApiModelProperty("褰撳墠鑰楁潗搴撳瓨鏁伴噺")
+ private String consumablesQuantityTotal = "0.00";
+
@ApiModelProperty("浠婃棩搴撳瓨鏁伴噺")
private String todayInventoryNum = "0.00";
+ @ApiModelProperty("浠婃棩鑰楁潗搴撳瓨鏁伴噺")
+ private String consumablesTodayNum = "0.00";
+
}
diff --git a/src/main/java/com/ruoyi/home/dto/QualityStatisticsDto.java b/src/main/java/com/ruoyi/home/dto/QualityStatisticsDto.java
index 970449a..de52765 100644
--- a/src/main/java/com/ruoyi/home/dto/QualityStatisticsDto.java
+++ b/src/main/java/com/ruoyi/home/dto/QualityStatisticsDto.java
@@ -1,5 +1,6 @@
package com.ruoyi.home.dto;
+import com.ruoyi.quality.pojo.RawMaterial;
import io.swagger.annotations.ApiModel;
import io.swagger.annotations.ApiModelProperty;
import lombok.Data;
@@ -26,4 +27,6 @@
private List<QualityStatisticsItem> item;
+ private List<RawMaterial> rawItem;
+
}
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 29a8c37..ddb36b9 100644
--- a/src/main/java/com/ruoyi/home/service/impl/HomeServiceImpl.java
+++ b/src/main/java/com/ruoyi/home/service/impl/HomeServiceImpl.java
@@ -19,6 +19,7 @@
import com.ruoyi.common.enums.ApproveTypeEnum;
import com.ruoyi.common.utils.SecurityUtils;
import com.ruoyi.common.utils.StringUtils;
+import com.ruoyi.consumables.mapper.ConsumablesInventoryMapper;
import com.ruoyi.device.mapper.DeviceRepairMapper;
import com.ruoyi.device.pojo.DeviceRepair;
import com.ruoyi.dto.MapDto;
@@ -38,8 +39,10 @@
import com.ruoyi.purchase.pojo.PurchaseLedger;
import com.ruoyi.quality.mapper.QualityInspectMapper;
import com.ruoyi.quality.mapper.QualityUnqualifiedMapper;
+import com.ruoyi.quality.mapper.RawMaterialMapper;
import com.ruoyi.quality.pojo.QualityInspect;
import com.ruoyi.quality.pojo.QualityUnqualified;
+import com.ruoyi.quality.pojo.RawMaterial;
import com.ruoyi.sales.mapper.ReceiptPaymentMapper;
import com.ruoyi.sales.mapper.SalesLedgerMapper;
import com.ruoyi.sales.mapper.SalesLedgerProductMapper;
@@ -85,6 +88,9 @@
private StockInventoryMapper stockInventoryMapper;
@Autowired
+ private ConsumablesInventoryMapper consumablesInventoryMapper;
+
+ @Autowired
private QualityInspectMapper qualityStatisticsMapper;
@Autowired
@@ -128,6 +134,9 @@
@Autowired
private QualityInspectMapper qualityInspectMapper;
+
+ @Autowired
+ private RawMaterialMapper rawMaterialMapper;
@Autowired
private QualityUnqualifiedMapper qualityUnqualifiedMapper;
@@ -202,11 +211,15 @@
}
// 缁熻搴撳瓨
BigDecimal stockQuantityTotal = stockInventoryMapper.selectTotal();
+ BigDecimal consumablesQuantityTotal = consumablesInventoryMapper.selectTotal();
homeBusinessDto.setInventoryNum(stockQuantityTotal.setScale(2, RoundingMode.HALF_UP).toString());
+ homeBusinessDto.setConsumablesQuantityTotal(consumablesQuantityTotal.setScale(2, RoundingMode.HALF_UP).toString());
// 鑾峰彇褰撳ぉ鍏ュ簱鏁伴噺
BigDecimal bigDecimal = stockInventoryMapper.selectTotalByDate(LocalDate.now());
+ BigDecimal consumablesTodayNum = consumablesInventoryMapper.selectTotalByDate(LocalDate.now());
homeBusinessDto.setTodayInventoryNum(bigDecimal.setScale(2, RoundingMode.HALF_UP).toString());
+ homeBusinessDto.setConsumablesTodayNum(consumablesTodayNum.setScale(2, RoundingMode.HALF_UP).toString());
return homeBusinessDto;
}
@@ -2389,87 +2402,88 @@
endDate = today.with(DayOfWeek.SUNDAY);
}
- List<QualityInspect> qualityInspectList = qualityInspectMapper
- .selectList(new LambdaQueryWrapper<QualityInspect>()
- .ge(QualityInspect::getCheckTime, startDate.toString())
- .le(QualityInspect::getCheckTime, endDate.toString())
- .eq(QualityInspect::getInspectState, 1));
+ List<RawMaterial> rawMaterialList = rawMaterialMapper
+ .selectList(new LambdaQueryWrapper<RawMaterial>()
+ .ge(RawMaterial::getCheckTime, startDate.toString())
+ .le(RawMaterial::getCheckTime, endDate.toString())
+ .eq(RawMaterial::getInspectState, 1));
QualityStatisticsDto dto = new QualityStatisticsDto();
- dto.setSupplierNum(sumQuantity(qualityInspectList, 0)); // 鍘熸潗鏂�
- dto.setProcessNum(sumQuantity(qualityInspectList, 1)); // 杩囩▼
- dto.setFactoryNum(sumQuantity(qualityInspectList, 2)); // 鍑哄巶
+ Map<Integer, BigDecimal> countMap = rawMaterialList.stream()
+ .collect(Collectors.groupingBy(
+ RawMaterial::getCheckType,
+ Collectors.collectingAndThen(
+ Collectors.counting(),
+ count -> BigDecimal.valueOf(count)
+ )
+ ));
- Map<String, List<QualityInspect>> groupedByCheckResult = qualityInspectList.stream()
- .collect(Collectors.groupingBy(QualityInspect::getCheckResult));
+ dto.setSupplierNum(countMap.getOrDefault(0, BigDecimal.ZERO)); // 鍏ュ巶
+ dto.setProcessNum(countMap.getOrDefault(1, BigDecimal.ZERO)); // 杞﹂棿
+ dto.setFactoryNum(countMap.getOrDefault(2, BigDecimal.ZERO)); // 鍑哄巶
- List<QualityInspect> qualityInspects = groupedByCheckResult.getOrDefault("涓嶅悎鏍�", new ArrayList<>());
+ // 3. 绛涢�変笉鍚堟牸鐨勮褰曪紙check_result = 0锛�
+ List<RawMaterial> unqualifiedList = rawMaterialList.stream()
+ .filter(i -> i.getCheckResult() == 0) // 0琛ㄧず涓嶅悎鏍�
+ .collect(Collectors.toList());
// 4. 澶勭悊鍥捐〃椤� (Item)
- List<QualityStatisticsItem> itemList = new ArrayList<>();
-
- Map<QualityInspect, LocalDate> dateMap = qualityInspects.isEmpty() ?
- new HashMap<>() :
- qualityInspectList.stream()
- .collect(Collectors.toMap(
- i -> i,
- i -> i.getCheckTime().toInstant().atZone(ZoneId.systemDefault()).toLocalDate(),
- (existing, replacement) -> existing));
+ List<RawMaterial> itemList = new ArrayList<>();
if (type == 3) {
// 瀛e害妯″紡锛氭寜鏈堝垎缁�
- Map<String, List<QualityInspect>> groupByMonth = qualityInspects.isEmpty() ?
+ Map<String, List<RawMaterial>> groupByMonth = unqualifiedList.isEmpty() ?
new HashMap<>() :
- qualityInspects.stream()
+ unqualifiedList.stream()
.collect(Collectors.groupingBy(i -> {
- LocalDate ld = dateMap.get(i);
+ LocalDate ld = i.getCheckTime().toInstant()
+ .atZone(ZoneId.systemDefault()).toLocalDate();
return ld.format(DateTimeFormatter.ofPattern("yyyy-MM"));
}));
for (int i = 0; i < 3; i++) {
LocalDate monthDate = startDate.plusMonths(i);
String monthStr = monthDate.format(DateTimeFormatter.ofPattern("yyyy-MM"));
- itemList.add(buildItem(monthStr, groupByMonth.getOrDefault(monthStr, new ArrayList<>())));
+ List<RawMaterial> monthData = groupByMonth.getOrDefault(monthStr, new ArrayList<>());
+ itemList.add(buildItem(monthStr, monthData));
}
} else {
// 鍛ㄦ垨鏈堟ā寮忥細鎸夊ぉ鍒嗙粍
- Map<String, List<QualityInspect>> groupByDay = qualityInspects.isEmpty() ?
+ Map<String, List<RawMaterial>> groupByDay = unqualifiedList.isEmpty() ?
new HashMap<>() :
- qualityInspects.stream()
+ unqualifiedList.stream()
.collect(Collectors.groupingBy(i -> {
- LocalDate ld = dateMap.get(i);
+ LocalDate ld = i.getCheckTime().toInstant()
+ .atZone(ZoneId.systemDefault()).toLocalDate();
return ld.format(DateTimeFormatter.ofPattern("MM/dd"));
}));
+
long days = ChronoUnit.DAYS.between(startDate, endDate);
for (int i = 0; i <= days; i++) {
LocalDate tempDay = startDate.plusDays(i);
String dayStr = tempDay.format(DateTimeFormatter.ofPattern("MM/dd"));
- itemList.add(buildItem(dayStr, groupByDay.getOrDefault(dayStr, new ArrayList<>())));
+ List<RawMaterial> dayData = groupByDay.getOrDefault(dayStr, new ArrayList<>());
+ itemList.add(buildItem(dayStr, dayData));
}
}
- dto.setItem(itemList);
+ dto.setRawItem(itemList);
return dto;
}
- private BigDecimal sumQuantity(List<QualityInspect> list, Integer type) {
- return list.stream()
- .filter(i -> i.getInspectType().equals(type))
- .map(QualityInspect::getQuantity)
- .filter(Objects::nonNull)
- .reduce(BigDecimal.ZERO, BigDecimal::add);
- }
-
- private QualityStatisticsItem buildItem(String dateLabel, List<QualityInspect> list) {
- QualityStatisticsItem item = new QualityStatisticsItem();
+ private RawMaterial buildItem(String dateLabel, List<RawMaterial> list) {
+ RawMaterial item = new RawMaterial();
item.setDate(dateLabel);
- item.setSupplierNum(list.stream().filter(i -> i.getInspectType() == 0).map(QualityInspect::getQuantity)
- .reduce(BigDecimal.ZERO, BigDecimal::add));
- item.setProcessNum(list.stream().filter(i -> i.getInspectType() == 1).map(QualityInspect::getQuantity)
- .reduce(BigDecimal.ZERO, BigDecimal::add));
- item.setFactoryNum(list.stream().filter(i -> i.getInspectType() == 2).map(QualityInspect::getQuantity)
- .reduce(BigDecimal.ZERO, BigDecimal::add));
+ item.setSupplierNum(
+ BigDecimal.valueOf(list.stream().filter(i -> i.getCheckType() == 0).count())
+ );
+ item.setProcessNum(
+ BigDecimal.valueOf(list.stream().filter(i -> i.getCheckType() == 1).count())
+ );
+ item.setFactoryNum(
+ BigDecimal.valueOf(list.stream().filter(i -> i.getCheckType() == 2).count())
+ );
return item;
}
diff --git a/src/main/java/com/ruoyi/quality/pojo/RawMaterial.java b/src/main/java/com/ruoyi/quality/pojo/RawMaterial.java
index bf7d158..6cf90ca 100644
--- a/src/main/java/com/ruoyi/quality/pojo/RawMaterial.java
+++ b/src/main/java/com/ruoyi/quality/pojo/RawMaterial.java
@@ -10,6 +10,7 @@
import org.springframework.format.annotation.DateTimeFormat;
import java.io.Serializable;
+import java.math.BigDecimal;
import java.time.LocalDateTime;
import java.util.Date;
@@ -68,4 +69,20 @@
@ApiModelProperty(value = "淇敼鏃堕棿")
@TableField(fill = FieldFill.INSERT_UPDATE)
private LocalDateTime updateTime;
+
+
+ @ApiModelProperty(value = "鍘熸潗鏂欎笉鍚堟牸鏁�")
+ @TableField(exist = false)
+ private BigDecimal supplierNum;
+
+ @ApiModelProperty(value = "鍑哄巶涓嶅悎鏍兼暟")
+ @TableField(exist = false)
+ private BigDecimal factoryNum;
+
+ @TableField(exist = false)
+ @ApiModelProperty(value = "杩囩▼涓嶅悎鏍兼暟")
+ private BigDecimal processNum;
+
+ @TableField(exist = false)
+ private String date;
}
diff --git a/src/main/resources/mapper/consumables/ConsumablesInventoryMapper.xml b/src/main/resources/mapper/consumables/ConsumablesInventoryMapper.xml
index da58179..3f7f8d4 100644
--- a/src/main/resources/mapper/consumables/ConsumablesInventoryMapper.xml
+++ b/src/main/resources/mapper/consumables/ConsumablesInventoryMapper.xml
@@ -110,6 +110,8 @@
<select id="listConsumablesInventoryExportData" resultType="com.ruoyi.consumables.execl.ConsumablesInventoryExportData">
select si.qualitity,
+ -- 褰撳墠鍑�閲� = 鍏ュ簱鍑�閲� - 鍑哄簱鍑�閲�
+ (COALESCE(sir.total_net_weight,0) - COALESCE(sor.total_net_weight,0)) as net_weight,
pm.model,
pm.unit,
p.product_name,
@@ -120,6 +122,21 @@
from consumables_inventory si
left join product_model pm on si.product_model_id = pm.id
left join product p on pm.product_id = p.id
+ left join (
+ select
+ product_model_id,
+ sum(net_weight) as total_net_weight
+ from Consumables_in_record
+ group by product_model_id
+ ) sir on si.product_model_id = sir.product_model_id
+ -- 鍑哄簱鍑�閲�
+ left join (
+ select
+ product_model_id,
+ sum(net_weight) as total_net_weight
+ from Consumables_out_record
+ group by product_model_id
+ ) sor on si.product_model_id = sor.product_model_id
where 1 = 1
<if test="ew.productName != null and ew.productName !=''">
and p.product_name like concat('%',#{ew.productName},'%')
diff --git a/src/main/resources/mapper/stock/StockInventoryMapper.xml b/src/main/resources/mapper/stock/StockInventoryMapper.xml
index 9e0ab0e..7bc72a7 100644
--- a/src/main/resources/mapper/stock/StockInventoryMapper.xml
+++ b/src/main/resources/mapper/stock/StockInventoryMapper.xml
@@ -102,6 +102,8 @@
<select id="listStockInventoryExportData" resultType="com.ruoyi.stock.execl.StockInventoryExportData">
select si.qualitity,
+ -- 褰撳墠鍑�閲� = 鍏ュ簱鍑�閲� - 鍑哄簱鍑�閲�
+ (COALESCE(sir.total_net_weight, 0) - COALESCE(sor.total_net_weight, 0)) AS net_weight,-
pm.model,
pm.unit,
p.product_name,
@@ -112,6 +114,16 @@
from stock_inventory si
left join product_model pm on si.product_model_id = pm.id
left join product p on pm.product_id = p.id
+ LEFT JOIN (
+ SELECT product_model_id, SUM(net_weight) AS total_net_weight
+ FROM stock_in_record
+ GROUP BY product_model_id
+ ) sir ON si.product_model_id = sir.product_model_id
+ LEFT JOIN (
+ SELECT product_model_id, SUM(net_weight) AS total_net_weight
+ FROM stock_out_record
+ GROUP BY product_model_id
+ ) sor ON si.product_model_id = sor.product_model_id
where 1 = 1
<if test="ew.productName != null and ew.productName !=''">
and p.product_name like concat('%',#{ew.productName},'%')
--
Gitblit v1.9.3