lyh
2025-04-17 bb696e8e702854b62b144b22e20e36981301e6cf
新增筛选电子样板接口、新增强制终止流程方法,
已添加1个文件
已修改15个文件
404 ■■■■■ 文件已修改
lxzn-module-dnc/src/main/java/org/jeecg/modules/dnc/controller/ProductInfoController.java 18 ●●●●● 补丁 | 查看 | 原始文档 | blame | 历史
lxzn-module-dnc/src/main/java/org/jeecg/modules/dnc/entity/DocInfo.java 8 ●●●●● 补丁 | 查看 | 原始文档 | blame | 历史
lxzn-module-dnc/src/main/java/org/jeecg/modules/dnc/request/DocInfoQueryRequest.java 3 ●●●●● 补丁 | 查看 | 原始文档 | blame | 历史
lxzn-module-dnc/src/main/java/org/jeecg/modules/dnc/request/TreeInfoRequest.java 65 ●●●●● 补丁 | 查看 | 原始文档 | blame | 历史
lxzn-module-dnc/src/main/java/org/jeecg/modules/dnc/service/IComponentInfoService.java 9 ●●●●● 补丁 | 查看 | 原始文档 | blame | 历史
lxzn-module-dnc/src/main/java/org/jeecg/modules/dnc/service/IDocInfoService.java 12 ●●●● 补丁 | 查看 | 原始文档 | blame | 历史
lxzn-module-dnc/src/main/java/org/jeecg/modules/dnc/service/IPartsInfoService.java 9 ●●●●● 补丁 | 查看 | 原始文档 | blame | 历史
lxzn-module-dnc/src/main/java/org/jeecg/modules/dnc/service/IProcessSpecVersionService.java 7 ●●●● 补丁 | 查看 | 原始文档 | blame | 历史
lxzn-module-dnc/src/main/java/org/jeecg/modules/dnc/service/IProductInfoService.java 9 ●●●●● 补丁 | 查看 | 原始文档 | blame | 历史
lxzn-module-dnc/src/main/java/org/jeecg/modules/dnc/service/impl/ComponentInfoSeServiceImpl.java 53 ●●●●● 补丁 | 查看 | 原始文档 | blame | 历史
lxzn-module-dnc/src/main/java/org/jeecg/modules/dnc/service/impl/PartsInfoServiceImpl.java 50 ●●●●● 补丁 | 查看 | 原始文档 | blame | 历史
lxzn-module-dnc/src/main/java/org/jeecg/modules/dnc/service/impl/ProcessSpecVersionServiceImpl.java 45 ●●●●● 补丁 | 查看 | 原始文档 | blame | 历史
lxzn-module-dnc/src/main/java/org/jeecg/modules/dnc/service/impl/ProductInfoServiceImpl.java 87 ●●●●● 补丁 | 查看 | 原始文档 | blame | 历史
lxzn-module-flowable/src/main/java/org/jeecg/modules/flowable/controller/AssignStreamFlowController.java 1 ●●●● 补丁 | 查看 | 原始文档 | blame | 历史
lxzn-module-flowable/src/main/java/org/jeecg/modules/flowable/service/IFlowTaskService.java 8 ●●●●● 补丁 | 查看 | 原始文档 | blame | 历史
lxzn-module-flowable/src/main/java/org/jeecg/modules/flowable/service/impl/FlowTaskServiceImpl.java 20 ●●●●● 补丁 | 查看 | 原始文档 | blame | 历史
lxzn-module-dnc/src/main/java/org/jeecg/modules/dnc/controller/ProductInfoController.java
@@ -8,7 +8,9 @@
import org.jeecg.common.aspect.annotation.AutoLog;
import org.jeecg.common.system.base.controller.JeecgController;
import org.jeecg.common.system.vo.LoginUser;
import org.jeecg.modules.dnc.entity.DocInfo;
import org.jeecg.modules.dnc.entity.ProductInfo;
import org.jeecg.modules.dnc.request.TreeInfoRequest;
import org.jeecg.modules.dnc.response.CommonCode;
import org.jeecg.modules.dnc.response.CommonGenericTree;
import org.jeecg.modules.dnc.response.QueryListResponseResult;
@@ -270,4 +272,20 @@
        }
        return Result.error("删除失败!");
    }
    /**
     * é€šè¿‡é›¶ä»¶å·ã€æè´¨ç­‰æŸ¥è¯¢å¯¹åº”电子样板
     * @param treeInfoRequest
     * @return
     */
    @AutoLog(value = "零件信息表-通过零件号、材质等查询对应电子样板")
    @ApiOperation(value = "零件信息表-通过零件号、材质等查询对应电子样板", notes = "零件信息表-通过零件号、材质等查询对应电子样板")
    @GetMapping("/query")
    public Result<?> queryPartsInfo(TreeInfoRequest treeInfoRequest) {
        List<DocInfo> list = productInfoService.getByTreeOtherFileInfo(treeInfoRequest);
        if (list == null)
            list = Collections.emptyList();
        return Result.ok(list);
    }
}
lxzn-module-dnc/src/main/java/org/jeecg/modules/dnc/entity/DocInfo.java
@@ -64,6 +64,7 @@
    @Dict(dictTable = "sys_user", dicCode = "username", dicText = "realname")
    private String pullUser;
    @TableField(exist = false)
    @Dict(dicCode = "nc_doc_relative_attribution_type")
    private Integer attributionType;
    @TableField(exist = false)
    private String attributionId;
