zss
2025-03-11 eeb8d7faa8d25b3ca9fe75ef28f035c49af5b06d
basic-server/src/main/java/com/ruoyi/basic/service/impl/ProductServiceImpl.java
¶Ô±ÈÐÂÎļþ
@@ -0,0 +1,186 @@
package com.ruoyi.basic.service.impl;
import cn.hutool.core.collection.CollUtil;
import cn.hutool.core.util.StrUtil;
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.dto.ProductDTO1;
import com.ruoyi.basic.excel.StructureTestObjectData;
import com.ruoyi.basic.mapper.ProductMapper;
import com.ruoyi.basic.mapper.StandardTreeMapper;
import com.ruoyi.basic.mapper.StructureTestObjectMapper;
import com.ruoyi.basic.pojo.*;
import com.ruoyi.basic.service.LaboratoryService;
import com.ruoyi.basic.service.ProductService;
import com.ruoyi.common.exception.base.BaseException;
import com.ruoyi.common.utils.QueryWrappers;
import com.ruoyi.basic.service.StandardProductListService;
import com.ruoyi.basic.service.StructureItemParameterService;
import lombok.AllArgsConstructor;
import org.springframework.stereotype.Service;
import org.springframework.transaction.annotation.Transactional;
import java.util.List;
/**
* @author z1292
* @description é’ˆå¯¹è¡¨ã€product(产品表)】的数据库操作Service实现
* @createDate 2024-04-26 01:11:02
*/
@Service
@AllArgsConstructor
public class ProductServiceImpl extends ServiceImpl<ProductMapper, Product>
    implements ProductService {
    private ProductMapper productMapper;
    private LaboratoryService laboratoryService;
    private StructureTestObjectMapper structureTestObjectMapper;
    private StandardProductListService standardProductListService;
    private StandardTreeMapper standardTreeMapper;
    private StructureItemParameterService structureItemParameterService;
    @Override
    public IPage<Product> selectProductListByObjectId(Page page, ProductDTO1 product) {
        String partNo = product.getPartNo();
        product.setPartNo(null);
        return productMapper.selectProductListByObjectId(page, QueryWrappers.queryWrappers(product), partNo);
    }
    @Override
    public int addProduct(Product product) {
        return productMapper.insert(product);
    }
    @Override
    @Transactional(rollbackFor = Exception.class)
    public int upProduct(Product product) {
        // æŸ¥è¯¢åŽŸæœ¬çš„åç§°
        Product oldProduct = productMapper.selectById(product.getId());
        if (!oldProduct.getName().equals(product.getName())) {
            // ä¿®æ”¹åç§°åŒ¹é…çš„æ ‡å‡†æ ‘下的检验项目
            // æŸ¥è¯¢æ‰€æœ‰å¯¹è±¡+名称的树
            StructureTestObject testObject = structureTestObjectMapper.selectById(oldProduct.getObjectId());
            List<StandardProductList> standardProductLists = standardProductListService.list(Wrappers.<StandardProductList>lambdaUpdate()
                    .eq(StandardProductList::getSample, oldProduct.getName())
                    .eq(StandardProductList::getSampleType, testObject.getSpecimenName()));
            if (CollectionUtils.isNotEmpty(standardProductLists)) {
                for (StandardProductList standardProductList : standardProductLists) {
                    // ä¿®æ”¹æ ·å“åç§°
                    standardProductList.setSample(product.getName());
                    // ä¿®æ”¹æ ‘名称
                    // éœ€è¦æˆªå–第四级, é¿å…ä¸‰å››çº§åç§°ä¸€æ ·ä¿®æ”¹é”™è¯¯
                    String[] trees = standardProductList.getTree().split(" - ");
                    trees[3] = product.getName();
                    List<String> list = CollUtil.newArrayList(trees);
                    String newName = CollUtil.join(list, " - ");
                    standardProductList.setTree(newName);
                }
                standardProductListService.updateBatchById(standardProductLists);
            }
            // ä¿®æ”¹æ£€éªŒé¡¹ç›®å‚数的检验对象
            // æ‹¼æŽ¥["object","product"]查询检验项目参数修改绑定的检验对象
            String format = "[\"{}\",\"{}\"]";
            String sampleOld = StrUtil.format(format, testObject.getSpecimenName(), oldProduct.getName());
            List<StructureItemParameter> itemParameterList = structureItemParameterService.list(Wrappers.<StructureItemParameter>lambdaQuery()
                    .like(StructureItemParameter::getSample, sampleOld));
            if (CollectionUtils.isNotEmpty(itemParameterList)) {
                for (StructureItemParameter structureItemParameter : itemParameterList) {
                    // ä¿®æ”¹ç»‘定的样品名称
                    String sampleNew = StrUtil.format(format, testObject.getSpecimenName(), product.getName());
                    String sampleUp = structureItemParameter.getSample().replace(sampleOld, sampleNew);
                    structureItemParameter.setSample(sampleUp);
                }
                structureItemParameterService.updateBatchById(itemParameterList);
            }
            // ä¿®æ”¹æ ‘的型号
            standardTreeMapper.update(null, Wrappers.<StandardTree>lambdaUpdate()
                    .eq(StandardTree::getSampleType, testObject.getSpecimenName())
                    .eq(StandardTree::getSample, oldProduct.getName())
                    .set(StandardTree::getSample, product.getName()));
        }
        return productMapper.updateById(product);
    }
    @Override
    @Transactional(rollbackFor = Exception.class)
    public int delProduct(Integer id) {
        return productMapper.deleteById(id);
    }
    @Transactional(rollbackFor = Exception.class)
    @Override
    public void importPartExcel(List<StructureTestObjectData> list) {
        list.forEach(i -> {
            // æ£€éªŒå¯¹è±¡
            StructureTestObject structureTestObject1 = structureTestObjectMapper.selectOne(Wrappers.<StructureTestObject>lambdaQuery()
                    .eq(StructureTestObject::getSpecimenName, i.getSpecimenName())
                    .eq(StructureTestObject::getSpecimenNameEn, i.getSpecimenNameEn()));
            Laboratory laboratory = laboratoryService.getOne(Wrappers.<Laboratory>lambdaQuery()
                    .eq(Laboratory::getLaboratoryName, i.getLaboratory()));
            if (ObjectUtils.isEmpty(laboratory)) {
                throw new BaseException("未找到该场所:" + i.getLaboratory() + ",请检查是否存在该场所!");
            }
            // å¦‚果为空进行新增
            if(ObjectUtils.isEmpty(structureTestObject1)) {
                StructureTestObject structureTestObject = new StructureTestObject();
                structureTestObject.setLaboratoryId(laboratory.getId());
                structureTestObject.setSpecimenName(i.getSpecimenName());
                structureTestObject.setSpecimenNameEn(i.getSpecimenNameEn());
                structureTestObject.setCode(i.getCode());
                structureTestObjectMapper.insert(structureTestObject);
                // äº§å“
                Product product = productMapper.selectOne(Wrappers.<Product>lambdaQuery()
                        .eq(Product::getName, i.getName())
                        .eq(Product::getNameEn, i.getNameEn()));
                if (ObjectUtils.isEmpty(product)){
                    Product product1 = new Product();
                    product1.setName(i.getName());
                    product1.setNameEn(i.getNameEn());
                    product1.setObjectId(structureTestObject.getId());
                    baseMapper.insert(product1);
                }
            } else {
                structureTestObject1.setCode(i.getCode());
                structureTestObject1.setLaboratoryId(laboratory.getId());
                structureTestObjectMapper.updateById(structureTestObject1);
                // äº§å“
                Product product = productMapper.selectOne(Wrappers.<Product>lambdaQuery()
                        .eq(Product::getName, i.getName())
                        .eq(Product::getNameEn, i.getNameEn()));
                if (ObjectUtils.isEmpty(product)){
                    Product product1 = new Product();
                    product1.setName(i.getName());
                    product1.setNameEn(i.getNameEn());
                    product1.setObjectId(structureTestObject1.getId());
                    baseMapper.insert(product1);
                } else {
                    product.setName(i.getName());
                    product.setNameEn(i.getNameEn());
                    product.setObjectId(structureTestObject1.getId());
                    baseMapper.updateById(product);
                }
            }
        });
    }
    @Override
    public String getWordQrModel(Integer orderId) {
        return baseMapper.getWordQrModel(orderId);
    }
}