lyh
2025-04-17 bb696e8e702854b62b144b22e20e36981301e6cf
lxzn-module-dnc/src/main/java/org/jeecg/modules/dnc/service/impl/ProductInfoServiceImpl.java
@@ -1,5 +1,7 @@
package org.jeecg.modules.dnc.service.impl;
import cn.hutool.core.bean.BeanUtil;
import cn.hutool.core.collection.CollectionUtil;
import cn.hutool.core.util.StrUtil;
import com.baomidou.mybatisplus.core.conditions.query.LambdaQueryWrapper;
import com.baomidou.mybatisplus.core.conditions.query.QueryWrapper;
@@ -13,6 +15,8 @@
import org.jeecg.modules.dnc.entity.*;
import org.jeecg.modules.dnc.exception.ExceptionCast;
import org.jeecg.modules.dnc.mapper.ProductInfoMapper;
import org.jeecg.modules.dnc.request.DocInfoQueryRequest;
import org.jeecg.modules.dnc.request.TreeInfoRequest;
import org.jeecg.modules.dnc.response.*;
import org.jeecg.modules.dnc.service.*;
import org.jeecg.modules.dnc.service.support.ProductTreeWrapper;
@@ -80,6 +84,8 @@
    private IWorkStepPermissionService iWorkStepPermissionService;
    @Autowired
    private IProductMixService productMixService;
    @Autowired
    private IDocInfoService docInfoService;
    @Override
    @Transactional(rollbackFor = {Exception.class})
@@ -1016,6 +1022,87 @@
    }
    /**
     * 通过代号、名称、材质等查询对应电子样板
     * @param treeInfoRequest
     * @return
     */
    @Override
    public List<DocInfo> getByTreeOtherFileInfo(TreeInfoRequest treeInfoRequest){
        switch (treeInfoRequest.getAttributionType()){
            case 1:
                LambdaQueryWrapper<ProductInfo> queryWrapper = new LambdaQueryWrapper<>();
                // 明确条件:仅当attributionType为1且attributionId非空时添加条件
                if (treeInfoRequest.getAttributionType() == 1 && StrUtil.isNotBlank(treeInfoRequest.getAttributionId())) {
                    queryWrapper.eq(ProductInfo::getProductId, treeInfoRequest.getAttributionId());
                }
                // 简化条件判断
                queryWrapper.like(StrUtil.isNotBlank(treeInfoRequest.getTreeCode()), ProductInfo::getProductNo, treeInfoRequest.getTreeCode())
                        .like(StrUtil.isNotBlank(treeInfoRequest.getTreeName()), ProductInfo::getProductName, treeInfoRequest.getTreeName());
                List<ProductInfo> productInfoList = super.list(queryWrapper);
                List<DocInfo> docInfos = new ArrayList<>();
                if (CollectionUtil.isNotEmpty(productInfoList)) {
                    // 使用ID列表而非拼接字符串
                    List<String> productIds = productInfoList.stream()
                            .map(ProductInfo::getProductId)
                            .collect(Collectors.toList());
                    DocInfoQueryRequest docQuery = new DocInfoQueryRequest();
                    BeanUtil.copyProperties(treeInfoRequest, docQuery);
                    docQuery.setAttributionIds(productIds.toString()); // 假设setAttributionIds接受List<String>
                    docQuery.setDocClassCode("OTHER");
                    docQuery.setAttributionType(1);
                    docInfos = docInfoService.findListByDocQuery(docQuery);
                }
                // 创建新请求对象避免污染原参数
                TreeInfoRequest componentRequest = new TreeInfoRequest();
                BeanUtil.copyProperties(treeInfoRequest, componentRequest);
                componentRequest.setProductIds(Collections.singletonList(treeInfoRequest.getAttributionId()));
                // 合并查询结果
                docInfos.addAll(componentInfoService.getByComponentInfo(componentRequest));
                docInfos.addAll(partsInfoService.getByPartsInfo(componentRequest));
                docInfos.addAll(processSpecVersionService.getByProcessSpecVersion(componentRequest));
                return getByTreeOtherFileInfo(docInfos);
            case 2:
                return getByTreeOtherFileInfo(componentInfoService.getByComponentInfo(treeInfoRequest));
            case 3:
                return getByTreeOtherFileInfo(partsInfoService.getByPartsInfo(treeInfoRequest));
            case 4:
                return getByTreeOtherFileInfo(processSpecVersionService.getByProcessSpecVersion(treeInfoRequest));
        }
        return new ArrayList<>();
    }
    private List<DocInfo> getByTreeOtherFileInfo(List<DocInfo> docInfos){
        //对所属id进行翻译
        if (docInfos != null && !docInfos.isEmpty()) {
            docInfos.forEach(docInfo -> {
                switch (docInfo.getAttributionType()){
                    case 1:
                        ProductInfo productInfo=this.getById(docInfo.getAttributionId());
                        docInfo.setNodeName(productInfo.getProductName());
                        docInfo.setNodeCode(productInfo.getProductNo());
                        break;
                    case 2:
                        ComponentInfo componentInfo=componentInfoService.getById(docInfo.getAttributionId());
                        docInfo.setNodeName(componentInfo.getComponentName());
                        docInfo.setNodeCode(componentInfo.getComponentCode());
                        break;
                    case 3:
                        PartsInfo partsInfo=partsInfoService.getById(docInfo.getAttributionId());
                        docInfo.setNodeCode(partsInfo.getPartsCode());
                        docInfo.setNodeName(partsInfo.getPartsName());
                        break;
                    case 4:
                        ProcessSpecVersion processSpecVersion=processSpecVersionService.getById(docInfo.getAttributionId());
                        docInfo.setNodeName(processSpecVersion.getProcessSpecVersionName());
                        docInfo.setNodeCode(processSpecVersion.getProcessSpecVersionCode());
                }
            });
        }
        return docInfos;
    }
    /**
     * 验证输入参数
     */
    private void validateInputParameters(Integer nodeType, String paramId, Integer relativeFlag, String type, String[] paramIds) {