From d0b101c3cdbd9c9b1929232e768b5b8f72b6352a Mon Sep 17 00:00:00 2001
From: 云 <2163098428@qq.com>
Date: 星期五, 27 三月 2026 10:18:13 +0800
Subject: [PATCH] yys 1.生产逻辑修改
---
src/main/java/com/ruoyi/basic/service/impl/ProductModelServiceImpl.java | 173 +++++++++++++++++++++++++++++++++++++++------------------
1 files changed, 119 insertions(+), 54 deletions(-)
diff --git a/src/main/java/com/ruoyi/basic/service/impl/ProductModelServiceImpl.java b/src/main/java/com/ruoyi/basic/service/impl/ProductModelServiceImpl.java
index 632edec..d98d0de 100644
--- a/src/main/java/com/ruoyi/basic/service/impl/ProductModelServiceImpl.java
+++ b/src/main/java/com/ruoyi/basic/service/impl/ProductModelServiceImpl.java
@@ -16,19 +16,24 @@
import com.ruoyi.common.utils.bean.BeanUtils;
import com.ruoyi.common.utils.poi.ExcelUtil;
import com.ruoyi.common.utils.uuid.IdUtils;
+import com.ruoyi.other.mapper.TempFileMapper;
+import com.ruoyi.other.service.impl.TempFileServiceImpl;
+import com.ruoyi.production.mapper.ProductProcessMapper;
+import com.ruoyi.production.pojo.ProductProcess;
+import com.ruoyi.sales.mapper.CommonFileMapper;
import com.ruoyi.sales.mapper.SalesLedgerProductMapper;
import com.ruoyi.sales.pojo.SalesLedgerProduct;
+import com.ruoyi.sales.service.impl.CommonFileServiceImpl;
import lombok.AllArgsConstructor;
import org.apache.commons.collections4.CollectionUtils;
import org.springframework.stereotype.Service;
import org.springframework.transaction.annotation.Transactional;
import org.springframework.web.multipart.MultipartFile;
+import java.io.IOException;
import java.time.LocalDate;
import java.time.format.DateTimeFormatter;
-import java.util.Arrays;
-import java.util.List;
-import java.util.Map;
+import java.util.*;
import java.util.stream.Collectors;
/**
@@ -44,14 +49,19 @@
private final ProductMapper productMapper;
private final SalesLedgerProductMapper salesLedgerProductMapper;
private ProductModelMapper productModelMapper;
+ private final CommonFileServiceImpl commonFileService;
+ private final ProductProcessMapper productProcessMapper;
+
+ private final TempFileServiceImpl tempFileService;
@Override
- public int addOrEditProductModel(ProductModelDto productModelDto) {
+ public int addOrEditProductModel(ProductModelDto productModelDto) throws IOException {
if(StringUtils.isEmpty(productModelDto.getProductName())){
throw new RuntimeException("浜у搧鍚嶇О涓嶈兘涓虹┖");
}
Product product = productMapper.selectOne(new LambdaQueryWrapper<Product>()
- .eq(Product::getProductName, productModelDto.getProductName()));
+// .eq(Product::getModel, productModelDto.getModel())
+ .eq(Product::getProductName, productModelDto.getProductName()));
if (productModelDto.getId() == null) {
if(product == null){
product = new Product();
@@ -61,15 +71,23 @@
ProductModel productModel = new ProductModel();
BeanUtils.copyProperties(productModelDto,productModel);
productModel.setProductId(product.getId());
- return productModelMapper.insert(productModel);
- } else {
- if(product != null){
- product.setProductName(productModelDto.getProductName());
- productMapper.updateById(product);
+ productModelMapper.insert(productModel);
+ if(CollectionUtils.isNotEmpty(productModelDto.getTempFileIds())){
+ commonFileService.migrateTempFilesToFormal(productModel.getId(), productModelDto.getTempFileIds());
}
-
+ return 1;
+ } else {
+ Product product1 = productMapper.selectById(productModelDto.getProductId());
+ if(product1 != null){
+ product1.setProductName(productModelDto.getProductName());
+ productMapper.updateById(product1);
+ }
+ if(CollectionUtils.isNotEmpty(productModelDto.getTempFileIds())){
+ commonFileService.migrateTempFilesToFormal(productModelDto.getId(), productModelDto.getTempFileIds());
+ }
return productModelMapper.updateById(productModelDto);
}
+
}
@@ -105,59 +123,45 @@
return productModelMapper.selectPage(page, queryWrapper);
}
+
+
@Override
@Transactional(rollbackFor = Exception.class)
public Boolean importProduct(MultipartFile file) {
try {
ExcelUtil<ProductModelExcelCopyDto> productModelExcelUtil = new ExcelUtil<>(ProductModelExcelCopyDto.class);
List<ProductModelExcelCopyDto> productModelList = productModelExcelUtil.importExcel(file.getInputStream());
- List<Product> productList = productMapper.selectList(new LambdaQueryWrapper<Product>()
- .isNull(Product::getParentId));
- if(CollectionUtils.isEmpty(productList)) {
- throw new RuntimeException("璇峰厛娣诲姞鐖剁骇浜у搧");
- }
if(CollectionUtils.isNotEmpty(productModelList)){
- // 2. 鎸変骇鍝佸悕绉板垎缁�
- Map<String, List<ProductModelExcelCopyDto>> groupedByProductName = productModelList.stream()
- .collect(Collectors.groupingBy(ProductModelExcelCopyDto::getProductName));
- for (Map.Entry<String, List<ProductModelExcelCopyDto>> entry : groupedByProductName.entrySet()) {
- // 鏍规嵁鍚嶇О鏌ヨ鏄惁瀛樺湪浜у搧
- Product product = productMapper.selectOne(new LambdaQueryWrapper<Product>()
- .eq(Product::getProductName, entry.getKey())
- .last("limit 1"));
- if(product == null){
- product = new Product();
- product.setProductName(entry.getKey());
- product.setParentId(null); // 鐖惰妭鐐笽D
- // 2. 鎻掑叆褰撳墠鑺傜偣锛孧yBatis浼氳嚜鍔ㄥ洖濉玴roduct鐨刬d灞炴��
- productMapper.insert(product);
+ // 2. 鎸変骇鍝佸悕绉�,鍥剧焊缂栧彿鍒嗙粍
+ Map<Map.Entry<String, String>, List<ProductModelExcelCopyDto>> groupedByProductNameAndDrawingNumber =
+ productModelList.stream()
+ .collect(Collectors.groupingBy(
+ dto -> new AbstractMap.SimpleEntry<>(
+ dto.getProductName(),
+ dto.getModel()
+ )
+ ));
+ // 2. 閬嶅巻鍒嗙粍缁撴灉澶勭悊鏁版嵁
+ for (Map.Entry<Map.Entry<String, String>, List<ProductModelExcelCopyDto>> entry : groupedByProductNameAndDrawingNumber.entrySet()) {
+ Map.Entry<String, String> groupKey = entry.getKey();
+ String productName = groupKey.getKey(); // 浜у搧鍚嶇О
+ String drawingNumber = groupKey.getValue(); // 鍥剧焊缂栧彿
+ List<ProductModelExcelCopyDto> dtoList = entry.getValue();
+
+ // 绌哄垪琛ㄨ烦杩囷紝閬垮厤鍚庣画NPE
+ if (CollectionUtils.isEmpty(dtoList)) {
+ continue;
}
- Product finalProduct = product;
- entry.getValue().forEach(productModelExcelDto -> {
- // 鏍规嵁鍥剧焊缂栧彿鏌ヨ
- ProductModel productModel = productModelMapper.selectOne(new LambdaQueryWrapper<ProductModel>()
- .eq(ProductModel::getModel, productModelExcelDto.getModel())
- .last("limit 1"));
- if(productModel == null){
- productModel = new ProductModel();
- BeanUtils.copyProperties(productModelExcelDto,productModel);
- if(productModelExcelDto.getProductType() == null) {
- productModel.setProductType(1);
- }
- productModel.setProductId(finalProduct.getId());
- productModelMapper.insert(productModel);
- }else{
- BeanUtils.copyProperties(productModelExcelDto,productModel);
- productModel.setProductId(finalProduct.getId());
- productModelMapper.updateById(productModel);
- }
- });
+ ProductModelExcelCopyDto firstDto = dtoList.get(0);
+ String model = firstDto.getModel();
+
+ // 3. 鏌ヨ/鏂板浜у搧锛堟寜浜у搧鍚嶇О+鍥剧焊缂栧彿锛屾洿绮惧噯锛�
+ Product product = getOrCreateProduct(productName, drawingNumber);
+
+ // 4. 鎵归噺澶勭悊浜у搧鍨嬪彿锛堟寜鍥剧焊缂栧彿+鍨嬪彿锛�
+ processProductModel(dtoList, product.getId(), model, drawingNumber);
}
}
-// List<ProductModelExcelDto> productModelExcelDtos = OrderUtils.buildTree(productModelList);
-// if(CollectionUtils.isNotEmpty(productModelExcelDtos)){
-// recursiveSaveProduct(productModelExcelDtos.get(0),null);
-// }
return true;
}catch (Exception e) {
e.printStackTrace();
@@ -166,6 +170,67 @@
}
/**
+ * 鎶藉彇閫氱敤鏂规硶锛氭煡璇㈡垨鏂板浜у搧
+ */
+ private Product getOrCreateProduct(String productName, String model) {
+ // 绮惧噯鏌ヨ锛氫骇鍝佸悕绉�+鍨嬪彿锛堥伩鍏嶅悓鍚嶄笉鍚屽瀷鍙风殑闂锛�
+ Product product = productMapper.selectOne(new LambdaQueryWrapper<Product>()
+ .eq(Product::getProductName, productName)
+// .eq(Product::getModel, model)
+ .last("limit 1"));
+
+ if (product == null) {
+ product = new Product();
+ product.setProductName(productName);
+// product.setModel(model); // 琛ュ厖鍨嬪彿锛屽瓧娈垫洿瀹屾暣
+ product.setParentId(null);
+ productMapper.insert(product);
+ }
+ return product;
+ }
+
+ /**
+ * 鎶藉彇閫氱敤鏂规硶锛氬鐞嗕骇鍝佸瀷鍙凤紙鏂板/鏇存柊锛�
+ */
+ private void processProductModel(List<ProductModelExcelCopyDto> dtoList,
+ Long productId, String model, String drawingNumber) {
+ // 鏌ヨ鎵�鏈夊伐鑹鸿矾绾�
+ List<ProductProcess> productRoutes = productProcessMapper.selectList(new QueryWrapper<ProductProcess>());
+ if(CollectionUtils.isEmpty(productRoutes)){
+ throw new RuntimeException("璇峰厛鍒涘缓浜у搧宸ヨ壓璺嚎");
+ }
+ for (ProductModelExcelCopyDto dto : dtoList) {
+ // 鏌ヨ鏉′欢锛氬瀷鍙�+鍥剧焊缂栧彿锛堟洿绮惧噯锛岀鍚堝垎缁勯�昏緫锛�
+ ProductModel productModel = productModelMapper.selectOne(new LambdaQueryWrapper<ProductModel>()
+ .eq(ProductModel::getModel, model)
+ .last("limit 1"));
+ // 閫氳繃宸ヨ壓璺嚎鍚嶇О鍖归厤鏈�鏂颁竴鏉″伐鑹鸿矾绾�
+ ProductProcess productRoute = productRoutes.stream()
+ .filter(route -> route.getName().equals(dto.getProcessRoute()))
+ .max(Comparator.comparing(ProductProcess::getCreateTime))
+ .orElse(null);
+ if (productModel == null) {
+ productModel = new ProductModel();
+ BeanUtils.copyProperties(dto, productModel);
+ if (productRoute != null) {
+ productModel.setRouteId(productRoute.getId());
+ }
+ // 鍏滃簳榛樿鍊硷紝閬垮厤绌哄��
+ if (productModel.getProductType() == null) {
+ productModel.setProductType(1);
+ }
+ productModel.setProductId(productId);
+ productModelMapper.insert(productModel);
+ } else {
+ productModel.setRouteId(productRoute != null ? productRoute.getId() : null);
+ BeanUtils.copyProperties(dto, productModel);
+ productModel.setProductId(productId);
+ productModelMapper.updateById(productModel);
+ }
+ }
+ }
+
+ /**
* 閫掑綊瀵煎叆鏍戝舰浜у搧鏁版嵁
* @param excelDto Excel瑙f瀽鍚庣殑鏍戝舰鑺傜偣
* @param parentId 鐖惰妭鐐笽D锛堥《绾ц妭鐐逛紶null/0锛�
--
Gitblit v1.9.3