From f4c288c55d08c04cd026508b358beebfcdce5fc2 Mon Sep 17 00:00:00 2001
From: liding <756868258@qq.com>
Date: 星期五, 22 五月 2026 09:29:09 +0800
Subject: [PATCH] feat(product): 添加产品型号向下复制功能并优化生产报工重量计算 - 在ProductController中新增downCopy接口实现产品型号批量复制功能 - 将ProductionProductMainDto中的bomInputQty字段重命名为inputWeight - 在ProductionProductMainServiceImpl中添加JSON解析逻辑支持从otherData中提取投入重量 - 新增resolveInputWeight、findParameterValue、findFieldValue等工具方法处理复杂参数解析 - 为ProductModelDto添加targetProductId字段用于指定复制目标 - 修复销售台账按调度员ID和姓名分组的SQL查询问题 - 优化库存服务中剩余数量计算的空值处理逻辑 - 完善生产投料数量为空时的默认值处理机制
---
src/main/java/com/ruoyi/stock/service/impl/StockInventoryServiceImpl.java | 384 ++++++++++++++++++++++++++++++------------------------
1 files changed, 210 insertions(+), 174 deletions(-)
diff --git a/src/main/java/com/ruoyi/stock/service/impl/StockInventoryServiceImpl.java b/src/main/java/com/ruoyi/stock/service/impl/StockInventoryServiceImpl.java
index 5a2681f..30077e3 100644
--- a/src/main/java/com/ruoyi/stock/service/impl/StockInventoryServiceImpl.java
+++ b/src/main/java/com/ruoyi/stock/service/impl/StockInventoryServiceImpl.java
@@ -16,17 +16,14 @@
import com.ruoyi.common.enums.StockInUnQualifiedRecordTypeEnum;
import com.ruoyi.common.utils.SecurityUtils;
import com.ruoyi.common.utils.StringUtils;
-import com.ruoyi.common.utils.bean.BeanUtils;
import com.ruoyi.common.utils.poi.ExcelUtil;
import com.ruoyi.framework.security.LoginUser;
import com.ruoyi.framework.web.domain.R;
-import com.ruoyi.stock.dto.FinishedProductTreeDto;
import com.ruoyi.sales.mapper.SalesLedgerProductMapper;
import com.ruoyi.sales.pojo.SalesLedgerProduct;
-import com.ruoyi.stock.dto.StockInRecordDto;
-import com.ruoyi.stock.dto.StockInventoryDto;
-import com.ruoyi.stock.dto.StockOutRecordDto;
-import com.ruoyi.stock.dto.StockUninventoryDto;
+import com.ruoyi.stock.dto.*;
+import com.ruoyi.stock.execl.FinishedProductInventoryExportData;
+import com.ruoyi.stock.execl.NonFinishedProductInventoryExportData;
import com.ruoyi.stock.execl.StockInventoryExportData;
import com.ruoyi.stock.mapper.StockInventoryMapper;
import com.ruoyi.stock.pojo.StockInRecord;
@@ -45,12 +42,7 @@
import java.time.LocalDate;
import java.time.LocalDateTime;
import java.time.format.DateTimeFormatter;
-import java.util.ArrayList;
-import java.util.HashMap;
-import java.util.HashSet;
-import java.util.List;
-import java.util.Map;
-import java.util.Set;
+import java.util.*;
import java.util.regex.Matcher;
import java.util.regex.Pattern;
@@ -79,40 +71,40 @@
return stockInventoryMapper.pagestockInventory(page, stockInventoryDto);
}
- /**
- * 鏌ヨ鎴愬搧搴撳瓨鏍戙��
- * 杩斿洖缁撴瀯娌跨敤鍩虹璧勬枡浜у搧鏍戯紝鍙跺瓙鑺傜偣琛ュ厖鎴愬搧搴撳瓨缁村害锛氬瀷鍙枫�佸伐搴忓垎绫汇�佺數鍘嬨��
- */
@Override
public List<FinishedProductTreeDto> finishedProductList(StockInventoryDto stockInventoryDto) {
- List<StockInventoryDto> inventoryList = stockInventoryMapper.selectFinishedProductInventoryList(stockInventoryDto);
- if (inventoryList.isEmpty()) {
+ // 鏌ヨ搴撳瓨鏁版嵁
+ List<FinishedProductTreeDto> dataList = stockInventoryMapper.selectFinishedProductList(stockInventoryDto);
+ if (dataList.isEmpty()) {
return new ArrayList<>();
}
- List<Product> allProducts = productMapper.selectList(null);
- Map<Long, Product> productMap = new HashMap<>();
- Map<Long, List<Product>> childrenMap = new HashMap<>();
- for (Product product : allProducts) {
- productMap.put(product.getId(), product);
- childrenMap.computeIfAbsent(product.getParentId(), key -> new ArrayList<>()).add(product);
+ // 鎸変骇鍝両D鍒嗙粍锛屾瀯寤烘爲褰㈢粨鏋�
+ Map<Long, FinishedProductTreeDto> productMap = new LinkedHashMap<>();
+ for (FinishedProductTreeDto data : dataList) {
+ Long productId = data.getProductId();
+ if (!productMap.containsKey(productId)) {
+ // 鍒涘缓浜у搧澶х被鑺傜偣
+ FinishedProductTreeDto productNode = new FinishedProductTreeDto();
+ productNode.setProductId(productId);
+ productNode.setProductName(data.getProductName());
+ productNode.setLabel(data.getLabel());
+ productNode.setChildren(new ArrayList<>());
+ productMap.put(productId, productNode);
+ }
+ // 娣诲姞搴撳瓨鍙跺瓙鑺傜偣
+ FinishedProductTreeDto leafNode = new FinishedProductTreeDto();
+ leafNode.setStockId(data.getStockId());
+ leafNode.setProductModelId(data.getProductModelId());
+ leafNode.setModel(data.getModel());
+ leafNode.setProcessCategory(data.getProcessCategory());
+ leafNode.setVoltage(data.getVoltage());
+ leafNode.setMaterialCode(data.getMaterialCode());
+ leafNode.setUnit(data.getUnit());
+ productMap.get(productId).getChildren().add(leafNode);
}
- Map<Long, List<FinishedProductTreeDto>> leafMap = buildFinishedProductLeafMap(inventoryList);
- Set<Long> visibleProductIds = collectVisibleProductIds(leafMap.keySet(), productMap);
-
- List<FinishedProductTreeDto> result = new ArrayList<>();
- for (Product rootProduct : allProducts) {
- if (!isFinishedRoot(rootProduct)) {
- continue;
- }
- FinishedProductTreeDto rootNode = buildProductNode(rootProduct);
- rootNode.setChildren(buildFinishedChildren(rootProduct.getId(), childrenMap, leafMap, visibleProductIds));
- if (!rootNode.getChildren().isEmpty()) {
- result.add(rootNode);
- }
- }
- return result;
+ return new ArrayList<>(productMap.values());
}
@Override
@@ -279,6 +271,25 @@
stockOutRecordDto.setType("0");
stockOutRecordService.add(stockOutRecordDto);
+ //閿�鍞嚭搴撴寜鐓т繚瀛樼殑搴撳瓨id
+ if (stockInventoryDto.getStockId() != null) {
+ StockInventory stockInventory = stockInventoryMapper.selectById(stockInventoryDto.getStockId());
+ if (ObjectUtils.isEmpty(stockInventory)) {
+ throw new RuntimeException("浜у搧搴撳瓨涓嶅瓨鍦�");
+ }
+ BigDecimal lockedQty = defaultDecimal(stockInventory.getLockedQuantity());
+ if (stockInventoryDto.getQualitity().compareTo(defaultDecimal(stockInventory.getQualitity()).subtract(lockedQty)) > 0) {
+ ProductModel productModel = productModelMapper.selectById(stockInventoryDto.getProductModelId());
+ Product product = productMapper.selectById(productModel.getProductId());
+ throw new RuntimeException(product.getProductName() + "/" + productModel.getModel() + "搴撳瓨涓嶈冻锛屾棤娉曞嚭搴�");
+ }
+ stockInventory.setQualitity(defaultDecimal(stockInventory.getQualitity()).subtract(stockInventoryDto.getQualitity()));
+ stockInventory.setVersion(stockInventory.getVersion() == null ? 1 : stockInventory.getVersion() + 1);
+ stockInventory.setUpdateTime(LocalDateTime.now());
+ stockInventoryMapper.updateById(stockInventory);
+ return true;
+ }
+
if (StringUtils.isBlank(stockInventoryDto.getBatchNo()) && !usesDimensionIdentity(normalizeDimension(stockInventoryDto.getProcessCategory()), normalizeDimension(stockInventoryDto.getVoltage()))) {
List<StockInventory> stockInventories = stockInventoryMapper.selectList(new QueryWrapper<StockInventory>().lambda()
.eq(StockInventory::getProductModelId, stockInventoryDto.getProductModelId())
@@ -287,7 +298,7 @@
throw new RuntimeException("浜у搧搴撳瓨涓嶅瓨鍦�");
}
- BigDecimal remainingQty = stockInventoryDto.getQualitity();
+ BigDecimal remainingQty = stockInventoryDto.getQualitity() == null ? BigDecimal.ZERO : stockInventoryDto.getQualitity();
for (StockInventory stockInventory : stockInventories) {
BigDecimal lockedQty = defaultDecimal(stockInventory.getLockedQuantity());
BigDecimal availableQty = defaultDecimal(stockInventory.getQualitity()).subtract(lockedQty);
@@ -335,7 +346,7 @@
}
@Override
- public R importStockInventory(MultipartFile file) {
+ public R importStockInventory(MultipartFile file, Integer productType) {
try {
List<SalesLedgerProduct> salesLedgerProducts = salesLedgerProductMapper.selectProduct();
Map<String, SalesLedgerProduct> productMap = new HashMap<>();
@@ -344,65 +355,129 @@
productMap.put(key, product);
}
- ExcelUtil<StockInventoryExportData> util = new ExcelUtil<>(StockInventoryExportData.class);
- List<StockInventoryExportData> list = util.importExcel(file.getInputStream());
List<String> unmatchedRecords = new ArrayList<>();
int successCount = 0;
- for (StockInventoryExportData dto : list) {
- String key = dto.getProductName() + "|" + dto.getModel();
- SalesLedgerProduct matchedProduct = productMap.get(key);
+ // productType: 1=鎴愬搧, 0=闈炴垚鍝�
+ if (productType == 1) {
+ // 鎴愬搧瀵煎叆锛堝寘鍚伐搴忕被鍒拰鐢靛帇锛�
+ ExcelUtil<FinishedProductInventoryExportData> util = new ExcelUtil<>(FinishedProductInventoryExportData.class);
+ List<FinishedProductInventoryExportData> list = util.importExcel(file.getInputStream());
- if (matchedProduct != null) {
- if (dto.getQualifiedQuantity() != null && dto.getQualifiedQuantity().compareTo(BigDecimal.ZERO) > 0) {
- StockInventoryDto stockInventoryDto = new StockInventoryDto();
- stockInventoryDto.setRecordId(0L);
- stockInventoryDto.setRecordType(StockInQualifiedRecordTypeEnum.CUSTOMIZATION_STOCK_IN.getCode());
- stockInventoryDto.setQualitity(dto.getQualifiedQuantity());
- stockInventoryDto.setRemark(dto.getRemark());
- stockInventoryDto.setWarnNum(dto.getWarnNum());
- stockInventoryDto.setBatchNo(dto.getQualifiedBatchNo());
- stockInventoryDto.setProcessCategory(dto.getProcessCategory());
- stockInventoryDto.setVoltage(dto.getVoltage());
+ for (FinishedProductInventoryExportData dto : list) {
+ String key = dto.getProductName() + "|" + dto.getModel();
+ SalesLedgerProduct matchedProduct = productMap.get(key);
- if (ObjectUtils.isNotEmpty(dto.getQualifiedLockedQuantity())) {
- if (dto.getQualifiedLockedQuantity().compareTo(dto.getQualifiedQuantity()) > 0) {
- throw new RuntimeException("鍚堟牸鍐荤粨鏁伴噺涓嶈兘瓒呰繃鏈瀵煎叆鐨勫悎鏍煎簱瀛樻暟閲�");
+ if (matchedProduct != null) {
+ if (dto.getQualifiedQuantity() != null && dto.getQualifiedQuantity().compareTo(BigDecimal.ZERO) > 0) {
+ StockInventoryDto stockInventoryDto = new StockInventoryDto();
+ stockInventoryDto.setRecordId(0L);
+ stockInventoryDto.setRecordType(StockInQualifiedRecordTypeEnum.CUSTOMIZATION_STOCK_IN.getCode());
+ stockInventoryDto.setQualitity(dto.getQualifiedQuantity());
+ stockInventoryDto.setRemark(dto.getRemark());
+ stockInventoryDto.setWarnNum(dto.getWarnNum());
+ stockInventoryDto.setBatchNo(dto.getQualifiedBatchNo());
+ stockInventoryDto.setProcessCategory(dto.getProcessCategory());
+ stockInventoryDto.setVoltage(dto.getVoltage());
+
+ if (ObjectUtils.isNotEmpty(dto.getQualifiedLockedQuantity())) {
+ if (dto.getQualifiedLockedQuantity().compareTo(dto.getQualifiedQuantity()) > 0) {
+ throw new RuntimeException("鍚堟牸鍐荤粨鏁伴噺涓嶈兘瓒呰繃鏈瀵煎叆鐨勫悎鏍煎簱瀛樻暟閲�");
+ }
+ stockInventoryDto.setLockedQuantity(dto.getQualifiedLockedQuantity());
+ } else {
+ stockInventoryDto.setLockedQuantity(BigDecimal.ZERO);
}
- stockInventoryDto.setLockedQuantity(dto.getQualifiedLockedQuantity());
- } else {
- stockInventoryDto.setLockedQuantity(BigDecimal.ZERO);
+
+ stockInventoryDto.setProductModelId(matchedProduct.getProductModelId());
+ this.addstockInventory(stockInventoryDto);
+ successCount++;
}
- stockInventoryDto.setProductModelId(matchedProduct.getProductModelId());
- this.addstockInventory(stockInventoryDto);
- successCount++;
- }
+ if (dto.getUnQualifiedQuantity() != null && dto.getUnQualifiedQuantity().compareTo(BigDecimal.ZERO) > 0) {
+ StockUninventoryDto stockUninventoryDto = new StockUninventoryDto();
+ stockUninventoryDto.setRecordId(0L);
+ stockUninventoryDto.setRecordType(StockInUnQualifiedRecordTypeEnum.CUSTOMIZATION_UNSTOCK_IN.getCode());
+ stockUninventoryDto.setQualitity(dto.getUnQualifiedQuantity());
+ stockUninventoryDto.setRemark(dto.getRemark());
+ stockUninventoryDto.setBatchNo(dto.getUnQualifiedBatchNo());
- if (dto.getUnQualifiedQuantity() != null && dto.getUnQualifiedQuantity().compareTo(BigDecimal.ZERO) > 0) {
- StockUninventoryDto stockUninventoryDto = new StockUninventoryDto();
- stockUninventoryDto.setRecordId(0L);
- stockUninventoryDto.setRecordType(StockInUnQualifiedRecordTypeEnum.CUSTOMIZATION_UNSTOCK_IN.getCode());
- stockUninventoryDto.setQualitity(dto.getUnQualifiedQuantity());
- stockUninventoryDto.setRemark(dto.getRemark());
- stockUninventoryDto.setBatchNo(dto.getUnQualifiedBatchNo());
-
- if (ObjectUtils.isNotEmpty(dto.getUnQualifiedLockedQuantity())) {
- if (dto.getUnQualifiedLockedQuantity().compareTo(dto.getUnQualifiedQuantity()) > 0) {
- throw new RuntimeException("涓嶅悎鏍煎喕缁撴暟閲忎笉鑳借秴杩囨湰娆″鍏ョ殑涓嶅悎鏍煎簱瀛樻暟閲�");
+ if (ObjectUtils.isNotEmpty(dto.getUnQualifiedLockedQuantity())) {
+ if (dto.getUnQualifiedLockedQuantity().compareTo(dto.getUnQualifiedQuantity()) > 0) {
+ throw new RuntimeException("涓嶅悎鏍煎喕缁撴暟閲忎笉鑳借秴杩囨湰娆″鍏ョ殑涓嶅悎鏍煎簱瀛樻暟閲�");
+ }
+ stockUninventoryDto.setLockedQuantity(dto.getUnQualifiedLockedQuantity());
+ } else {
+ stockUninventoryDto.setLockedQuantity(BigDecimal.ZERO);
}
- stockUninventoryDto.setLockedQuantity(dto.getUnQualifiedLockedQuantity());
- } else {
- stockUninventoryDto.setLockedQuantity(BigDecimal.ZERO);
+
+ stockUninventoryDto.setProductModelId(matchedProduct.getProductModelId());
+ stockUninventoryService.addStockUninventory(stockUninventoryDto);
+ successCount++;
+ }
+ } else {
+ String unmatchedRecord = "浜у搧鍚嶇О锛�" + dto.getProductName() + "锛屽瀷鍙凤細" + dto.getModel() + " 鏈尮閰嶅埌搴撳瓨浜у搧";
+ unmatchedRecords.add(unmatchedRecord);
+ }
+ }
+ } else {
+ // 闈炴垚鍝佸鍏ワ紙涓嶅寘鍚伐搴忕被鍒拰鐢靛帇锛�
+ ExcelUtil<NonFinishedProductInventoryExportData> util = new ExcelUtil<>(NonFinishedProductInventoryExportData.class);
+ List<NonFinishedProductInventoryExportData> list = util.importExcel(file.getInputStream());
+
+ for (NonFinishedProductInventoryExportData dto : list) {
+ String key = dto.getProductName() + "|" + dto.getModel();
+ SalesLedgerProduct matchedProduct = productMap.get(key);
+
+ if (matchedProduct != null) {
+ if (dto.getQualifiedQuantity() != null && dto.getQualifiedQuantity().compareTo(BigDecimal.ZERO) > 0) {
+ StockInventoryDto stockInventoryDto = new StockInventoryDto();
+ stockInventoryDto.setRecordId(0L);
+ stockInventoryDto.setRecordType(StockInQualifiedRecordTypeEnum.CUSTOMIZATION_STOCK_IN.getCode());
+ stockInventoryDto.setQualitity(dto.getQualifiedQuantity());
+ stockInventoryDto.setRemark(dto.getRemark());
+ stockInventoryDto.setWarnNum(dto.getWarnNum());
+ stockInventoryDto.setBatchNo(dto.getQualifiedBatchNo());
+
+ if (ObjectUtils.isNotEmpty(dto.getQualifiedLockedQuantity())) {
+ if (dto.getQualifiedLockedQuantity().compareTo(dto.getQualifiedQuantity()) > 0) {
+ throw new RuntimeException("鍚堟牸鍐荤粨鏁伴噺涓嶈兘瓒呰繃鏈瀵煎叆鐨勫悎鏍煎簱瀛樻暟閲�");
+ }
+ stockInventoryDto.setLockedQuantity(dto.getQualifiedLockedQuantity());
+ } else {
+ stockInventoryDto.setLockedQuantity(BigDecimal.ZERO);
+ }
+
+ stockInventoryDto.setProductModelId(matchedProduct.getProductModelId());
+ this.addstockInventory(stockInventoryDto);
+ successCount++;
}
- stockUninventoryDto.setProductModelId(matchedProduct.getProductModelId());
- stockUninventoryService.addStockUninventory(stockUninventoryDto);
- successCount++;
+ if (dto.getUnQualifiedQuantity() != null && dto.getUnQualifiedQuantity().compareTo(BigDecimal.ZERO) > 0) {
+ StockUninventoryDto stockUninventoryDto = new StockUninventoryDto();
+ stockUninventoryDto.setRecordId(0L);
+ stockUninventoryDto.setRecordType(StockInUnQualifiedRecordTypeEnum.CUSTOMIZATION_UNSTOCK_IN.getCode());
+ stockUninventoryDto.setQualitity(dto.getUnQualifiedQuantity());
+ stockUninventoryDto.setRemark(dto.getRemark());
+ stockUninventoryDto.setBatchNo(dto.getUnQualifiedBatchNo());
+
+ if (ObjectUtils.isNotEmpty(dto.getUnQualifiedLockedQuantity())) {
+ if (dto.getUnQualifiedLockedQuantity().compareTo(dto.getUnQualifiedQuantity()) > 0) {
+ throw new RuntimeException("涓嶅悎鏍煎喕缁撴暟閲忎笉鑳借秴杩囨湰娆″鍏ョ殑涓嶅悎鏍煎簱瀛樻暟閲�");
+ }
+ stockUninventoryDto.setLockedQuantity(dto.getUnQualifiedLockedQuantity());
+ } else {
+ stockUninventoryDto.setLockedQuantity(BigDecimal.ZERO);
+ }
+
+ stockUninventoryDto.setProductModelId(matchedProduct.getProductModelId());
+ stockUninventoryService.addStockUninventory(stockUninventoryDto);
+ successCount++;
+ }
+ } else {
+ String unmatchedRecord = "浜у搧鍚嶇О锛�" + dto.getProductName() + "锛屽瀷鍙凤細" + dto.getModel() + " 鏈尮閰嶅埌搴撳瓨浜у搧";
+ unmatchedRecords.add(unmatchedRecord);
}
- } else {
- String unmatchedRecord = "浜у搧鍚嶇О锛�" + dto.getProductName() + "锛屽瀷鍙凤細" + dto.getModel() + " 鏈尮閰嶅埌搴撳瓨浜у搧";
- unmatchedRecords.add(unmatchedRecord);
}
}
@@ -423,10 +498,55 @@
}
@Override
- public void exportStockInventory(HttpServletResponse response, StockInventoryDto stockInventoryDto) {
+ public void exportStockInventory(HttpServletResponse response, StockInventoryDto stockInventoryDto, Integer productType) {
List<StockInventoryExportData> list = stockInventoryMapper.listStockInventoryExportData(stockInventoryDto);
- ExcelUtil<StockInventoryExportData> util = new ExcelUtil<>(StockInventoryExportData.class);
- util.exportExcel(response, list, "搴撳瓨淇℃伅");
+
+ // productType: 1=鎴愬搧, 0=闈炴垚鍝�
+ if (productType == 1) {
+ // 鎴愬搧瀵煎嚭锛堝寘鍚伐搴忕被鍒拰鐢靛帇锛�
+ List<FinishedProductInventoryExportData> finishedList = new ArrayList<>();
+ for (StockInventoryExportData data : list) {
+ FinishedProductInventoryExportData finishedData = new FinishedProductInventoryExportData();
+ finishedData.setProductName(data.getProductName());
+ finishedData.setModel(data.getModel());
+ finishedData.setUnit(data.getUnit());
+ finishedData.setMaterialCode(data.getMaterialCode());
+ finishedData.setProcessCategory(data.getProcessCategory());
+ finishedData.setVoltage(data.getVoltage());
+ finishedData.setQualifiedBatchNo(data.getQualifiedBatchNo());
+ finishedData.setUnQualifiedBatchNo(data.getUnQualifiedBatchNo());
+ finishedData.setQualifiedQuantity(data.getQualifiedQuantity());
+ finishedData.setUnQualifiedQuantity(data.getUnQualifiedQuantity());
+ finishedData.setWarnNum(data.getWarnNum());
+ finishedData.setQualifiedLockedQuantity(data.getQualifiedLockedQuantity());
+ finishedData.setUnQualifiedLockedQuantity(data.getUnQualifiedLockedQuantity());
+ finishedData.setRemark(data.getRemark());
+ finishedList.add(finishedData);
+ }
+ ExcelUtil<FinishedProductInventoryExportData> util = new ExcelUtil<>(FinishedProductInventoryExportData.class);
+ util.exportExcel(response, finishedList, "鎴愬搧搴撳瓨淇℃伅");
+ } else {
+ // 闈炴垚鍝佸鍑猴紙涓嶅寘鍚伐搴忕被鍒拰鐢靛帇锛�
+ List<NonFinishedProductInventoryExportData> nonFinishedList = new ArrayList<>();
+ for (StockInventoryExportData data : list) {
+ NonFinishedProductInventoryExportData nonFinishedData = new NonFinishedProductInventoryExportData();
+ nonFinishedData.setProductName(data.getProductName());
+ nonFinishedData.setModel(data.getModel());
+ nonFinishedData.setUnit(data.getUnit());
+ nonFinishedData.setMaterialCode(data.getMaterialCode());
+ nonFinishedData.setQualifiedBatchNo(data.getQualifiedBatchNo());
+ nonFinishedData.setUnQualifiedBatchNo(data.getUnQualifiedBatchNo());
+ nonFinishedData.setQualifiedQuantity(data.getQualifiedQuantity());
+ nonFinishedData.setUnQualifiedQuantity(data.getUnQualifiedQuantity());
+ nonFinishedData.setWarnNum(data.getWarnNum());
+ nonFinishedData.setQualifiedLockedQuantity(data.getQualifiedLockedQuantity());
+ nonFinishedData.setUnQualifiedLockedQuantity(data.getUnQualifiedLockedQuantity());
+ nonFinishedData.setRemark(data.getRemark());
+ nonFinishedList.add(nonFinishedData);
+ }
+ ExcelUtil<NonFinishedProductInventoryExportData> util = new ExcelUtil<>(NonFinishedProductInventoryExportData.class);
+ util.exportExcel(response, nonFinishedList, "闈炴垚鍝佸簱瀛樹俊鎭�");
+ }
}
@Override
@@ -505,89 +625,5 @@
private BigDecimal defaultDecimal(BigDecimal value) {
return value == null ? BigDecimal.ZERO : value;
- }
-
- private Map<Long, List<FinishedProductTreeDto>> buildFinishedProductLeafMap(List<StockInventoryDto> inventoryList) {
- Map<Long, List<FinishedProductTreeDto>> leafMap = new HashMap<>();
- for (StockInventoryDto inventory : inventoryList) {
- FinishedProductTreeDto leafNode = new FinishedProductTreeDto();
- leafNode.setId(inventory.getId() == null ? null : -inventory.getId());
- leafNode.setParentId(inventory.getProductId());
- leafNode.setProductId(inventory.getProductId());
- leafNode.setProductModelId(inventory.getProductModelId());
- leafNode.setProductName(inventory.getProductName());
- leafNode.setLabel(buildLeafLabel(inventory));
- leafNode.setModel(inventory.getModel());
- leafNode.setMaterialCode(inventory.getMaterialCode());
- leafNode.setProcessCategory(inventory.getProcessCategory());
- leafNode.setVoltage(inventory.getVoltage());
- leafNode.setChildren(new ArrayList<>());
- leafMap.computeIfAbsent(inventory.getProductId(), key -> new ArrayList<>()).add(leafNode);
- }
- return leafMap;
- }
-
- private Set<Long> collectVisibleProductIds(Set<Long> leafProductIds, Map<Long, Product> productMap) {
- Set<Long> visibleIds = new HashSet<>();
- for (Long productId : leafProductIds) {
- Long currentId = productId;
- while (currentId != null) {
- Product current = productMap.get(currentId);
- if (current == null) {
- break;
- }
- visibleIds.add(currentId);
- currentId = current.getParentId();
- }
- }
- return visibleIds;
- }
-
- private List<FinishedProductTreeDto> buildFinishedChildren(Long parentId,
- Map<Long, List<Product>> childrenMap,
- Map<Long, List<FinishedProductTreeDto>> leafMap,
- Set<Long> visibleProductIds) {
- List<FinishedProductTreeDto> children = new ArrayList<>();
- List<Product> childProducts = childrenMap.getOrDefault(parentId, new ArrayList<>());
- for (Product childProduct : childProducts) {
- if (!visibleProductIds.contains(childProduct.getId())) {
- continue;
- }
- FinishedProductTreeDto childNode = buildProductNode(childProduct);
- List<FinishedProductTreeDto> subChildren = buildFinishedChildren(childProduct.getId(), childrenMap, leafMap, visibleProductIds);
- subChildren.addAll(leafMap.getOrDefault(childProduct.getId(), new ArrayList<>()));
- childNode.setChildren(subChildren);
- children.add(childNode);
- }
- return children;
- }
-
- private FinishedProductTreeDto buildProductNode(Product product) {
- FinishedProductTreeDto node = new FinishedProductTreeDto();
- BeanUtils.copyProperties(product, node);
- node.setLabel(product.getProductName());
- node.setChildren(new ArrayList<>());
- return node;
- }
-
- private boolean isFinishedRoot(Product product) {
- return product.getParentId() == null && "鎴愬搧".equals(StringUtils.trimToEmpty(product.getProductName()));
- }
-
- private String buildLeafLabel(StockInventoryDto inventory) {
- List<String> parts = new ArrayList<>();
- if (StringUtils.isNotBlank(inventory.getProductName())) {
- parts.add(StringUtils.trim(inventory.getProductName()));
- }
- if (StringUtils.isNotBlank(inventory.getModel())) {
- parts.add(StringUtils.trim(inventory.getModel()));
- }
- if (StringUtils.isNotBlank(inventory.getProcessCategory())) {
- parts.add(StringUtils.trim(inventory.getProcessCategory()));
- }
- if (StringUtils.isNotBlank(inventory.getVoltage())) {
- parts.add(StringUtils.trim(inventory.getVoltage()));
- }
- return String.join(" / ", parts);
}
}
--
Gitblit v1.9.3