@@ -74,4 +75,11 @@
    @Dict(dicCode = "dnc_doc_sync_status")
    private Integer syncStatus;
    //所属节点名称
    @TableField(exist = false)
    private String nodeName;
    //所属节点代号
    @TableField(exist = false)
    private String nodeCode;
}
lxzn-module-dnc/src/main/java/org/jeecg/modules/dnc/request/DocInfoQueryRequest.java
@@ -15,6 +15,9 @@
    private Integer attributionType;
    @ApiModelProperty(value = "绑定类型对应的id 1 äº§å“id 2 éƒ¨ä»¶id 3 é›¶ä»¶id 4 è®¾å¤‡id 5 å·¥åºid", example = "234324234",  required = true)
    private String attributionId;
    /**相同类型,绑定类型对应的ids*/
    @ApiModelProperty(value = "绑定类型对应的ids 1 äº§å“ids 2 éƒ¨ä»¶ids 3 é›¶ä»¶ids 4 è®¾å¤‡ids 5 å·¥åºids")
    private String attributionIds;
    @ApiModelProperty(value = "文档分类 NC=NC文档 OTHER=其他文档 SEND=设备发送文档 REC=设备接受文档", example = "NC", required = true)
    private String docClassCode;
    @ApiModelProperty(value = "NC文件名称")
