From 52e93e45d7c989483693f53ded1b4483891fb055 Mon Sep 17 00:00:00 2001
From: gongchunyi <deslre0381@gmail.com>
Date: 星期四, 12 三月 2026 14:44:28 +0800
Subject: [PATCH] feat: 物料类型与存货类别的新增、删除和修改,物料规格的导入数据
---
src/main/java/com/ruoyi/production/service/impl/ProductMaterialSkuServiceImpl.java | 105 ++++++++++++++++++++++++++++++++++++++++++++++++++++
1 files changed, 105 insertions(+), 0 deletions(-)
diff --git a/src/main/java/com/ruoyi/production/service/impl/ProductMaterialSkuServiceImpl.java b/src/main/java/com/ruoyi/production/service/impl/ProductMaterialSkuServiceImpl.java
index 289b3ad..b319f53 100644
--- a/src/main/java/com/ruoyi/production/service/impl/ProductMaterialSkuServiceImpl.java
+++ b/src/main/java/com/ruoyi/production/service/impl/ProductMaterialSkuServiceImpl.java
@@ -4,20 +4,28 @@
import com.baomidou.mybatisplus.extension.service.impl.ServiceImpl;
import com.ruoyi.common.exception.ServiceException;
import com.ruoyi.common.utils.StringUtils;
+import com.ruoyi.common.utils.poi.ExcelUtil;
import com.ruoyi.production.dto.ProductMaterialSkuDto;
import com.ruoyi.production.mapper.ProductMaterialMapper;
import com.ruoyi.production.mapper.ProductMaterialSkuMapper;
import com.ruoyi.production.pojo.ProductMaterial;
import com.ruoyi.production.pojo.ProductMaterialSku;
+import com.ruoyi.production.pojo.ProductMaterialSkuImportDto;
import com.ruoyi.production.service.ProductMaterialSkuService;
import lombok.extern.slf4j.Slf4j;
import org.springframework.beans.factory.annotation.Autowired;
import org.springframework.stereotype.Service;
+import org.springframework.transaction.annotation.Transactional;
+import org.springframework.web.multipart.MultipartFile;
import java.time.LocalDateTime;
import java.util.ArrayList;
import java.util.Collections;
+import java.util.LinkedHashMap;
import java.util.List;
+import java.util.Map;
+import java.util.Set;
+import java.util.stream.Collectors;
/**
* <br>
@@ -163,4 +171,101 @@
return this.count(queryWrapper) > 0;
}
+
+ @Override
+ @Transactional(rollbackFor = Exception.class)
+ public void importProdData(MultipartFile file, Long materialId) {
+ if (materialId == null) {
+ throw new ServiceException("鐗╂枡ID涓嶈兘涓虹┖");
+ }
+ if (file == null || file.isEmpty()) {
+ throw new ServiceException("瀵煎叆鏂囦欢涓嶈兘涓虹┖");
+ }
+
+ ProductMaterial material = productMaterialMapper.selectById(materialId);
+ if (material == null) {
+ throw new ServiceException("鐗╂枡涓嶅瓨鍦�");
+ }
+
+ ExcelUtil<ProductMaterialSkuImportDto> excelUtil = new ExcelUtil<>(ProductMaterialSkuImportDto.class);
+ List<ProductMaterialSkuImportDto> importList;
+ try {
+ importList = excelUtil.importExcel(file.getInputStream());
+ } catch (Exception e) {
+ log.error("瀵煎叆鐗╂枡瑙勬牸Excel瑙f瀽澶辫触", e);
+ throw new ServiceException("Excel瑙f瀽澶辫触");
+ }
+
+ if (importList == null || importList.isEmpty()) {
+ throw new ServiceException("Excel娌℃湁鏁版嵁");
+ }
+
+ Map<String, ProductMaterialSkuImportDto> specMap = new LinkedHashMap<>();
+ for (ProductMaterialSkuImportDto dto : importList) {
+ if (dto == null || StringUtils.isEmpty(dto.getSpecification())) {
+ continue;
+ }
+ String specification = dto.getSpecification().trim();
+ if (specification.isEmpty()) {
+ continue;
+ }
+ specMap.putIfAbsent(specification, dto);
+ }
+
+ if (specMap.isEmpty()) {
+ throw new ServiceException("Excel娌℃湁鏈夋晥鐨勮鏍兼暟鎹�");
+ }
+
+ Set<String> specifications = specMap.keySet();
+
+ List<ProductMaterialSku> existList = this.list(new LambdaQueryWrapper<ProductMaterialSku>()
+ .eq(ProductMaterialSku::getMaterialId, materialId)
+ .in(ProductMaterialSku::getSpecification, specifications));
+ Map<String, ProductMaterialSku> existMap = existList.stream()
+ .collect(Collectors.toMap(ProductMaterialSku::getSpecification, sku -> sku, (a, b) -> a));
+
+ LocalDateTime now = LocalDateTime.now();
+ List<ProductMaterialSku> saveList = new ArrayList<>();
+ List<ProductMaterialSku> updateList = new ArrayList<>();
+
+ for (Map.Entry<String, ProductMaterialSkuImportDto> entry : specMap.entrySet()) {
+ String specification = entry.getKey();
+ ProductMaterialSkuImportDto dto = entry.getValue();
+ String supplyType = StringUtils.isNotEmpty(dto.getSupplyType()) ? dto.getSupplyType().trim() : null;
+
+ ProductMaterialSku exist = existMap.get(specification);
+ if (exist == null) {
+ ProductMaterialSku sku = new ProductMaterialSku();
+ sku.setMaterialId(materialId);
+ sku.setSpecification(specification);
+ sku.setSupplyType(supplyType);
+ sku.setCreateTime(now);
+ sku.setUpdateTime(now);
+ saveList.add(sku);
+ } else {
+ boolean needUpdate = false;
+ if (supplyType != null && !supplyType.equals(exist.getSupplyType())) {
+ exist.setSupplyType(supplyType);
+ needUpdate = true;
+ }
+ if (needUpdate) {
+ exist.setUpdateTime(now);
+ updateList.add(exist);
+ }
+ }
+ }
+
+ if (saveList.isEmpty() && updateList.isEmpty()) {
+ throw new ServiceException("Excel涓庣幇鏈夋暟鎹竴鑷达紝鏃犻渶瀵煎叆");
+ }
+
+ if (!saveList.isEmpty()) {
+ this.saveBatch(saveList);
+ }
+ if (!updateList.isEmpty()) {
+ this.updateBatchById(updateList);
+ }
+
+ log.info("鐗╂枡瑙勬牸瀵煎叆瀹屾垚 materialId={}, 鏂板{}鏉★紝鏇存柊{}鏉�", materialId, saveList.size(), updateList.size());
+ }
}
--
Gitblit v1.9.3