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 | 282 ++++++++++++++++++++++++++++++++++++++++++++++++++++---
1 files changed, 264 insertions(+), 18 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 4b436aa..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;
@@ -49,18 +54,21 @@
private StructureItemParameterService structureItemParameterService;
+ private WorkShopMapper workShopMapper;
+
+ private ModelMapper modelMapper;
+
@Override
public IPage<StructureItemParameter> selectItemParameterList(Page page, StructureItemParameter itemParameter) {
- return structureItemParameterMapper.selectItemParameterList(page, QueryWrappers.queryWrappers(itemParameter));
+ return structureItemParameterMapper.selectItemParameterList(page, QueryWrappers.queryWrappers(itemParameter));
}
@Override
public int addItemParameter(StructureItemParameter itemParameter) {
- if (itemParameter.getBsm().equals("")||itemParameter.getBsm()==null){
+ if (itemParameter.getBsm().equals("") || itemParameter.getBsm() == null) {
itemParameter.setBsm("0");
}
- int insert = structureItemParameterMapper.insert(itemParameter);
- return insert;
+ return structureItemParameterMapper.insert(itemParameter);
}
@Override
@@ -75,15 +83,15 @@
@Override
public IPage<PageTestObjectDto> selectTestObjectList(Page page, PageTestObjectDto pageTestObjectDto) {
- String partNo = pageTestObjectDto.getPartNo();
- pageTestObjectDto.setPartNo(null);
- return structureTestObjectMapper.selectTestObjectList(page, QueryWrappers.queryWrappers(pageTestObjectDto),partNo);
+ String specimenName = pageTestObjectDto.getSample();
+ pageTestObjectDto.setSample(null);
+ return structureTestObjectMapper.selectTestObjectList(page, QueryWrappers.queryWrappers(pageTestObjectDto), specimenName);
}
@Override
public int addTestObject(StructureTestObject testObject) {
Long count = structureTestObjectMapper.selectCount(Wrappers.<StructureTestObject>lambdaQuery().eq(StructureTestObject::getSpecimenName, testObject.getSpecimenName()));
- if(count.compareTo(0L) > 0){
+ if (count.compareTo(0L) > 0) {
throw new BaseException("妫�楠屽璞′笉鑳介噸澶�");
}
@@ -121,7 +129,7 @@
// 鏌ヨ鎵�鏈夊璞′竴鏍风殑妫�楠岄」鐩�
List<StandardProductList> standardProductLists = standardProductListService.list(Wrappers.<StandardProductList>lambdaUpdate()
.eq(StandardProductList::getSampleType, oldTestObject.getSpecimenName()));
- if (CollectionUtils.isNotEmpty(standardProductLists)){
+ if (CollectionUtils.isNotEmpty(standardProductLists)) {
for (StandardProductList standardProductList : standardProductLists) {
// 淇敼鎵�鏈夌殑瀵硅薄鍚嶇О鍜屾暟鍨嬬粨鏋�
standardProductList.setSampleType(testObject.getSpecimenName());
@@ -159,7 +167,7 @@
Long count = structureTestObjectMapper.selectCount(Wrappers.<StructureTestObject>lambdaQuery()
.eq(StructureTestObject::getSpecimenName, testObject.getSpecimenName())
.ne(StructureTestObject::getId, testObject.getId()));
- if(count.compareTo(0L) > 0){
+ if (count.compareTo(0L) > 0) {
throw new BaseException("妫�楠屽璞′笉鑳介噸澶�");
}
@@ -168,7 +176,7 @@
@Override
public List<StructureTestObject> selectTestObjectByName() {
- return structureTestObjectMapper.selectList(Wrappers.<StructureTestObject>lambdaQuery().select(StructureTestObject::getSpecimenName,StructureTestObject::getId));
+ return structureTestObjectMapper.selectList(Wrappers.<StructureTestObject>lambdaQuery().select(StructureTestObject::getSpecimenName, StructureTestObject::getId));
}
//璁惧閲岄潰閫夋嫨妫�楠岄」鐩�(鏍戝舰缁撴瀯)
@@ -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