From 32ddd9d13c53dd7fe5a09120ca59b29e61afc0cc Mon Sep 17 00:00:00 2001
From: chenrui <1187576398@qq.com>
Date: 星期四, 03 四月 2025 16:24:08 +0800
Subject: [PATCH] 标准库中新增区间后,保存提示报错修改
---
basic-server/src/main/java/com/ruoyi/basic/service/impl/CapacityScopeServiceImpl.java | 264 +++++++++++++++++++++++++++++++++++++++++++++++++++-
1 files changed, 255 insertions(+), 9 deletions(-)
diff --git a/basic-server/src/main/java/com/ruoyi/basic/service/impl/CapacityScopeServiceImpl.java b/basic-server/src/main/java/com/ruoyi/basic/service/impl/CapacityScopeServiceImpl.java
index 5fa1c5b..c8b730b 100644
--- a/basic-server/src/main/java/com/ruoyi/basic/service/impl/CapacityScopeServiceImpl.java
+++ b/basic-server/src/main/java/com/ruoyi/basic/service/impl/CapacityScopeServiceImpl.java
@@ -7,21 +7,22 @@
import com.baomidou.mybatisplus.core.toolkit.Wrappers;
import com.baomidou.mybatisplus.extension.plugins.pagination.Page;
import com.baomidou.mybatisplus.extension.service.impl.ServiceImpl;
+import com.ruoyi.basic.dto.*;
+import com.ruoyi.basic.excel.StructureTestObjectData;
+import com.ruoyi.basic.service.*;
import com.ruoyi.common.exception.base.BaseException;
import com.ruoyi.common.utils.QueryWrappers;
-import com.ruoyi.basic.dto.PageTestObjectDto;
-import com.ruoyi.basic.dto.TestItemDto;
import com.ruoyi.basic.mapper.*;
import com.ruoyi.basic.pojo.*;
-import com.ruoyi.basic.service.CapacityScopeService;
-import com.ruoyi.basic.service.StandardProductListService;
-import com.ruoyi.basic.service.StructureItemParameterService;
+import com.ruoyi.common.utils.StringUtils;
import lombok.AllArgsConstructor;
import org.springframework.stereotype.Service;
+import org.springframework.transaction.annotation.Transactional;
-import java.util.List;
-import java.util.Map;
+import java.util.*;
+import java.util.function.Function;
import java.util.stream.Collectors;
+import java.util.stream.Stream;
/**
* 妫�楠岄」鐩弬鏁�(StructureItemParameter)琛ㄦ湇鍔″疄鐜扮被
@@ -39,6 +40,10 @@
private ProductMapper productMapper;
+ private ProductService productService;
+
+ private StructureTestObjectService structureTestObjectService;
+
private StructureTestObjectPartMapper structureTestObjectPartMapper;
private ProductPartMapper productPartMapper;
@@ -48,6 +53,10 @@
private StandardTreeMapper standardTreeMapper;
private StructureItemParameterService structureItemParameterService;
+
+ private WorkShopMapper workShopMapper;
+
+ private ModelMapper modelMapper;
@Override
public IPage<StructureItemParameter> selectItemParameterList(Page page, StructureItemParameter itemParameter) {
@@ -59,8 +68,7 @@
if (itemParameter.getBsm().equals("") || itemParameter.getBsm() == null) {
itemParameter.setBsm("0");
}
- int insert = structureItemParameterMapper.insert(itemParameter);
- return insert;
+ return structureItemParameterMapper.insert(itemParameter);
}
@Override
@@ -181,5 +189,243 @@
public List<TestItemDto> getItemTree() {
return structureItemParameterMapper.getItemTree();
}
+
+ @Override
+ public List<TestItemDto> getItemTreeProduct(StructureTestObjectDto structureTestObjectDto) {
+ return structureItemParameterMapper.getItemTreeProduct(structureTestObjectDto.getObjectType());
+ }
+
+ @Override
+ public List<Model> getProductTypes(ModelDto modelDto) {
+ return modelMapper.selectList(Wrappers.<Model>lambdaQuery().eq(Model::getProductId,modelDto.getProductId()));
+ }
+
+ @Override
+ public List<ProductPart> getPartNoList(ProductPartDto productPartDto) {
+ return productPartMapper.selectList(Wrappers.<ProductPart>lambdaQuery().eq(ProductPart::getProductId,productPartDto.getProductId()));
+ }
+
+ @Transactional(rollbackFor = Exception.class)
+ @Override
+ public void importPartExcel(List<StructureTestObjectData> list) {
+ // 闃舵2: 鎵归噺鏌ヨ鐜版湁缁撴瀯娴嬭瘯瀵硅薄
+ Map<String, StructureTestObject> existStructureTestObjects = structureTestObjectMapper.selectList(
+ Wrappers.<StructureTestObject>lambdaQuery()
+ .in(StructureTestObject::getSpecimenName, list.stream().map(StructureTestObjectData::getSpecimenName).collect(Collectors.toSet()))
+ .in(StructureTestObject::getSpecimenNameEn, list.stream().map(StructureTestObjectData::getSpecimenNameEn).collect(Collectors.toSet()))
+ .in(StructureTestObject::getObjectType, list.stream().map(StructureTestObjectData::getObjectType).collect(Collectors.toSet()))
+ ).stream().collect(Collectors.toMap(
+ obj -> generateStructureKey(obj.getSpecimenName(), obj.getSpecimenNameEn(), obj.getObjectType()), // 缁熶竴閿敓鎴�
+ Function.identity(),
+ (existing, replacement) -> existing
+ ));
+
+ // 闃舵3: 棰勫鐞嗚溅闂翠俊鎭�
+ Set<String> workShopNames = list.stream()
+ .map(StructureTestObjectData::getWorkShopName)
+ .filter(StringUtils::isNotEmpty)
+ .collect(Collectors.toSet());
+
+ Map<String, WorkShop> workShopCache = workShopNames.isEmpty() ?
+ Collections.emptyMap() :
+ workShopMapper.selectList(Wrappers.<WorkShop>lambdaQuery()
+ .in(WorkShop::getName, workShopNames))
+ .stream()
+ .collect(Collectors.toMap(WorkShop::getName, Function.identity()));
+
+ // 闃舵4: 鍑嗗鎵归噺鎿嶄綔鏁版嵁
+ List<StructureTestObject> structureTestObjectsToInsert = new ArrayList<>();
+ List<StructureTestObject> structureTestObjectsToUpdate = new ArrayList<>();
+ List<Product> productsToInsert = new ArrayList<>();
+ List<Product> productsToUpdate = new ArrayList<>();
+
+ // 闃舵5: 涓诲鐞嗛�昏緫锛堜粎澶勭悊缁撴瀯娴嬭瘯瀵硅薄锛�
+ List<StructureTestObjectData> pendingProducts = new ArrayList<>(); // 鏂板锛氭殏瀛樺緟澶勭悊鐨勪骇鍝佹暟鎹�
+
+ for (StructureTestObjectData i : list) {
+ // 澶勭悊缁撴瀯娴嬭瘯瀵硅薄锛堥�昏緫涓嶅彉锛�
+ String specimenKey = i.getSpecimenName() + "|" + i.getSpecimenNameEn() + "|" + i.getObjectType();
+ StructureTestObject structureTestObject = existStructureTestObjects.get(specimenKey);
+
+ if (structureTestObject == null) {
+ StructureTestObject newObj = createNewStructureTestObject(i, workShopCache); // 淇敼锛氫紶鍏ヨ溅闂寸紦瀛�
+ structureTestObjectsToInsert.add(newObj);
+ existStructureTestObjects.put(specimenKey, newObj);
+ } else {
+ updateExistingStructureTestObject(structureTestObject, i);
+ structureTestObjectsToUpdate.add(structureTestObject);
+ }
+
+ // 鏆傚瓨浜у搧澶勭悊鏁版嵁锛堟柊澧烇級
+ pendingProducts.add(i);
+ }
+
+ // 闃舵6: 鍏堝鐞嗙粨鏋勬祴璇曞璞℃壒閲忔搷浣�
+ executeStructureTestObjectBatch(structureTestObjectsToInsert, structureTestObjectsToUpdate);
+
+ // 闃舵7: 鏇存柊缂撳瓨涓殑ID锛堝叧閿柊澧炴楠わ級
+ refreshStructureTestObjectIds(existStructureTestObjects, structureTestObjectsToInsert);
+
+ // 闃舵8: 澶勭悊浜у搧鏁版嵁
+ processProducts(pendingProducts, existStructureTestObjects, workShopCache,
+ productsToInsert, productsToUpdate);
+
+ // 闃舵9: 鎵ц浜у搧鎵归噺鎿嶄綔
+ executeProductBatch(productsToInsert, productsToUpdate);
+ }
+
+ // 鏇存柊鐜版湁缁撴瀯娴嬭瘯瀵硅薄
+ private void updateExistingStructureTestObject(StructureTestObject obj, StructureTestObjectData data) {
+ obj.setCode(data.getCode());
+ obj.setLaboratoryId(9);
+ }
+
+ // 缁熶竴閿敓鎴愭柟娉�
+ private String generateStructureKey(String name, String nameEn, String objectType) {
+ return name + "|" + nameEn + "|" + objectType;
+ }
+
+ // 澶勭悊浜у搧鏁版嵁
+ private void processProductData(StructureTestObjectData data,
+ Integer objectId,
+ Map<String, WorkShop> workShopCache,
+ List<Product> insertList,
+ List<Product> updateList) {
+ // 鏋勫缓浜у搧鍞竴鏍囪瘑
+ String productKey = data.getName() + "|" + data.getNameEn() + "|" + data.getObjectType();
+
+ // 妫�鏌ュ唴瀛樹腑鏄惁宸插鐞嗚繃璇ヤ骇鍝�
+ Optional<Product> existingProduct = findProductInBatchLists(productKey, insertList, updateList);
+
+ // 濡傛灉鍐呭瓨涓笉瀛樺湪锛屾煡璇㈡暟鎹簱
+ if (!existingProduct.isPresent()) {
+ Product dbProduct = productMapper.selectOne(Wrappers.<Product>lambdaQuery()
+ .eq(Product::getName, data.getName())
+ .eq(Product::getNameEn, data.getNameEn())
+ .last("limit 1"));
+ existingProduct = Optional.ofNullable(dbProduct);
+ }
+
+ // 鍒涘缓鎴栨洿鏂颁骇鍝�
+ Product product = existingProduct.orElseGet(Product::new);
+ boolean isNew = product.getId() == null;
+
+ // 璁剧疆浜у搧灞炴��
+ setupProduct(product, data, objectId, workShopCache);
+
+ // 鍔犲叆瀵瑰簲鍒楄〃
+ if (isNew) {
+ insertList.add(product);
+ } else {
+ updateList.add(product);
+ }
+ }
+
+ // 鍦ㄤ骇鍝佹壒閲忓垪琛ㄤ腑鏌ユ壘
+ private Optional<Product> findProductInBatchLists(String productKey,
+ List<Product> insertList,
+ List<Product> updateList) {
+ return Stream.concat(insertList.stream(), updateList.stream())
+ .filter(p -> (p.getName() + "|" + p.getNameEn()).equals(productKey))
+ .findFirst();
+ }
+
+ // 璁剧疆浜у搧淇℃伅
+ private void setupProduct(Product product,
+ StructureTestObjectData data,
+ Integer objectId,
+ Map<String, WorkShop> workShopCache) {
+ product.setName(data.getName());
+ product.setNameEn(data.getNameEn());
+ product.setObjectId(objectId);
+ // 澶勭悊杞﹂棿淇℃伅
+ if (StringUtils.isNotEmpty(data.getWorkShopName())) {
+ WorkShop workShop = workShopCache.get(data.getWorkShopName());
+ if (workShop == null) {
+ throw new BaseException("杞﹂棿淇℃伅鏈淮鎶�: " + data.getWorkShopName());
+ }
+ product.setWorkShopId(workShop.getId());
+ product.setWorkShopName(data.getWorkShopName());
+ }
+ }
+
+ // 鍒涘缓缁撴瀯娴嬭瘯瀵硅薄锛堜娇鐢ㄧ紦瀛樿溅闂翠俊鎭級
+ private StructureTestObject createNewStructureTestObject(StructureTestObjectData data,
+ Map<String, WorkShop> workShopCache) {
+ StructureTestObject obj = new StructureTestObject();
+ obj.setLaboratoryId(9);
+ obj.setSpecimenName(data.getSpecimenName());
+ obj.setSpecimenNameEn(data.getSpecimenNameEn());
+ obj.setCode(data.getCode());
+ obj.setObjectType(data.getObjectType());
+
+ // 浣跨敤缂撳瓨鑾峰彇杞﹂棿淇℃伅
+ if (StringUtils.isNotEmpty(data.getWorkShopName())) {
+ WorkShop workShop = workShopCache.get(data.getWorkShopName());
+ if (workShop == null) {
+ throw new BaseException("杞﹂棿淇℃伅鏈淮鎶�: " + data.getWorkShopName());
+ }
+ obj.setWorkShopId(workShop.getId());
+ obj.setWorkShopName(data.getWorkShopName());
+ } else {
+ obj.setWorkShopName("");
+ }
+ return obj;
+ }
+
+ // 鍒锋柊缁撴瀯娴嬭瘯瀵硅薄ID锛堝叧閿柟娉曪級
+ private void refreshStructureTestObjectIds(
+ Map<String, StructureTestObject> existStructureTestObjects,
+ List<StructureTestObject> insertedObjects) {
+
+ insertedObjects.forEach(obj -> {
+ String key = obj.getSpecimenName() + "|" + obj.getSpecimenNameEn()+ "|" + obj.getObjectType();
+ existStructureTestObjects.get(key).setId(obj.getId()); // 鏇存柊缂撳瓨涓殑ID
+ });
+ }
+
+ // 澶勭悊浜у搧鏁版嵁锛堢嫭绔嬫柟娉曪級
+ private void processProducts(List<StructureTestObjectData> pendingProducts,
+ Map<String, StructureTestObject> structureTestObjectCache,
+ Map<String, WorkShop> workShopCache,
+ List<Product> insertList,
+ List<Product> updateList) {
+
+ // 闃舵5鍘熸湁浜у搧澶勭悊閫昏緫杩佺Щ鑷虫
+ pendingProducts.forEach(i -> {
+ String specimenKey = i.getSpecimenName() + "|" + i.getSpecimenNameEn()+ "|" + i.getObjectType();
+ StructureTestObject sto = structureTestObjectCache.get(specimenKey);
+
+ processProductData(
+ i,
+ sto.getId(), // 姝ゆ椂ID宸叉纭缃�
+ workShopCache,
+ insertList,
+ updateList
+ );
+ });
+ }
+
+ // 鍒嗘媶鎵归噺鎿嶄綔鏂规硶
+ private void executeStructureTestObjectBatch(List<StructureTestObject> toInsert,
+ List<StructureTestObject> toUpdate) {
+ if (!toInsert.isEmpty()) {
+ structureTestObjectMapper.insertBatchSomeColumn(toInsert);
+ }
+ if (!toUpdate.isEmpty()) {
+ structureTestObjectService.updateBatchById(toUpdate);
+ }
+ }
+
+ private void executeProductBatch(List<Product> toInsert,
+ List<Product> toUpdate) {
+ if (!toInsert.isEmpty()) {
+ productMapper.insertBatchSomeColumn(toInsert);
+ }
+ if (!toUpdate.isEmpty()) {
+ productService.updateBatchById(toUpdate);
+ }
+ }
+
}
--
Gitblit v1.9.3