|
package org.springblade.mdm.program.controller;
|
|
import io.swagger.v3.oas.annotations.Operation;
|
import io.swagger.v3.oas.annotations.Parameter;
|
import io.swagger.v3.oas.annotations.tags.Tag;
|
import jakarta.servlet.http.HttpServletResponse;
|
import lombok.AllArgsConstructor;
|
import lombok.extern.slf4j.Slf4j;
|
import org.apache.commons.lang3.StringUtils;
|
import org.springblade.core.log.exception.ServiceException;
|
import org.springblade.core.tenant.annotation.NonDS;
|
import org.springblade.core.tool.api.R;
|
import org.springblade.core.tool.utils.Func;
|
import org.springblade.mdm.flow.service.FlowProgramFileService;
|
import org.springblade.mdm.flow.service.TaskDispatchService;
|
import org.springblade.mdm.program.entity.NcNode;
|
import org.springblade.mdm.program.entity.NcNodeHis;
|
import org.springblade.mdm.program.service.NcNodeHisService;
|
import org.springblade.mdm.program.service.NcNodeService;
|
import org.springblade.mdm.program.service.ProgramFlowStatusQueryService;
|
import org.springblade.mdm.program.vo.CompareDataVO;
|
import org.springblade.mdm.program.vo.NcNodeOldQueryVO;
|
import org.springblade.mdm.program.vo.NcNodeQueryVO;
|
import org.springblade.mdm.program.vo.NcNodeVO;
|
import org.springframework.beans.BeanUtils;
|
import org.springframework.web.bind.annotation.*;
|
|
import java.io.IOException;
|
import java.util.ArrayList;
|
import java.util.Comparator;
|
import java.util.List;
|
|
/**
|
* 程序节点
|
*
|
* @author yangys
|
*/
|
@NonDS
|
@RestController
|
@RequestMapping("/program/nodehis")
|
@AllArgsConstructor
|
@Tag(name = "程序节点", description = "程序节点")
|
@Slf4j
|
public class NcNodeHisController {
|
private final NcNodeService ncNodeService;
|
private final NcNodeHisService nodeHisService;
|
private final FlowProgramFileService flowProgramFileService;
|
|
|
@GetMapping("/history-by-nodeid")
|
@Operation(summary = "根据绑定节点id获取历史列表", description = "程序历史列表,仅‘程序包’字典值60的数据。用于显示程序的‘历史版本’")
|
public R<List<NcNodeVO>> historyByBindNodeId(@Parameter(description="节点ID(nodeType=60的节点id)")@RequestParam Long id) {
|
return R.data(this.nodeHisService.historyByNodeId(id));
|
}
|
|
@GetMapping("/files-by-parent-id")
|
@Operation(summary = "获取历史程序包文件列表", description = "获取历史程序包文件列表")
|
public R<List<NcNodeVO>> filesByParentNodeId(@Parameter(description="节点ID(nodeType=60的节点id)")@RequestParam Long id) {
|
List<NcNodeHis> nodes = nodeHisService.lambdaQuery().eq(NcNodeHis::getParentId,id).orderByDesc(NcNodeHis::getCreateTime).list();
|
List<NcNodeVO> voList = new ArrayList<>(nodes.stream().map(nh -> {NcNodeVO vo = new NcNodeVO();
|
BeanUtils.copyProperties(nh,vo);
|
return vo;
|
}).toList());
|
NcNodeHis pkgNode = nodeHisService.getById(id);
|
//文件,按照先程序,后其他排序
|
if(!voList.isEmpty()) {
|
if (voList.get(0).getNodeType().equals(NcNode.TYPE_PROGRAM_FILE)) {
|
Comparator<NcNodeVO> cp = new Comparator<>() {
|
@Override
|
public int compare(NcNodeVO n1, NcNodeVO n2) {
|
if (n1.getName().startsWith(pkgNode.getName()) && !n2.getName().startsWith(pkgNode.getName())) {
|
return -1;
|
} else {
|
return 1;
|
}
|
}
|
};
|
voList.sort(cp.thenComparing(NcNodeVO::getName));
|
|
}
|
}
|
return R.data(voList);
|
}
|
|
@GetMapping("/content-by-nodeid")
|
@Operation(summary = "根据节点获取文件内容", description = "仅限文本格式的内容,二进制文件将返回空串")
|
public R<String> fileContentByNodeId(@Parameter(description = "节点id") Long nodeId) {
|
try {
|
NcNodeHis node = this.nodeHisService.getById(nodeId);
|
if(node.getFlowProgramFileId() != null) {
|
return R.data(flowProgramFileService.getFileContent(node.getFlowProgramFileId()));
|
}else{
|
return R.data("找不到文件");
|
}
|
}catch(Exception e) {
|
log.error("获取文件内容失败",e);
|
return R.fail(e.getMessage());
|
}
|
}
|
|
@GetMapping("/download-by-nodeid")
|
@Operation(summary = "下载节点对应的文件", description = "下载节点对应的文件")
|
public void downloadByNodeId(@Parameter(description = "节点id") Long nodeId, HttpServletResponse response) throws IOException {
|
|
NcNodeHis node = nodeHisService.getById(nodeId);
|
if(node.getFlowProgramFileId() != null) {
|
flowProgramFileService.download(node.getFlowProgramFileId(),response);
|
}else{
|
log.error("非文件节点");
|
throw new ServiceException("节点无文件id");
|
}
|
|
}
|
}
|