package com.ruoyi.basic.service.impl; import cn.hutool.core.collection.CollUtil; import cn.hutool.core.util.StrUtil; import com.baomidou.mybatisplus.core.conditions.query.LambdaQueryWrapper; import com.baomidou.mybatisplus.core.metadata.IPage; import com.baomidou.mybatisplus.core.toolkit.CollectionUtils; import com.baomidou.mybatisplus.core.toolkit.ObjectUtils; 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.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.common.utils.StringUtils; import lombok.AllArgsConstructor; import org.springframework.stereotype.Service; import org.springframework.transaction.annotation.Transactional; import java.util.ArrayList; import java.util.HashMap; import java.util.List; import java.util.Map; import java.util.stream.Collectors; /** * 检验项目参数(StructureItemParameter)表服务实现类 * * @author makejava * @since 2024-02-26 16:21:17 */ @Service @AllArgsConstructor public class CapacityScopeServiceImpl extends ServiceImpl implements CapacityScopeService { private StructureItemParameterMapper structureItemParameterMapper; private StructureTestObjectMapper structureTestObjectMapper; private ProductMapper productMapper; private ProductService productService; private StructureTestObjectService structureTestObjectService; private StructureTestObjectPartMapper structureTestObjectPartMapper; private ProductPartMapper productPartMapper; private StandardProductListService standardProductListService; private StandardTreeMapper standardTreeMapper; private StructureItemParameterService structureItemParameterService; private WorkShopMapper workShopMapper; @Override public IPage selectItemParameterList(Page page, StructureItemParameter itemParameter) { return structureItemParameterMapper.selectItemParameterList(page, QueryWrappers.queryWrappers(itemParameter)); } @Override public int addItemParameter(StructureItemParameter itemParameter) { if (itemParameter.getBsm().equals("") || itemParameter.getBsm() == null) { itemParameter.setBsm("0"); } int insert = structureItemParameterMapper.insert(itemParameter); return insert; } @Override public int delItemParameter(Integer id) { return structureItemParameterMapper.deleteById(id); } @Override public int upItemParameter(StructureItemParameter itemParameter) { return structureItemParameterMapper.updateById(itemParameter); } @Override public IPage selectTestObjectList(Page page, PageTestObjectDto pageTestObjectDto) { 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.lambdaQuery().eq(StructureTestObject::getSpecimenName, testObject.getSpecimenName())); if (count.compareTo(0L) > 0) { throw new BaseException("检验对象不能重复"); } return structureTestObjectMapper.insert(testObject); } @Override public int delTestObject(Integer id) { // 产出检验对象产品维护 structureTestObjectPartMapper.delete(Wrappers.lambdaQuery() .eq(StructureTestObjectPart::getTestObjectId, id)); // 删除产品维护的零件绑定 List products = productMapper.selectList(Wrappers.lambdaQuery() .eq(Product::getObjectId, id)); List productIds = products.stream().map(Product::getId).collect(Collectors.toList()); if (CollectionUtils.isNotEmpty(productIds)) { productPartMapper.delete(Wrappers.lambdaQuery() .in(ProductPart::getProductId, productIds)); // 删除产品维护 productMapper.delete(Wrappers.lambdaQuery() .in(Product::getId, productIds)); } return structureTestObjectMapper.deleteById(id); } @Override public int upTestObject(StructureTestObject testObject) { // 查询旧的检验对象 StructureTestObject oldTestObject = structureTestObjectMapper.selectById(testObject.getId()); if (!oldTestObject.getSpecimenName().equals(testObject.getSpecimenName())) { // 查询所有对象一样的检验项目 List standardProductLists = standardProductListService.list(Wrappers.lambdaUpdate() .eq(StandardProductList::getSampleType, oldTestObject.getSpecimenName())); if (CollectionUtils.isNotEmpty(standardProductLists)) { for (StandardProductList standardProductList : standardProductLists) { // 修改所有的对象名称和数型结构 standardProductList.setSampleType(testObject.getSpecimenName()); // 需要截取第三级, 避免三四级名称一样修改错误 String[] trees = standardProductList.getTree().split(" - "); trees[2] = testObject.getSpecimenName(); List list = CollUtil.newArrayList(trees); String newName = CollUtil.join(list, " - "); standardProductList.setTree(newName); } standardProductListService.updateBatchById(standardProductLists); } // 修改检验项目参数的检验对象 // 拼接 ["object", 查询检验项目参数修改绑定的检验对象 String format = "[\"{}\","; String sampleOld = StrUtil.format(format, oldTestObject.getSpecimenName()); List itemParameterList = structureItemParameterService.list(Wrappers.lambdaQuery() .like(StructureItemParameter::getSample, sampleOld)); if (CollectionUtils.isNotEmpty(itemParameterList)) { for (StructureItemParameter structureItemParameter : itemParameterList) { // 修改绑定的样品名称 String sampleNew = StrUtil.format(format, testObject.getSpecimenName()); String sampleUp = structureItemParameter.getSample().replace(sampleOld, sampleNew); structureItemParameter.setSample(sampleUp); } structureItemParameterService.updateBatchById(itemParameterList); } // 修改树的型号 standardTreeMapper.update(null, Wrappers.lambdaUpdate() .eq(StandardTree::getSampleType, oldTestObject.getSpecimenName()) .set(StandardTree::getSampleType, testObject.getSpecimenName())); } Long count = structureTestObjectMapper.selectCount(Wrappers.lambdaQuery() .eq(StructureTestObject::getSpecimenName, testObject.getSpecimenName()) .ne(StructureTestObject::getId, testObject.getId())); if (count.compareTo(0L) > 0) { throw new BaseException("检验对象不能重复"); } return structureTestObjectMapper.updateById(testObject); } @Override public List selectTestObjectByName() { return structureTestObjectMapper.selectList(Wrappers.lambdaQuery().select(StructureTestObject::getSpecimenName, StructureTestObject::getId)); } //设备里面选择检验项目(树形结构) @Override public List> getInsProduction() { return structureItemParameterMapper.getInsProduction(); } @Override public List getItemTree() { return structureItemParameterMapper.getItemTree(); } @Transactional(rollbackFor = Exception.class) @Override public void importPartExcel(List list) { // 批量查询 StructureTestObject Map structureTestObjectMap = getStructureTestObjectMap(list); // 批量查询 WorkShop Map workShopMap = getWorkShopMap(list); List insertStructureTestObjects = new ArrayList<>(); List updateStructureTestObjects = new ArrayList<>(); List insertProducts = new ArrayList<>(); List updateProducts = new ArrayList<>(); for (StructureTestObjectData data : list) { String key = data.getSpecimenName() + "_" + data.getSpecimenNameEn(); StructureTestObject structureTestObject = structureTestObjectMap.get(key); if (ObjectUtils.isEmpty(structureTestObject)) { structureTestObject = createStructureTestObject(data); insertStructureTestObjects.add(structureTestObject); } else { updateStructureTestObject(structureTestObject, data); updateStructureTestObjects.add(structureTestObject); } String productKey = data.getName() + "_" + data.getNameEn(); Product product = productMapper.selectOne(new LambdaQueryWrapper() .eq(Product::getName, data.getName()) .eq(Product::getNameEn, data.getNameEn())); if (ObjectUtils.isEmpty(product)) { product = createProduct(data, structureTestObject.getId(), workShopMap); insertProducts.add(product); } else { updateProduct(product, data, structureTestObject.getId(), workShopMap); updateProducts.add(product); } } // 批量插入和更新 if (!insertStructureTestObjects.isEmpty()) { structureTestObjectService.saveOrUpdateBatch(insertStructureTestObjects); } if (!updateStructureTestObjects.isEmpty()) { structureTestObjectService.updateBatchById(updateStructureTestObjects); } if (!insertProducts.isEmpty()) { productService.saveOrUpdateBatch(insertProducts); } if (!updateProducts.isEmpty()) { productService.updateBatchById(updateProducts); } } private Map getStructureTestObjectMap(List list) { List specimenNames = list.stream().map(StructureTestObjectData::getSpecimenName).collect(Collectors.toList()); List specimenNamesEn = list.stream().map(StructureTestObjectData::getSpecimenNameEn).collect(Collectors.toList()); List structureTestObjects = structureTestObjectMapper.selectList(new LambdaQueryWrapper() .in(StructureTestObject::getSpecimenName, specimenNames) .in(StructureTestObject::getSpecimenNameEn, specimenNamesEn)); Map map = new HashMap<>(); for (StructureTestObject obj : structureTestObjects) { map.put(obj.getSpecimenName() + "_" + obj.getSpecimenNameEn(), obj); } return map; } private Map getWorkShopMap(List list) { List workShopNames = list.stream() .map(StructureTestObjectData::getWorkShopName) .filter(StringUtils::isNotEmpty) .distinct() .collect(Collectors.toList()); List workShops = workShopMapper.selectList(new LambdaQueryWrapper() .in(WorkShop::getName, workShopNames)); Map map = new HashMap<>(); for (WorkShop workShop : workShops) { map.put(workShop.getName(), workShop); } return map; } private StructureTestObject createStructureTestObject(StructureTestObjectData data) { StructureTestObject structureTestObject = new StructureTestObject(); structureTestObject.setLaboratoryId(9); structureTestObject.setSpecimenName(data.getSpecimenName()); structureTestObject.setSpecimenNameEn(data.getSpecimenNameEn()); structureTestObject.setCode(data.getCode()); structureTestObject.setWorkShopName(""); return structureTestObject; } private void updateStructureTestObject(StructureTestObject structureTestObject, StructureTestObjectData data) { structureTestObject.setCode(data.getCode()); structureTestObject.setLaboratoryId(9); } private Product createProduct(StructureTestObjectData data, Integer objectId, Map workShopMap) { Product product = new Product(); product.setName(data.getName()); product.setNameEn(data.getNameEn()); if (StringUtils.isNotEmpty(data.getWorkShopName())) { WorkShop workShop = workShopMap.get(data.getWorkShopName()); if (workShop == null) { throw new BaseException("请先维护车间信息"); } product.setWorkShopId(workShop.getId()); } product.setWorkShopName(data.getWorkShopName()); product.setObjectId(objectId); return product; } private void updateProduct(Product product, StructureTestObjectData data, Integer objectId, Map workShopMap) { if (StringUtils.isNotEmpty(data.getWorkShopName())) { WorkShop workShop = workShopMap.get(data.getWorkShopName()); if (workShop == null) { throw new BaseException("请先维护车间信息"); } product.setWorkShopId(workShop.getId()); } product.setWorkShopName(data.getWorkShopName()); product.setName(data.getName()); product.setNameEn(data.getNameEn()); product.setObjectId(objectId); } }