lxzn-module-dnc/src/main/java/org/jeecg/modules/dnc/request/TreeInfoRequest.java
¶Ô±ÈÐÂÎļþ
@@ -0,0 +1,65 @@
package org.jeecg.modules.dnc.request;
import io.swagger.annotations.ApiModel;
import io.swagger.annotations.ApiModelProperty;
import lombok.Data;
import lombok.NoArgsConstructor;
import java.util.List;
@Data
@NoArgsConstructor
@ApiModel(value = "树结构文件查询参数", description = "树结构文件查询参数")
public class TreeInfoRequest {
    private List<String> productIds;
    private List<String> componentIds;
    private List<String> partsIds;
    private String treeName;
    private String structureType;
    private String treeCode;
    @ApiModelProperty(value = "文档id")
    private String docId;
    @ApiModelProperty(value = "绑定类型 1 äº§å“ 2 éƒ¨ä»¶ 3 é›¶ä»¶ 4 è®¾å¤‡ 5 å·¥åº", example = "1", required = true)
    private Integer attributionType;
    @ApiModelProperty(value = "绑定类型对应的id 1 äº§å“id 2 éƒ¨ä»¶id 3 é›¶ä»¶id 4 è®¾å¤‡id 5 å·¥åºid", example = "234324234",  required = true)
    private String attributionId;
    /**相同类型,绑定类型对应的ids*/
    @ApiModelProperty(value = "绑定类型对应的ids 1 äº§å“ids 2 éƒ¨ä»¶ids 3 é›¶ä»¶ids 4 è®¾å¤‡ids 5 å·¥åºids")
    private String attributionIds;
    @ApiModelProperty(value = "文档分类 NC=NC文档 OTHER=其他文档 SEND=设备发送文档 REC=设备接受文档", example = "NC", required = true)
    private String docClassCode;
    @ApiModelProperty(value = "NC文件名称")
    private String docName;
    @ApiModelProperty(value = "上传时间开始")
    private String startTime;
    @ApiModelProperty(value = "上传时间结束")
    private String endTime;
    //排序字段
    @ApiModelProperty(value = "排序字段")
    private String column;
    @ApiModelProperty(value = "排序")
    private String order;
    @ApiModelProperty(value = "文档状态")
    private String docStatus;
    @ApiModelProperty(value = "审签状态")
    private String docDispatchStatus;
    @ApiModelProperty(value = "出库状态")
    private String pullStatus;
    @ApiModelProperty(value = "同步状态 1 æœªåŒæ­¥ 2 å·²åŒæ­¥")
    private Integer syncStatus;
}
lxzn-module-dnc/src/main/java/org/jeecg/modules/dnc/service/IComponentInfoService.java
@@ -3,7 +3,9 @@
import com.baomidou.mybatisplus.extension.service.IService;
import org.jeecg.modules.dnc.dto.ComponentExt;
import org.jeecg.modules.dnc.entity.ComponentInfo;
import org.jeecg.modules.dnc.entity.DocInfo;
import org.jeecg.modules.dnc.entity.PermissionStream;
import org.jeecg.modules.dnc.request.TreeInfoRequest;
import org.jeecg.modules.system.entity.MdcProduction;
import org.jeecg.modules.system.entity.SysUser;
@@ -142,6 +144,13 @@
     * @return
     */
    List<ComponentInfo> getByParentIdAndUserId(String parentId, String userId);
    /**
     * é€šè¿‡é›¶ä»¶å·ã€æè´¨ç­‰æŸ¥è¯¢å¯¹åº”电子样板
     * @param treeInfoRequest
     * @return
     */
    List<DocInfo> getByComponentInfo(TreeInfoRequest treeInfoRequest);
}
lxzn-module-dnc/src/main/java/org/jeecg/modules/dnc/service/IDocInfoService.java
@@ -6,11 +6,9 @@
import org.jeecg.modules.dnc.entity.DocFile;
import org.jeecg.modules.dnc.entity.DocInfo;
import org.jeecg.modules.dnc.entity.ProcessStream;
import org.jeecg.modules.dnc.response.QueryListResponseResult;
import org.jeecg.modules.dnc.response.QueryPageResponseResult;
import org.jeecg.modules.dnc.response.ResponseResult;
import org.jeecg.modules.dnc.request.DocInfoQueryRequest;
import org.jeecg.modules.dnc.request.DocInfoUploadRequest;
import org.jeecg.modules.dnc.response.ResponseResult;
import org.springframework.web.multipart.MultipartFile;
import javax.servlet.http.HttpServletRequest;
@@ -217,6 +215,14 @@
    List<DocInfo> findList(DocInfoQueryRequest docQuery);
    /**
     * é€šè¿‡ä¸€ç»„attributionId,docClassCode,attributionType查询可指派的文档信息列表
     * @param docQuery
     * @return
     */
    List<DocInfo> findListByDocQuery(DocInfoQueryRequest docQuery);
    /**
     * èŽ·å–ä¸€ç»„å·¥åºä¸‹çš„æ–‡æ¡£ä¿¡æ¯åˆ—è¡¨
     * @param streams
     * @return
lxzn-module-dnc/src/main/java/org/jeecg/modules/dnc/service/IPartsInfoService.java
@@ -1,7 +1,9 @@
package org.jeecg.modules.dnc.service;
import com.baomidou.mybatisplus.extension.service.IService;
import org.jeecg.modules.dnc.entity.DocInfo;
import org.jeecg.modules.dnc.entity.PartsInfo;
import org.jeecg.modules.dnc.request.TreeInfoRequest;
import org.jeecg.modules.system.entity.MdcProduction;
import org.jeecg.modules.system.entity.SysUser;
@@ -114,4 +116,11 @@
     * @return
     */
    PartsInfo getByCode(String partsCode);
    /**
     * é€šè¿‡é›¶ä»¶å·ã€æè´¨ç­‰æŸ¥è¯¢å¯¹åº”电子样板
     * @param treeInfoRequest
     * @return
     */
    List<DocInfo> getByPartsInfo(TreeInfoRequest treeInfoRequest);
}
lxzn-module-dnc/src/main/java/org/jeecg/modules/dnc/service/IProcessSpecVersionService.java
@@ -2,7 +2,9 @@
import com.baomidou.mybatisplus.extension.service.IService;
import org.jeecg.common.api.vo.Result;
import org.jeecg.modules.dnc.entity.DocInfo;
import org.jeecg.modules.dnc.entity.ProcessSpecVersion;
import org.jeecg.modules.dnc.request.TreeInfoRequest;
import org.jeecg.modules.system.entity.MdcProduction;
import org.jeecg.modules.system.entity.SysUser;
@@ -110,9 +112,10 @@
    Result<?> getProcessSpecVersionCount(String processSpecId);
    /**
     * æŸ¥è¯¢å·¥è‰ºè§„程版本下的工序与工步
     * @param processSpecVersionId
     * é€šè¿‡é›¶ä»¶å·ã€æè´¨ç­‰æŸ¥è¯¢å¯¹åº”电子样板
     * @param treeInfoRequest
     * @return
     */
    List<DocInfo> getByProcessSpecVersion(TreeInfoRequest treeInfoRequest);
}
lxzn-module-dnc/src/main/java/org/jeecg/modules/dnc/service/IProductInfoService.java
@@ -2,7 +2,9 @@
import com.baomidou.mybatisplus.extension.service.IService;
import org.jeecg.common.api.vo.Result;
import org.jeecg.modules.dnc.entity.DocInfo;
import org.jeecg.modules.dnc.entity.ProductInfo;
import org.jeecg.modules.dnc.request.TreeInfoRequest;
import org.jeecg.modules.dnc.response.CommonGenericTree;
import org.jeecg.modules.dnc.ucenter.UserDepartExt;
import org.jeecg.modules.system.entity.MdcProduction;
@@ -223,5 +225,12 @@
     * @return
     */
    Result<?> getTreeById(String id, Integer type);
    /**
     * é€šè¿‡ä»£å·ã€åç§°ã€æè´¨ç­‰æŸ¥è¯¢å¯¹åº”电子样板
     * @param treeInfoRequest
     * @return
     */
    List<DocInfo> getByTreeOtherFileInfo(TreeInfoRequest treeInfoRequest);
}
lxzn-module-dnc/src/main/java/org/jeecg/modules/dnc/service/impl/ComponentInfoSeServiceImpl.java
@@ -1,5 +1,7 @@
package org.jeecg.modules.dnc.service.impl;
import cn.hutool.core.bean.BeanUtil;
import cn.hutool.core.util.StrUtil;
import com.baomidou.mybatisplus.core.conditions.query.LambdaQueryWrapper;
import com.baomidou.mybatisplus.core.conditions.query.QueryWrapper;
import com.baomidou.mybatisplus.core.toolkit.Wrappers;
@@ -11,6 +13,8 @@
import org.jeecg.modules.dnc.exception.ExceptionCast;
import org.jeecg.modules.dnc.mapper.ComponentInfoMapper;
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.CommonCode;
import org.jeecg.modules.dnc.response.ComponentInfoCode;
import org.jeecg.modules.dnc.response.ProductInfoCode;
@@ -25,6 +29,7 @@
import org.springframework.transaction.annotation.Transactional;
import java.util.*;
import java.util.stream.Collectors;
@Service
public class ComponentInfoSeServiceImpl extends ServiceImpl<ComponentInfoMapper, ComponentInfo> implements IComponentInfoService {
@@ -40,6 +45,8 @@
    @Lazy
    private IPartsInfoService partsInfoService;
    @Autowired
    private IProcessSpecVersionService processSpecVersionService;
    @Autowired
    private IProcessStreamService processStreamService;
    @Autowired
    private IProductMixService productMixService;
@@ -47,7 +54,9 @@
    private IDocRelativeService iDocRelativeService;
    @Autowired
    private IProductPermissionService productPermissionService;
    @Autowired
    @Lazy
    private IDocInfoService docInfoService;
    @Override
    @Transactional(rollbackFor = {Exception.class})
    public boolean addComponentInfo(ComponentInfo componentInfo) {
@@ -515,4 +524,46 @@
        queryWrapper.orderByAsc(ComponentInfo::getCreateTime);
        return super.list(queryWrapper);
    }
    /**
     * é€šè¿‡é›¶ä»¶å·ã€æè´¨ç­‰æŸ¥è¯¢å¯¹åº”电子样板
     * @param treeInfoRequest
     * @return
     */
    @Override
    public List<DocInfo> getByComponentInfo(TreeInfoRequest treeInfoRequest){
        LambdaQueryWrapper<ComponentInfo> queryWrapper = new LambdaQueryWrapper<>();
        if (treeInfoRequest.getProductIds() != null && !treeInfoRequest.getProductIds().isEmpty()) {
            queryWrapper.in(ComponentInfo::getProductId, treeInfoRequest.getProductIds());
        }
        if (treeInfoRequest.getAttributionType()==2){
            queryWrapper.eq(StrUtil.isNotEmpty(treeInfoRequest.getAttributionId()),ComponentInfo::getComponentId,treeInfoRequest.getAttributionId());
        }
        queryWrapper.like(StrUtil.isNotEmpty(treeInfoRequest.getTreeCode()),ComponentInfo::getComponentCode, treeInfoRequest.getTreeCode());
        queryWrapper.like(StrUtil.isNotEmpty(treeInfoRequest.getTreeName()),ComponentInfo::getComponentName, treeInfoRequest.getTreeName());
        queryWrapper.like(StrUtil.isNotEmpty(treeInfoRequest.getStructureType()),ComponentInfo::getStructureType, treeInfoRequest.getStructureType());
        queryWrapper.orderByDesc(ComponentInfo::getCreateTime);
        List<ComponentInfo> list = super.list(queryWrapper);
        List<DocInfo> docInfos = new ArrayList<>();
        if (list != null && !list.isEmpty()) {
            String ids=list.stream().map(ComponentInfo::getComponentId).collect(Collectors.joining(","));
            DocInfoQueryRequest docQuery = new DocInfoQueryRequest();
            BeanUtil.copyProperties(treeInfoRequest,docQuery);
            docQuery.setAttributionIds(ids);
            docQuery.setDocClassCode("OTHER");
            docQuery.setAttributionType(2);
            docInfos=docInfoService.findListByDocQuery(docQuery);
        }
        if (treeInfoRequest.getAttributionType()==2){
            List<String> id =new ArrayList<>();
            id.add(treeInfoRequest.getAttributionId());
            treeInfoRequest.setComponentIds(id);
            List<DocInfo> partsInfos = partsInfoService.getByPartsInfo(treeInfoRequest);
            docInfos.addAll(partsInfos);
            List<DocInfo> processSpecVersions = processSpecVersionService.getByProcessSpecVersion(treeInfoRequest);
            docInfos.addAll(processSpecVersions);
        }
        return docInfos;
    }
}
lxzn-module-dnc/src/main/java/org/jeecg/modules/dnc/service/impl/PartsInfoServiceImpl.java
@@ -1,5 +1,7 @@
package org.jeecg.modules.dnc.service.impl;
import cn.hutool.core.bean.BeanUtil;
import cn.hutool.core.util.StrUtil;
import com.baomidou.mybatisplus.core.conditions.query.LambdaQueryWrapper;
import com.baomidou.mybatisplus.core.conditions.query.QueryWrapper;
import com.baomidou.mybatisplus.core.toolkit.Wrappers;
@@ -12,6 +14,8 @@
import org.jeecg.modules.dnc.mapper.ComponentInfoMapper;
import org.jeecg.modules.dnc.mapper.PartsInfoMapper;
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.CommonCode;
import org.jeecg.modules.dnc.response.PartsInfoCode;
import org.jeecg.modules.dnc.response.ProductInfoCode;
@@ -21,10 +25,12 @@
import org.jeecg.modules.system.entity.MdcProduction;
import org.jeecg.modules.system.entity.SysUser;
import org.springframework.beans.factory.annotation.Autowired;
import org.springframework.context.annotation.Lazy;
import org.springframework.stereotype.Service;
import org.springframework.transaction.annotation.Transactional;
import java.util.*;
import java.util.stream.Collectors;
@Service
public class PartsInfoServiceImpl extends ServiceImpl<PartsInfoMapper, PartsInfo> implements IPartsInfoService {
@@ -46,6 +52,9 @@
    private IProductPermissionService productPermissionService;
    @Autowired
    private IProductMixService productMixService;
    @Autowired
    @Lazy
    private IDocInfoService docInfoService;
    @Override
    @Transactional(rollbackFor = {Exception.class})
    public boolean addPartsInfo(PartsInfo partsInfo) {
@@ -435,4 +444,45 @@
        return null;
    }
    /**
     * é€šè¿‡é›¶ä»¶å·ã€æè´¨ç­‰æŸ¥è¯¢å¯¹åº”电子样板
     * @param treeInfoRequest
     * @return
     */
    @Override
    public List<DocInfo> getByPartsInfo(TreeInfoRequest treeInfoRequest){
        LambdaQueryWrapper<PartsInfo> queryWrapper = new LambdaQueryWrapper<>();
        if (treeInfoRequest.getProductIds() != null && !treeInfoRequest.getProductIds().isEmpty()) {
            queryWrapper.in(PartsInfo::getProductId, treeInfoRequest.getProductIds());
        }
        if (treeInfoRequest.getComponentIds() != null && !treeInfoRequest.getComponentIds().isEmpty()) {
            queryWrapper.in(PartsInfo::getComponentId, treeInfoRequest.getComponentIds());
        }
        if (treeInfoRequest.getAttributionType()==3){
            queryWrapper.eq(StrUtil.isNotEmpty(treeInfoRequest.getAttributionId()),PartsInfo::getPartsId,treeInfoRequest.getAttributionId());
        }
        queryWrapper.like(StrUtil.isNotEmpty(treeInfoRequest.getTreeCode()),PartsInfo::getPartsCode, treeInfoRequest.getTreeCode());
        queryWrapper.like(StrUtil.isNotEmpty(treeInfoRequest.getTreeName()),PartsInfo::getPartsName, treeInfoRequest.getTreeName());
        queryWrapper.like(StrUtil.isNotEmpty(treeInfoRequest.getStructureType()),PartsInfo::getStructureType, treeInfoRequest.getStructureType());
        queryWrapper.orderByDesc(PartsInfo::getCreateTime);
        List<PartsInfo> list = super.list(queryWrapper);
        List<DocInfo> docInfos = new ArrayList<>();
        if (list != null && !list.isEmpty()) {
            String ids=list.stream().map(PartsInfo::getPartsId).collect(Collectors.joining(","));
            DocInfoQueryRequest docQuery = new DocInfoQueryRequest();
            BeanUtil.copyProperties(treeInfoRequest,docQuery);
            docQuery.setAttributionIds(ids);
            docQuery.setDocClassCode("OTHER");
            docQuery.setAttributionType(3);
            docInfos=docInfoService.findListByDocQuery(docQuery);
        }
        if (treeInfoRequest.getAttributionType()==3){
            List<String> id =new ArrayList<>();
            id.add(treeInfoRequest.getAttributionIds());
            treeInfoRequest.setPartsIds(id);
            List<DocInfo> processSpecVersions = processSpecVersionService.getByProcessSpecVersion(treeInfoRequest);
            docInfos.addAll(processSpecVersions);
        }
        return docInfos;
    }
}
lxzn-module-dnc/src/main/java/org/jeecg/modules/dnc/service/impl/ProcessSpecVersionServiceImpl.java
@@ -1,5 +1,7 @@
package org.jeecg.modules.dnc.service.impl;
import cn.hutool.core.bean.BeanUtil;
import cn.hutool.core.util.StrUtil;
import com.baomidou.mybatisplus.core.conditions.query.LambdaQueryWrapper;
import com.baomidou.mybatisplus.core.toolkit.Wrappers;
import com.baomidou.mybatisplus.extension.service.impl.ServiceImpl;
@@ -12,6 +14,8 @@
import org.jeecg.modules.dnc.mapper.PartsInfoMapper;
import org.jeecg.modules.dnc.mapper.ProcessSpecVersionMapper;
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.utils.ValidateUtil;
@@ -22,6 +26,7 @@
import org.springframework.stereotype.Service;
import java.util.*;
import java.util.stream.Collectors;
@Service
public class ProcessSpecVersionServiceImpl extends ServiceImpl<ProcessSpecVersionMapper, ProcessSpecVersion> implements IProcessSpecVersionService{
@@ -46,6 +51,9 @@
    private IWorkStepService workStepService;
    @Autowired
    private IProductPermissionService productPermissionService;
    @Autowired
    @Lazy
    private IDocInfoService docInfoService;
    /**
     * æ ¹æ®ç”¨æˆ·id获取授权的工艺规程版本表信息
     * @param userId
@@ -457,4 +465,41 @@
        List<WorkStep> workStepList=workStepService.list(new LambdaQueryWrapper<WorkStep>().eq(WorkStep::getPsvId,processSpecId));
        return null;
    }
    /**
     * é€šè¿‡é›¶ä»¶å·ã€æè´¨ç­‰æŸ¥è¯¢å¯¹åº”电子样板
     * @param treeInfoRequest
     * @return
     */
    @Override
    public List<DocInfo> getByProcessSpecVersion(TreeInfoRequest treeInfoRequest){
        LambdaQueryWrapper<ProcessSpecVersion> queryWrapper = new LambdaQueryWrapper<>();
        if (treeInfoRequest.getProductIds() != null && !treeInfoRequest.getProductIds().isEmpty()) {
            queryWrapper.in(ProcessSpecVersion::getProductId, treeInfoRequest.getProductIds());
        }
        if (treeInfoRequest.getComponentIds() != null && !treeInfoRequest.getComponentIds().isEmpty()) {
            queryWrapper.in(ProcessSpecVersion::getComponentId, treeInfoRequest.getComponentIds());
        }
        if (treeInfoRequest.getPartsIds() != null && !treeInfoRequest.getPartsIds().isEmpty()) {
            queryWrapper.in(ProcessSpecVersion::getPartsId, treeInfoRequest.getPartsIds());
        }
        if (treeInfoRequest.getAttributionType()==4){
            queryWrapper.eq(StrUtil.isNotEmpty(treeInfoRequest.getAttributionId()),ProcessSpecVersion::getId,treeInfoRequest.getAttributionId());
        }
        queryWrapper.like(StrUtil.isNotEmpty(treeInfoRequest.getTreeName()),ProcessSpecVersion::getProcessSpecVersionName, treeInfoRequest.getTreeName());
        queryWrapper.like(StrUtil.isNotEmpty(treeInfoRequest.getTreeCode()),ProcessSpecVersion::getProcessSpecVersionCode, treeInfoRequest.getTreeName());
        queryWrapper.orderByDesc(ProcessSpecVersion::getCreateTime);
        List<ProcessSpecVersion> list = super.list(queryWrapper);
        if (list == null || list.isEmpty()){
            return new ArrayList<>();
        }else {
            String ids=list.stream().map(ProcessSpecVersion::getId).collect(Collectors.joining(","));
            DocInfoQueryRequest docQuery = new DocInfoQueryRequest();
            BeanUtil.copyProperties(treeInfoRequest,docQuery);
            docQuery.setAttributionIds(ids);
            docQuery.setDocClassCode("OTHER");
            docQuery.setAttributionType(4);
            return docInfoService.findListByDocQuery(docQuery);
        }
    }
}
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) {
lxzn-module-flowable/src/main/java/org/jeecg/modules/flowable/controller/AssignStreamFlowController.java
@@ -97,7 +97,6 @@
        return flowTaskService.finishedList(pageNo, pageSize,flowMyBusinessDto);
    }
    @ApiOperation(value = "获取工作流历史任务", response = FlowTaskDto.class)
    @GetMapping(value = "/queryHisTaskList")
    public Result<?> queryHisTaskList(@RequestParam(name = "procInstId") String procInstId) {
lxzn-module-flowable/src/main/java/org/jeecg/modules/flowable/service/IFlowTaskService.java
@@ -46,6 +46,14 @@
    Result findReturnTaskListByDataId(FlowTaskVo flowTaskVo);
    /**
     * ç»“束流程
     * @param processInstanceId
     * @param deleteReason
     * @return
     */
    Result<?> end(String processInstanceId, String deleteReason);
    /**
     * åˆ é™¤ä»»åŠ¡
     *
     * @param flowTaskVo è¯·æ±‚实体参数
lxzn-module-flowable/src/main/java/org/jeecg/modules/flowable/service/impl/FlowTaskServiceImpl.java
@@ -668,6 +668,26 @@
        flowTaskVo.setTaskId(business.getTaskId());
        return findReturnTaskList(flowTaskVo);
    }
    /**
     * ç»“束流程
     * @param processInstanceId æµç¨‹å®žä¾‹ ID
     * @param deleteReason å®šä¹‰åˆ é™¤åŽŸå› 
     */
    public Result<?> end(String processInstanceId, String deleteReason) {
        try {
            // å¼ºåˆ¶ç»“束流程实例
            runtimeService.deleteProcessInstance(processInstanceId, deleteReason);
            System.out.println("Process instance with ID " + processInstanceId + " has been forcefully ended.");
        } catch (Exception e) {
            System.err.println("Failed to force end process instance: " + e.getMessage());
        }
        // å…³é—­æµç¨‹å¼•擎
        processEngine.close();
        return Result.OK("流程已结束");
    }
    /**
     * èŽ·å–æ‰€æœ‰å¯å›žé€€çš„èŠ‚ç‚¹
     *