zss
2025-03-11 eeb8d7faa8d25b3ca9fe75ef28f035c49af5b06d
basic-server/src/main/java/com/ruoyi/basic/service/impl/CapacityScopeServiceImpl.java
¶Ô±ÈÐÂÎļþ
@@ -0,0 +1,228 @@
package com.ruoyi.basic.service.impl;
import cn.hutool.core.collection.CollUtil;
import cn.hutool.core.util.StrUtil;
import com.baomidou.mybatisplus.core.conditions.update.LambdaUpdateWrapper;
import com.baomidou.mybatisplus.core.metadata.IPage;
import com.baomidou.mybatisplus.core.toolkit.CollectionUtils;
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.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.common.core.domain.entity.SysDictData;
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 com.ruoyi.system.mapper.SysDictTypeMapper;
import com.ruoyi.system.service.ISysDictTypeService;
import lombok.AllArgsConstructor;
import org.apache.commons.lang3.StringUtils;
import org.springframework.scheduling.concurrent.ThreadPoolTaskExecutor;
import org.springframework.stereotype.Service;
import org.springframework.transaction.annotation.Transactional;
import java.util.Arrays;
import java.util.List;
import java.util.Map;
import java.util.Objects;
import java.util.concurrent.CompletableFuture;
import java.util.stream.Collectors;
/**
 * æ£€éªŒé¡¹ç›®å‚æ•°(StructureItemParameter)表服务实现类
 *
 * @author makejava
 * @since 2024-02-26 16:21:17
 */
