|
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.service.NcNodeHisService;
|
import org.springblade.mdm.program.service.NcNodeService;
|
import org.springblade.mdm.program.service.ProgramFlowStatusQueryService;
|
import org.springblade.mdm.program.vo.*;
|
import org.springframework.web.bind.annotation.*;
|
|
import java.io.IOException;
|
import java.rmi.ServerError;
|
import java.util.Comparator;
|
import java.util.List;
|
|
/**
|
* 程序节点
|
*
|
* @author yangys
|
*/
|
@NonDS
|
@RestController
|
@RequestMapping("/program/node")
|
@AllArgsConstructor
|
@Tag(name = "程序节点", description = "程序节点")
|
@Slf4j
|
public class NcNodeController {
|
private final NcNodeService ncNodeService;
|
private final NcNodeHisService nodeHisService;
|
private final ProgramFlowStatusQueryService programFlowStatusQueryService;
|
private final FlowProgramFileService flowProgramFileService;
|
private final TaskDispatchService taskDispatchService;
|
/**
|
* 新增
|
*/
|
@PostMapping("/save")
|
@Operation(summary = "新增节点", description = "节点信息,id保持空")
|
public R<Boolean> save(@RequestBody NcNodeVO vo) {
|
ncNodeService.saveNcCode(vo);
|
return R.status(true);
|
}
|
|
|
@PostMapping("/update")
|
@Operation(summary = "修改节点", description = "节点信息,必须传入ID")
|
public R<Boolean> update(@RequestBody NcNodeVO vo) {
|
ncNodeService.updateNcNode(vo);
|
return R.status(true);
|
}
|
|
@PostMapping("/remove")
|
@Operation(summary = "删除节点")
|
public R<Boolean> remove(Long id) {
|
ncNodeService.removeById(id);
|
return R.status(true);
|
}
|
|
@PostMapping("/lock")
|
@Operation(summary = "锁定节点(程序包名)")
|
public R<Boolean> lock(@Parameter(description="程序包名节点id)")Long id,@Parameter(description="锁定原因)")String remark) {
|
ncNodeService.lock(id,remark);
|
return R.status(true);
|
}
|
|
@GetMapping("/query-lock-remark")
|
@Operation(summary = "查询锁定原因")
|
public R<String> queryLockRemark(@Parameter(description="程序包名节点id)")Long id) {
|
|
NcNode node = ncNodeService.getById(id);
|
if(node.hasLocked()){
|
return R.data(node.getRemark());
|
}else{
|
return R.data(StringUtils.EMPTY);
|
}
|
}
|
|
@GetMapping("/lazy-list")
|
@Operation(summary = "懒加载列表", description = "程序目录树形结构")
|
public R<List<NcNodeVO>> lazyList(Long parentId) {
|
List<NcNodeVO> list = ncNodeService.lazyList(parentId);
|
if(list != null && !list.isEmpty()) {
|
for(NcNodeVO ncNodeVO : list) {
|
if(NcNode.TYPE_PROGRAM_PACKAGE.equals(ncNodeVO.getNodeType())){
|
ncNodeVO.setFlowStatus(programFlowStatusQueryService.queryFlowStatus(ncNodeVO.getProcessInstanceId()));
|
}
|
}
|
//文件,按照先程序,后其他排序
|
if(list.get(0).getNodeType().equals(NcNode.TYPE_PROGRAM_FILE)){
|
NcNode parentNode = ncNodeService.getById(parentId);
|
//list.sort(Comparator.comparing().thenComparing(NcNodeVO::getName));
|
Comparator<NcNodeVO> cp = new Comparator<NcNodeVO>() {
|
@Override
|
public int compare(NcNodeVO n1, NcNodeVO n2) {
|
if (n1.getName().startsWith(parentNode.getName()) && !n2.getName().startsWith(parentNode.getName())) {
|
return -1;
|
} else {
|
return 1;
|
}
|
}
|
};
|
list.sort(cp.thenComparing(NcNodeVO::getName));
|
/*
|
list.sort((n1, n2) -> {
|
|
if(n1.getName().startsWith(parentNode.getName())){
|
return 1;
|
}else{
|
return n1.getName().compareTo(n2.getName());
|
}
|
|
});*/
|
/*
|
Collections.sort(userList, new Comparator<User>() {
|
@Override
|
public int compare(User u1, User u2) {
|
return u1.getName().compareTo(u2.getName());
|
}
|
});*/
|
}
|
}
|
return R.data(list);
|
}
|
|
@GetMapping("/search-list")
|
@Operation(summary = "查询树状列表", description = "程序目录树形结构(查询专用)")
|
public R<List<NcNodeVO>> searchList(NcNodeOldQueryVO queryVO) {
|
if(Func.isEmpty(queryVO.getName())){
|
return R.fail("请输入名称");
|
}
|
List<NcNodeVO> list = ncNodeService.searchList(queryVO);
|
|
return R.data(list);
|
}
|
@GetMapping("/search-list2")
|
@Operation(summary = "涉密网首页搜索", description = "搜索指定零组件号")
|
public R<List<NcNodeVO>> search(NcNodeQueryVO queryVO) {
|
if(Func.isEmpty(queryVO.getDrawingNo())){
|
return R.fail("请输入零组件号");
|
}
|
List<NcNodeVO> list = ncNodeService.searchList2(queryVO);
|
|
return R.data(list);
|
}
|
|
@GetMapping("/drawing-no-pick")
|
@Operation(summary = "首页搜索零组件下拉数据", description = "搜索指定零组件号")
|
public R<List<String>> drawingNoPick(String drawingNo) {
|
return R.data(taskDispatchService.drawingNoSeletDropList(drawingNo));
|
}
|
/*
|
|
@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("/compare-content")
|
@Operation(summary = "对比内容数据", description = "查询对比内容的2个文本数据")
|
public R<CompareDataVO> compareContent(@Parameter(description="节点1的ID(nodeType=70的节点id)")Long id1,@Parameter(description="节点2的ID(nodeType=70的节点id)")Long id2) {
|
CompareDataVO vo = new CompareDataVO();
|
NcNode node1 = ncNodeService.getById(id1);
|
NcNode node2 = ncNodeService.getById(id2);
|
if(node1.getFlowProgramFileId() != null) {
|
vo.setContent1(flowProgramFileService.getFileContent(node1.getFlowProgramFileId()));
|
}
|
if(node2.getFlowProgramFileId() != null) {
|
vo.setContent2(flowProgramFileService.getFileContent(node2.getFlowProgramFileId()));
|
}
|
|
return R.data(vo);
|
}
|
|
|
|
@GetMapping("/download-by-nodeid")
|
@Operation(summary = "下载节点对应的文件", description = "下载节点对应的文件")
|
public void downloadByNodeId(@Parameter(description = "节点id") Long nodeId, HttpServletResponse response) throws IOException {
|
|
NcNode ncnode = ncNodeService.getById(nodeId);
|
if(ncnode.getFlowProgramFileId() != null) {
|
flowProgramFileService.download(ncnode.getFlowProgramFileId(),response);
|
}else{
|
log.error("非文件节点");
|
throw new ServiceException("节点无文件id");
|
}
|
|
}
|
}
|