@Service
@AllArgsConstructor
public class CapacityScopeServiceImpl extends ServiceImpl<StructureItemParameterMapper, StructureItemParameter> implements CapacityScopeService {
    private StandardProductListMapper standardProductListMapper;
    private ThreadPoolTaskExecutor threadPoolTaskExecutor;
    private StructureItemParameterMapper structureItemParameterMapper;
    private StructureTestObjectMapper structureTestObjectMapper;
    private ProductMapper productMapper;
    private StandardProductListService standardProductListService;
    private StandardTreeMapper standardTreeMapper;
    private StructureItemParameterService structureItemParameterService;
    private ISysDictTypeService sysDictTypeService;
    @Override
    public IPage<StructureItemParameter> selectItemParameterList(Page page, StructureItemParameter itemParameter) {
        IPage<StructureItemParameter> parameterIPage = structureItemParameterMapper.selectItemParameterList(page, QueryWrappers.queryWrappers(itemParameter));
        //查询字典
        Map<String, List<SysDictData>> dictMaps = sysDictTypeService.selectEnumListByCategory(Arrays.asList("检验项类型", "是否", "检验值类型", "单位"));
        parameterIPage.getRecords().forEach(ele->{
            ele.setInspectionItemTypeTwo(getLabelByValue(dictMaps.get("检验项类型"),ele.getInspectionItemType()));
            ele.setUpdateBsm(getLabelByValue(dictMaps.get("是否"),ele.getBsm()));
            ele.setInspectionValueTypeTwo(getLabelByValue(dictMaps.get("检验值类型"),ele.getInspectionValueType()));
        });
        return parameterIPage;
    }
    /**
     * æ ¹æ®value获取字典
     * @param dictList
     * @param value
     * @return
     */
    private String getLabelByValue(List<SysDictData> dictList, String value){
        if(dictList.isEmpty()){
            return "";
        }
        return dictList.stream().filter(ele-> Objects.equals(ele.getDictValue(),value)).map(SysDictData::getDictLabel).findFirst().orElse("");
    }
    @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
    @Transactional(rollbackFor = Exception.class)
    public int upItemParameter(StructureItemParameter itemParameter) {
        //能力范围更新,同时更新对应的标准库
        StructureItemParameter oldParameter = structureItemParameterMapper.selectById(itemParameter.getId());
        //判断检验项、检验子项、单位是否有修改,有就同时修改标准库对应的数据
        if(
                !StringUtils.equals(itemParameter.getInspectionItem(),oldParameter.getInspectionItem()) ||
                        !StringUtils.equals(itemParameter.getInspectionItemSubclass(),oldParameter.getInspectionItemSubclass()) ||
                        !StringUtils.equals(itemParameter.getInspectionItemEn(),oldParameter.getInspectionItemEn()) ||
                        !StringUtils.equals(itemParameter.getInspectionItemSubclassEn(),oldParameter.getInspectionItemSubclassEn()) ||
                        !StringUtils.equals(itemParameter.getUnit(),oldParameter.getUnit())
        ){
            CompletableFuture.runAsync(() -> {
                LambdaUpdateWrapper<StandardProductList> updateWrapper = Wrappers.<StandardProductList>lambdaUpdate()
                        .set(StandardProductList::getInspectionItem, itemParameter.getInspectionItem())
                        .set(StandardProductList::getInspectionItemEn, itemParameter.getInspectionItemEn())
                        .set(StandardProductList::getInspectionItemSubclass, itemParameter.getInspectionItemSubclass())
                        .set(StandardProductList::getInspectionItemSubclassEn, itemParameter.getInspectionItemSubclassEn())
                        .set(StandardProductList::getUnit, itemParameter.getUnit())
                        .eq(StandardProductList::getStructureItemParameterId,itemParameter.getId());
                standardProductListMapper.update(null,updateWrapper);
            },threadPoolTaskExecutor);
        }
        return structureItemParameterMapper.updateById(itemParameter);
    }
    @Override
    public IPage<PageTestObjectDto> selectTestObjectList(Page page, PageTestObjectDto pageTestObjectDto) {
        return structureTestObjectMapper.selectTestObjectList(page, QueryWrappers.queryWrappers(pageTestObjectDto));
    }
    @Override
    public int addTestObject(StructureTestObject testObject) {
        Long count = structureTestObjectMapper.selectCount(Wrappers.<StructureTestObject>lambdaQuery().eq(StructureTestObject::getSpecimenName, testObject.getSpecimenName()));
        if(count.compareTo(0L) > 0){
            throw new BaseException("检验对象不能重复");
        }
        return structureTestObjectMapper.insert(testObject);
    }
    @Override
    public int delTestObject(Integer id) {
        List<Product> products = productMapper.selectList(Wrappers.<Product>lambdaQuery()
                .eq(Product::getObjectId, id));
        List<Integer> productIds = products.stream().map(Product::getId).collect(Collectors.toList());
        // åˆ é™¤äº§å“ç»´æŠ¤
        if (productIds.size()>0) {
            productMapper.delete(Wrappers.<Product>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<StandardProductList> standardProductLists = standardProductListService.list(Wrappers.<StandardProductList>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<String> 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<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());
                    String sampleUp = structureItemParameter.getSample().replace(sampleOld, sampleNew);
                    structureItemParameter.setSample(sampleUp);
                }
                structureItemParameterService.updateBatchById(itemParameterList);
            }
            // ä¿®æ”¹æ ‘的型号
            standardTreeMapper.update(null, Wrappers.<StandardTree>lambdaUpdate()
                    .eq(StandardTree::getSampleType, oldTestObject.getSpecimenName())
                    .set(StandardTree::getSampleType, testObject.getSpecimenName()));
        }
        Long count = structureTestObjectMapper.selectCount(Wrappers.<StructureTestObject>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<StructureTestObject> selectTestObjectByName() {
        return structureTestObjectMapper.selectList(Wrappers.<StructureTestObject>lambdaQuery().select(StructureTestObject::getSpecimenName,StructureTestObject::getId));
    }
    //设备里面选择检验项目(树形结构)
    @Override
    public List<Map<String, Object>> getInsProduction() {
        return structureItemParameterMapper.getInsProduction();
    }
    @Override
    public List<TestItemDto> getItemTree() {
        return structureItemParameterMapper.getItemTree();
    }
}