修改:大部分修改3.0

This commit is contained in:
zjh 2026-01-16 08:48:06 +08:00
parent 00a73659e2
commit 2f58e702e5
15 changed files with 231 additions and 30 deletions

View File

@ -27,6 +27,24 @@ public class TemplateApprovalController {
@Resource @Resource
private RuntimeDatasourceService runtimeDatasourceService; private RuntimeDatasourceService runtimeDatasourceService;
// 获取可修改节点
@GetMapping("/getEditableNodes")
public Response getEditableNodes(
@NotBlank @RequestParam String flowId
) {
List<String> nodes = templateApprovalService.getEditableNodes(flowId);
return Response.ok().data(nodes);
}
// 修改节点
@PostMapping("/updateNode")
public Response updateNode(
@RequestBody UpdateNodeForm form
) {
templateApprovalService.updateNode(form);
return Response.ok();
}
// 修改流程主题 // 修改流程主题
@GetMapping("/updateFlowTitle") @GetMapping("/updateFlowTitle")
public Response updateFlowTitle( public Response updateFlowTitle(

View File

@ -0,0 +1,19 @@
package com.xdap.self_development.controller.form;
import com.xdap.self_development.pojo.dto.ApprovalNodeDTO;
import lombok.Data;
import javax.validation.constraints.NotBlank;
import javax.validation.constraints.NotEmpty;
import java.util.List;
@Data
public class UpdateNodeForm {
@NotBlank(message = "用户不能为空")
private String userId;
@NotBlank(message = "流程不能为空")
private String flowId;
// 审批环节配置列表
@NotEmpty(message = "环节不能为空")
private List<ApprovalNodeDTO> nodeList;
}

View File

@ -9,4 +9,5 @@ public class ModelComparisonExportRequest {
String userID; String userID;
List<ModelItem> modelIds; List<ModelItem> modelIds;
List<String> subsystemParts; List<String> subsystemParts;
List<String> parameterIds;
} }

View File

@ -167,6 +167,7 @@ public class EngineModelListener implements ReadListener<DataEntryEngineModelExc
engineParamDetailPojo.setParameterType(parameter.getParameterType()); engineParamDetailPojo.setParameterType(parameter.getParameterType());
engineParamDetailPojo.setPartsName(parameter.getPartsName()); engineParamDetailPojo.setPartsName(parameter.getPartsName());
engineParamDetailPojo.setParameterName(parameter.getParameterName()); engineParamDetailPojo.setParameterName(parameter.getParameterName());
engineParamDetailPojo.setParameterSource(parameter.getParameterSource());
engineParamDetailPojo.setDepartment(parameter.getDepartment()); engineParamDetailPojo.setDepartment(parameter.getDepartment());
engineParamDetailPojo.setMajorVersion(versionNumber); engineParamDetailPojo.setMajorVersion(versionNumber);
engineParamDetailPojo.setVersionStatus(ParamValueVersionEnum.DRAFT.getCode()); engineParamDetailPojo.setVersionStatus(ParamValueVersionEnum.DRAFT.getCode());

View File

@ -54,7 +54,8 @@ public interface ActivitiProcessService {
void updateTasks( void updateTasks(
EngineReviewListPojo flow, EngineReviewListPojo flow,
String status, String status,
Integer enableReturn Integer enableReturn,
ApprovalConfigPojo currentNode
); );
void processNextNode( void processNextNode(
EngineReviewListPojo flow, EngineReviewListPojo flow,

View File

@ -54,7 +54,7 @@ public interface BenchmarkingReportService {
void cancelProcess(ApprovalFlow flow, ApprovalConfigPojo node, String status, String userId); void cancelProcess(ApprovalFlow flow, ApprovalConfigPojo node, String status, String userId);
void updateTasks(ApprovalFlow flow, String status, Integer enableReturn); void updateTasks(ApprovalFlow flow, String status, Integer enableReturn, ApprovalConfigPojo currentNode);
ApprovalNodesDTO getApprovalUsers(@NotBlank String flowId); ApprovalNodesDTO getApprovalUsers(@NotBlank String flowId);

View File

@ -37,6 +37,8 @@ public interface EngineParamDetailService {
void updateToInsertFiledBy(List<EngineParamDetailPojo> engineParamDetailPojos, String userID); void updateToInsertFiledBy(List<EngineParamDetailPojo> engineParamDetailPojos, String userID);
List<Parameter> selectAllByNewVersion(); List<Parameter> selectAllByNewVersion();
List<Parameter> selectNeedFillByNewVersion();
List<Parameter> selectAllAndTcByNewVersion(); List<Parameter> selectAllAndTcByNewVersion();
/** /**
* 根据型号查询最新的引擎参数详情列表 * 根据型号查询最新的引擎参数详情列表

View File

@ -43,7 +43,7 @@ public interface TemplateApprovalService {
boolean checkNodeComplete(ApprovalFlow flow, ApprovalConfigPojo node); boolean checkNodeComplete(ApprovalFlow flow, ApprovalConfigPojo node);
void updateTasks(ApprovalFlow flow, String status, Integer enableReturn); void updateTasks(ApprovalFlow flow, String status, Integer enableReturn, ApprovalConfigPojo currentNode);
void addNodeTodo(ApprovalFlow flow, ApprovalConfigPojo node, Template template, String createBy, Integer enableReturn); void addNodeTodo(ApprovalFlow flow, ApprovalConfigPojo node, Template template, String createBy, Integer enableReturn);
@ -54,4 +54,8 @@ public interface TemplateApprovalService {
boolean getIsDirect(String flowId); boolean getIsDirect(String flowId);
void updateFlowTitle(String flowId, String title); void updateFlowTitle(String flowId, String title);
List<String> getEditableNodes(@NotBlank String flowId);
void updateNode(UpdateNodeForm form);
} }

View File

@ -506,17 +506,19 @@ public class ActivitiProcessServiceImpl implements ActivitiProcessService {
bd.getBusinessDatabase().doInsert(todoTask); bd.getBusinessDatabase().doInsert(todoTask);
} }
// 更新发起和已办 // 更新发起和已办
myself.updateTasks(flow, status.getDesc(), 0); myself.updateTasks(flow, status.getDesc(), 0, node);
} }
public void updateTasks( public void updateTasks(
EngineReviewListPojo flow, EngineReviewListPojo flow,
String status, String status,
Integer enableReturn Integer enableReturn,
ApprovalConfigPojo currentNode
) { ) {
// 更新已发起的任务状态 // 更新已发起的任务状态
bd.getBusinessDatabase() bd.getBusinessDatabase()
.update("current_node", status) .update("current_node", status)
.update("last_update_date", new Date()) .update("last_update_date", new Date())
.update("current_processor", currentNode == null ? "" : currentNode.getAssignees())
.eq("document_no", flow.getId()) .eq("document_no", flow.getId())
.update("enable_return", enableReturn) .update("enable_return", enableReturn)
.doUpdate(InitiatedTaskPojo.class); .doUpdate(InitiatedTaskPojo.class);
@ -524,6 +526,7 @@ public class ActivitiProcessServiceImpl implements ActivitiProcessService {
bd.getBusinessDatabase() bd.getBusinessDatabase()
.update("current_node", status) .update("current_node", status)
.update("last_update_date", new Date()) .update("last_update_date", new Date())
.update("current_processor", currentNode == null ? "" : currentNode.getAssignees())
.eq("document_no", flow.getId()) .eq("document_no", flow.getId())
.doUpdate(CompletedTaskPojo.class); .doUpdate(CompletedTaskPojo.class);
} }
@ -553,7 +556,7 @@ public class ActivitiProcessServiceImpl implements ActivitiProcessService {
} }
else { else {
// 待办环节修改 // 待办环节修改
myself.updateTasks(flow, ParamValueVersionEnum.PASSED.getDesc(), 0); myself.updateTasks(flow, ParamValueVersionEnum.PASSED.getDesc(), 0, null);
// 所有环节完成 // 所有环节完成
DataEntryEngineModelPojo modelPojos = bd.getBusinessDatabase() DataEntryEngineModelPojo modelPojos = bd.getBusinessDatabase()
.eq("id", flow.getModelId()) .eq("id", flow.getModelId())
@ -645,7 +648,7 @@ public class ActivitiProcessServiceImpl implements ActivitiProcessService {
todoTaskPojo.setIsDelete(0); todoTaskPojo.setIsDelete(0);
bd.getBusinessDatabase().doInsert(todoTaskPojo); bd.getBusinessDatabase().doInsert(todoTaskPojo);
} }
myself.updateTasks(flow, node.getNodeName(), enableReturn); myself.updateTasks(flow, node.getNodeName(), enableReturn, node);
} }
@Override @Override

View File

@ -873,7 +873,7 @@ public class BenchmarkingReportServiceImpl implements BenchmarkingReportService
.update("status", report.getStatus()) .update("status", report.getStatus())
.doUpdate(BenchmarkingReport.class); .doUpdate(BenchmarkingReport.class);
// 待办环节修改 // 待办环节修改
myself.updateTasks(flow, "已完成", 0); myself.updateTasks(flow, "已完成", 0, null);
} else { } else {
flow.setCurrentNode(nextNode.getNodeOrder()); flow.setCurrentNode(nextNode.getNodeOrder());
myself.addNodeTodo(flow, nextNode, report, userId, 0); myself.addNodeTodo(flow, nextNode, report, userId, 0);
@ -916,7 +916,7 @@ public class BenchmarkingReportServiceImpl implements BenchmarkingReportService
} }
// 更新已办和发起的状态 // 更新已办和发起的状态
myself.updateTasks(flow, node.getNodeName(), enableReturn); myself.updateTasks(flow, node.getNodeName(), enableReturn, node);
if (!list.isEmpty()) { if (!list.isEmpty()) {
bd.getBusinessDatabase().doBatchInsert(list); bd.getBusinessDatabase().doBatchInsert(list);
@ -972,18 +972,20 @@ public class BenchmarkingReportServiceImpl implements BenchmarkingReportService
todoTask.setCurrentProcessor(JSON.toJSONString(Collections.singletonList(flow.getCreateBy()))); todoTask.setCurrentProcessor(JSON.toJSONString(Collections.singletonList(flow.getCreateBy())));
bd.getBusinessDatabase().doInsert(todoTask); bd.getBusinessDatabase().doInsert(todoTask);
} }
myself.updateTasks(flow, Objects.equals(report.getStatus(), "RETURNED") ? "已撤回" : "已拒绝", 0); myself.updateTasks(flow, Objects.equals(report.getStatus(), "RETURNED") ? "已撤回" : "已拒绝", 0, node);
} }
public void updateTasks(ApprovalFlow flow, String status, Integer enableReturn) { public void updateTasks(ApprovalFlow flow, String status, Integer enableReturn, ApprovalConfigPojo currentNode) {
// 更新已办和发起的节点状态 // 更新已办和发起的节点状态
bd.getBusinessDatabase() bd.getBusinessDatabase()
.eq("document_no", flow.getId()) .eq("document_no", flow.getId())
.update("current_processor", currentNode == null ? "" : currentNode.getAssignees())
.update("current_node", status) .update("current_node", status)
.doUpdate(CompletedTaskPojo.class); .doUpdate(CompletedTaskPojo.class);
bd.getBusinessDatabase() bd.getBusinessDatabase()
.eq("document_no", flow.getId()) .eq("document_no", flow.getId())
.update("current_node", status) .update("current_node", status)
.update("current_processor", currentNode == null ? "" : currentNode.getAssignees())
.update("enable_return", enableReturn) .update("enable_return", enableReturn)
.doUpdate(InitiatedTaskPojo.class); .doUpdate(InitiatedTaskPojo.class);
} }

View File

@ -339,6 +339,7 @@ public class DataEntryEngineModelServiceImpl implements DataEntryEngineModelServ
engineParamDetailPojo.setPartsName(parameter.getPartsName()); engineParamDetailPojo.setPartsName(parameter.getPartsName());
engineParamDetailPojo.setParameterName(parameter.getParameterName()); engineParamDetailPojo.setParameterName(parameter.getParameterName());
engineParamDetailPojo.setDepartment(parameter.getDepartment()); engineParamDetailPojo.setDepartment(parameter.getDepartment());
engineParamDetailPojo.setParameterSource(parameter.getParameterSource());
engineParamDetailPojo.setMajorVersion(newVersionNum); engineParamDetailPojo.setMajorVersion(newVersionNum);
engineParamDetailPojo.setVersionStatus(ParamValueVersionEnum.DRAFT.getCode()); engineParamDetailPojo.setVersionStatus(ParamValueVersionEnum.DRAFT.getCode());
engineParamDetailPojo.setCreatedBy(ObjectUtils.isNotEmpty(xdapUsersPojo) ? xdapUsersPojo.getId() : null); engineParamDetailPojo.setCreatedBy(ObjectUtils.isNotEmpty(xdapUsersPojo) ? xdapUsersPojo.getId() : null);
@ -472,7 +473,7 @@ public class DataEntryEngineModelServiceImpl implements DataEntryEngineModelServ
} }
sw.buildFromDatasource("xdap_app_223770822127386625") sw.buildFromDatasource("xdap_app_223770822127386625")
.eq("model_id", modelId) .eq("id", modelId)
.doDelete(DataEntryEngineModelPojo.class); .doDelete(DataEntryEngineModelPojo.class);
} }

View File

@ -344,6 +344,7 @@ public class EngineParamDetailServiceImpl implements EngineParamDetailService {
.eq("version_status", code) .eq("version_status", code)
.eq("subsystem_name", subsystem) .eq("subsystem_name", subsystem)
.eq("parts_name", type) .eq("parts_name", type)
.eq("parameter_source", "数据平台手工录入")
.doQuery(EngineParamDetailPojo.class)); .doQuery(EngineParamDetailPojo.class));
} else if (ObjectUtils.isNotEmpty(resId)) { } else if (ObjectUtils.isNotEmpty(resId)) {
//若传入责任人则查询责任人需要分发的参数 //若传入责任人则查询责任人需要分发的参数
@ -353,6 +354,7 @@ public class EngineParamDetailServiceImpl implements EngineParamDetailService {
.eq("version_status", code) .eq("version_status", code)
.eq("subsystem_name", subsystem) .eq("subsystem_name", subsystem)
.eq("parts_name", type) .eq("parts_name", type)
.eq("parameter_source", "数据平台手工录入")
.doQuery(EngineParamDetailPojo.class)); .doQuery(EngineParamDetailPojo.class));
} else { } else {
detailPojos.addAll(sw.buildFromDatasource("xdap_app_223770822127386625") detailPojos.addAll(sw.buildFromDatasource("xdap_app_223770822127386625")
@ -360,6 +362,7 @@ public class EngineParamDetailServiceImpl implements EngineParamDetailService {
.eq("version_status", code) .eq("version_status", code)
.eq("subsystem_name", subsystem) .eq("subsystem_name", subsystem)
.eq("parts_name", type) .eq("parts_name", type)
.eq("parameter_source", "数据平台手工录入")
.doQuery(EngineParamDetailPojo.class)); .doQuery(EngineParamDetailPojo.class));
// 加权限先注释 List<EngineParamDetailPojo> pojoList = sw.buildFromDatasource("xdap_app_223770822127386625") // 加权限先注释 List<EngineParamDetailPojo> pojoList = sw.buildFromDatasource("xdap_app_223770822127386625")
// .eq("engine_model_id", engineModelID) // .eq("engine_model_id", engineModelID)
@ -716,6 +719,53 @@ public class EngineParamDetailServiceImpl implements EngineParamDetailService {
.doQuery(TemplateAndParameter.class); .doQuery(TemplateAndParameter.class);
List<String> pIds = templateAndParameters.stream().map(x -> x.getParameterId()).collect(Collectors.toList()); List<String> pIds = templateAndParameters.stream().map(x -> x.getParameterId()).collect(Collectors.toList());
List<Parameter> parameterList = sw.buildFromDatasource("xdap_app_223770822127386625")
.in("id", pIds)
.doQuery(Parameter.class);
//不需要TC数据来源的参数
parameterList = parameterList.stream().filter(x -> {
if (ObjectUtils.isEmpty(x.getParameterSource())) {
return false;
}
return true;
}).collect(Collectors.toList());
if (ObjectUtils.isEmpty(parameterList)) {
return new ArrayList<>();
} else {
return parameterList;
}
}
@Override
public List<Parameter> selectNeedFillByNewVersion() {
//读取已通过审核的版本 DRAFT(草稿)APPROVING审批中COMPLETE(已完成)RETURNED(已撤回)REJECTED(已拒绝)
List<Template> templates =
sw.buildFromDatasource("xdap_app_223770822127386625")
.eq("status", "COMPLETE")
.doQuery(Template.class);
if (ObjectUtils.isEmpty(templates)) {
throw new RuntimeException("未找到未找到已发布的参数模板");
}
//查找每个模板最新版本
Map<String, Template> latestTemplateMap = templates.stream()
// 按模板ID分组
.collect(Collectors.groupingBy(
Template::getTemplateName,
// 每组内按版本号降序取第一个最新版本
Collectors.collectingAndThen(
Collectors.maxBy(Comparator.comparingInt(Template::getVersion)),
Optional::get
)
));
ArrayList<Template> templatesMax = new ArrayList<>(latestTemplateMap.values());
List<String> strings = templatesMax.stream().map(x -> x.getId()).collect(Collectors.toList());
//查找最新模板关联的参数
List<TemplateAndParameter> templateAndParameters =
sw.buildFromDatasource("xdap_app_223770822127386625")
.in("template_id", strings)
.doQuery(TemplateAndParameter.class);
List<String> pIds = templateAndParameters.stream().map(x -> x.getParameterId()).collect(Collectors.toList());
List<Parameter> parameterList = sw.buildFromDatasource("xdap_app_223770822127386625") List<Parameter> parameterList = sw.buildFromDatasource("xdap_app_223770822127386625")
.in("id", pIds) .in("id", pIds)
.doQuery(Parameter.class); .doQuery(Parameter.class);

View File

@ -11,6 +11,7 @@ import com.xdap.self_development.controller.request.AnalysisRequest;
import com.xdap.self_development.controller.request.AnalysisVerRequest; import com.xdap.self_development.controller.request.AnalysisVerRequest;
import com.xdap.self_development.controller.request.ModelComparisonExportRequest; import com.xdap.self_development.controller.request.ModelComparisonExportRequest;
import com.xdap.self_development.controller.request.ModelItem; import com.xdap.self_development.controller.request.ModelItem;
import com.xdap.self_development.exception.CommonException;
import com.xdap.self_development.pojo.*; import com.xdap.self_development.pojo.*;
import com.xdap.self_development.service.DataEntryEngineModelService; import com.xdap.self_development.service.DataEntryEngineModelService;
import com.xdap.self_development.service.EngineParamDetailService; import com.xdap.self_development.service.EngineParamDetailService;
@ -429,7 +430,7 @@ public class TcDataQueryServiceImpl implements TcDataQueryService {
log.error("导出失败用户ID为空"); log.error("导出失败用户ID为空");
throw new RuntimeException("导出失败用户ID不能为空"); throw new RuntimeException("导出失败用户ID不能为空");
} }
if (subsystemParts == null) { if (subsystemParts.isEmpty()) {
log.error("导出失败子系统部件列表为null"); log.error("导出失败子系统部件列表为null");
throw new RuntimeException("导出失败:子系统部件列表不能为空"); throw new RuntimeException("导出失败:子系统部件列表不能为空");
} }
@ -492,6 +493,7 @@ public class TcDataQueryServiceImpl implements TcDataQueryService {
List<EngineParamDetailPojo> allPojos = objectMapper.readValue(cachedData, List<EngineParamDetailPojo> allPojos = objectMapper.readValue(cachedData,
objectMapper.getTypeFactory().constructCollectionType(List.class, EngineParamDetailPojo.class)); objectMapper.getTypeFactory().constructCollectionType(List.class, EngineParamDetailPojo.class));
// 根据子系统部件筛选数据 // 根据子系统部件筛选数据
List<EngineParamDetailPojo> filteredPojos = allPojos.stream() List<EngineParamDetailPojo> filteredPojos = allPojos.stream()
.filter(pojo -> subsystemParts.stream().anyMatch(part -> { .filter(pojo -> subsystemParts.stream().anyMatch(part -> {
@ -500,6 +502,10 @@ public class TcDataQueryServiceImpl implements TcDataQueryService {
String subsystem = parts[0]; String subsystem = parts[0];
String partsName = parts[1]; String partsName = parts[1];
if (!request.getParameterIds().isEmpty()) {
return request.getParameterIds().contains(pojo.getParameterId());
}
// 如果部件名为"/"表示只匹配子系统 // 如果部件名为"/"表示只匹配子系统
if ("/".equals(partsName)) { if ("/".equals(partsName)) {
return subsystem.equals(pojo.getSubsystemName()); return subsystem.equals(pojo.getSubsystemName());
@ -533,7 +539,10 @@ public class TcDataQueryServiceImpl implements TcDataQueryService {
} }
} }
} catch (Exception e) { } catch (Exception e) {
String errorMsg = String.format("从Redis读取机型%s数据失败: %s", model.getModelId(), e.toString()); String errorMsg = null;
if (model != null) {
errorMsg = String.format("从Redis读取机型%s数据失败: %s", model.getModelId(), e.toString());
}
log.error(errorMsg, e); // 记录完整异常栈 log.error(errorMsg, e); // 记录完整异常栈
throw new RuntimeException(errorMsg, e); // 传递异常根因 throw new RuntimeException(errorMsg, e); // 传递异常根因
} }
@ -610,8 +619,8 @@ public class TcDataQueryServiceImpl implements TcDataQueryService {
DataEntryEngineModelPojo dataEntryEngineModelPojo = engineModelService.selectBymodelId(analysisRequest.getEngineModelID()); DataEntryEngineModelPojo dataEntryEngineModelPojo = engineModelService.selectBymodelId(analysisRequest.getEngineModelID());
// 预加载所有参数信息 // 预加载所有参数信息
Map<String, List<Parameter>> parameterMap = parameters.stream() // Map<String, List<Parameter>> parameterMap = parameters.stream()
.collect(Collectors.groupingBy(p -> p.getPartsName() + "&&" + p.getParameterName())); // .collect(Collectors.groupingBy(p -> p.getPartsName() + "&&" + p.getParameterName()));
//解析所有子系统-零部件对 //解析所有子系统-零部件对
List<Map.Entry<String, String>> subsystemPartsPairs = analysisRequest.getSubsystemParts().stream() List<Map.Entry<String, String>> subsystemPartsPairs = analysisRequest.getSubsystemParts().stream()
@ -633,6 +642,7 @@ public class TcDataQueryServiceImpl implements TcDataQueryService {
.eq("major_version", analysisRequest.getParameterVersion()) .eq("major_version", analysisRequest.getParameterVersion())
.eq("subsystem_name", subsystemPartsPair.getKey()) .eq("subsystem_name", subsystemPartsPair.getKey())
.eq("parts_name", subsystemPartsPair.getValue()) .eq("parts_name", subsystemPartsPair.getValue())
.ne("parameter_source", "TC分类表")
.doQuery(EngineParamDetailPojo.class); .doQuery(EngineParamDetailPojo.class);
if (ObjectUtils.isNotEmpty(pojoList)) { if (ObjectUtils.isNotEmpty(pojoList)) {
systemDataList.addAll(pojoList); systemDataList.addAll(pojoList);
@ -647,7 +657,20 @@ public class TcDataQueryServiceImpl implements TcDataQueryService {
// allPojos.addAll(filteredSystemData); // allPojos.addAll(filteredSystemData);
//批量查询所有TC数据 //批量查询所有TC数据
List<String> uniquePartsNames = subsystemPartsPairs.stream() Map<String, List<Parameter>> parameterMapTc = parameters.stream()
.filter(x-> Objects.equals(x.getParameterSource(), "TC分类表"))
.collect(Collectors.groupingBy(p -> p.getPartsName() + "&&" + p.getParameterName()));
List<Map.Entry<String, String>> subsystemPartsPairsTc = analysisRequest.getSubsystemParts().stream()
.map(subsystemType -> {
if (subsystemType.split("-").length != 2) {
throw new RuntimeException("查询条件异常,需子系统-零部件名称,若零部件为空则传入“/ ”");
}
String subsystem = subsystemType.split("-")[0];
String parts_name = subsystemType.split("-")[1];
return new AbstractMap.SimpleEntry<>(subsystem, parts_name);
})
.collect(Collectors.toList());
List<String> uniquePartsNames = subsystemPartsPairsTc.stream()
.map(Map.Entry::getValue) .map(Map.Entry::getValue)
.distinct() .distinct()
.collect(Collectors.toList()); .collect(Collectors.toList());
@ -680,7 +703,7 @@ public class TcDataQueryServiceImpl implements TcDataQueryService {
} }
// 处理每个子系统-零部件对 // 处理每个子系统-零部件对
for (Map.Entry<String, String> pair : subsystemPartsPairs) { for (Map.Entry<String, String> pair : subsystemPartsPairsTc) {
String subsystem = pair.getKey(); String subsystem = pair.getKey();
String partsName = pair.getValue(); String partsName = pair.getValue();
@ -698,15 +721,16 @@ public class TcDataQueryServiceImpl implements TcDataQueryService {
//批量处理分类属性 //批量处理分类属性
List<EngineParamDetailPojo> tcDataPojos = allAttributes.stream() List<EngineParamDetailPojo> tcDataPojos = allAttributes.stream()
.filter(attr -> parameterMap.containsKey(partsName + "&&" + attr.getIdattrtbutehame())) .filter(attr -> parameterMapTc.containsKey(partsName + "&&" + attr.getIdattrtbutehame()))
.map(attr -> { .map(attr -> {
Parameter param = parameterMap.get(partsName + "&&" + attr.getIdattrtbutehame()).get(0); Parameter param = parameterMapTc.get(partsName + "&&" + attr.getIdattrtbutehame()).get(0);
EngineParamDetailPojo pojo = new EngineParamDetailPojo(); EngineParamDetailPojo pojo = new EngineParamDetailPojo();
pojo.setEngineModelId(dataEntryEngineModelPojo.getId()); pojo.setEngineModelId(dataEntryEngineModelPojo.getId());
pojo.setPartsName(param.getPartsName()); pojo.setPartsName(param.getPartsName());
pojo.setSubsystemName(param.getSubsystemName()); pojo.setSubsystemName(param.getSubsystemName());
pojo.setParameterName(param.getParameterName()); pojo.setParameterName(param.getParameterName());
pojo.setParameterValue(attr.getFieldvalue()); pojo.setParameterValue(attr.getFieldvalue());
pojo.setParameterId(param.getId());
return pojo; return pojo;
}) })
.collect(Collectors.toList()); .collect(Collectors.toList());

View File

@ -489,7 +489,7 @@ public class TemplateApprovalServiceImpl implements TemplateApprovalService {
bd.getBusinessDatabase().doInsert(todoTask); bd.getBusinessDatabase().doInsert(todoTask);
} }
// 更新发起和已办 // 更新发起和已办
myself.updateTasks(flow, Objects.equals(status, "REJECTED") ? "已拒绝" : "已撤回", 0); myself.updateTasks(flow, Objects.equals(status, "REJECTED") ? "已拒绝" : "已撤回", 0, node);
} }
// 处理下一节点流转 // 处理下一节点流转
@ -530,7 +530,7 @@ public class TemplateApprovalServiceImpl implements TemplateApprovalService {
.update("published_time", Timestamp.valueOf(LocalDateTime.now())) .update("published_time", Timestamp.valueOf(LocalDateTime.now()))
.doUpdate(Template.class); .doUpdate(Template.class);
// 待办环节修改 // 待办环节修改
myself.updateTasks(flow, "已完成", 0); myself.updateTasks(flow, "已完成", 0, nextNode);
// 更新机型版本 // 更新机型版本
// dataEntryEngineModelService.updateModelForNewVersion(); // dataEntryEngineModelService.updateModelForNewVersion();
} else { } else {
@ -595,7 +595,7 @@ public class TemplateApprovalServiceImpl implements TemplateApprovalService {
} }
// 更新已办和发起的状态 // 更新已办和发起的状态
myself.updateTasks(flow, node.getNodeName(), enableReturn); myself.updateTasks(flow, node.getNodeName(), enableReturn, node);
if (!list.isEmpty()) { if (!list.isEmpty()) {
bd.getBusinessDatabase().doBatchInsert(list); bd.getBusinessDatabase().doBatchInsert(list);
@ -707,15 +707,84 @@ public class TemplateApprovalServiceImpl implements TemplateApprovalService {
.doUpdate(InitiatedTaskPojo.class); .doUpdate(InitiatedTaskPojo.class);
} }
public void updateTasks(ApprovalFlow flow, String status, Integer enableReturn) { @Override
public List<String> getEditableNodes(String flowId) {
ApprovalFlow flow = bd.getBusinessDatabase()
.eq("id", flowId)
.ne("flow_status", "COMPLETE")
.doQueryFirst(ApprovalFlow.class);
if (flow == null) {
throw new CommonException("流程不存在");
}
List<ApprovalConfigPojo> nodes = bd.getBusinessDatabase()
.eq("approval_id", flow.getId())
.gteq("node_order", flow.getCurrentNode())
.doQuery(ApprovalConfigPojo.class);
if (nodes.isEmpty()) {
return Collections.emptyList();
}
return nodes.stream().map(ApprovalConfigPojo::getNodeName).collect(Collectors.toList());
}
@Override
@Transactional(rollbackFor = Exception.class)
public void updateNode(UpdateNodeForm form) {
// 检查流程
ApprovalFlow flow = bd.getBusinessDatabase()
.eq("id", form.getFlowId())
.ne("flow_status", "COMPLETE")
.doQueryFirst(ApprovalFlow.class);
if (flow == null) {
throw new CommonException("流程不存在");
}
// 获取可更新流程节点名称
List<String> enableEditNodes = getEditableNodes(form.getFlowId());
// 将节点列表转换为 Map方便后续查找
Map<String, ApprovalNodeDTO> map = form.getNodeList().stream()
.collect(Collectors.toMap(
ApprovalNodeDTO::getNodeName,
node -> node,
(oldValue, newValue) -> oldValue
));
// 更新节点前先删除待办
bd.getBusinessDatabase()
.eq("document_no", form.getFlowId())
.eq("is_delete", 0)
.update("is_delete", 1)
.doUpdate(TodoTaskPojo.class);
// 遍历更新节点
enableEditNodes.forEach(nodeName -> {
if (map.containsKey(nodeName)) {
ApprovalNodeDTO nodeForm = map.get(nodeName);
bd.getBusinessDatabase()
.eq("approval_id", form.getFlowId())
.eq("node_order", nodeForm.getNodeOrder())
.eq("node_name", nodeForm.getNodeName())
.update("assignees", JSON.toJSONString(nodeForm.getAssignees()))
.doUpdate(ApprovalConfigPojo.class);
}
});
}
public void updateTasks(ApprovalFlow flow, String status, Integer enableReturn, ApprovalConfigPojo currentNode) {
// 更新已办和发起的节点状态 // 更新已办和发起的节点状态
bd.getBusinessDatabase() bd.getBusinessDatabase()
.eq("document_no", flow.getId()) .eq("document_no", flow.getId())
.update("current_processor", currentNode == null ? "" : currentNode.getAssignees())
.update("current_node", status) .update("current_node", status)
.doUpdate(CompletedTaskPojo.class); .doUpdate(CompletedTaskPojo.class);
bd.getBusinessDatabase() bd.getBusinessDatabase()
.eq("document_no", flow.getId()) .eq("document_no", flow.getId())
.update("current_node", status) .update("current_node", status)
.update("current_processor", currentNode == null ? "" : currentNode.getAssignees())
.update("enable_return", enableReturn) .update("enable_return", enableReturn)
.doUpdate(InitiatedTaskPojo.class); .doUpdate(InitiatedTaskPojo.class);
} }
@ -901,7 +970,7 @@ public class TemplateApprovalServiceImpl implements TemplateApprovalService {
nodeView.setTodoUserName(getUserNames(JSON.parseArray(node.getAssignees()).toJavaList(String.class))); nodeView.setTodoUserName(getUserNames(JSON.parseArray(node.getAssignees()).toJavaList(String.class)));
nodeView.setApprovalTime(reversedTime.get(0).getApprovalTime()); nodeView.setApprovalTime(reversedTime.get(0).getApprovalTime());
nodeView.setOpinions(records.stream().map(approvalRecord -> nodeView.setOpinions(records.stream().map(approvalRecord ->
getUserNames(Collections.singletonList(approvalRecord.getUserId())) + ":" + approvalRecord.getOpinion()).collect(Collectors.toList())); getUserNames(Collections.singletonList(approvalRecord.getUserId())) + ":" + (approvalRecord.getOpinion() == null ? "" : approvalRecord.getOpinion())).collect(Collectors.toList()));
} else { } else {
// 节点未完成 // 节点未完成
nodeView.setNodeOrder(node.getNodeOrder()); nodeView.setNodeOrder(node.getNodeOrder());

View File

@ -161,14 +161,14 @@ public class TodoTaskServiceImpl implements TodoTaskService {
public PageResultDTO<CompletedTaskPojo> selectByresPersonCompletedPage(TodoTaskRequest taskRequest) { public PageResultDTO<CompletedTaskPojo> selectByresPersonCompletedPage(TodoTaskRequest taskRequest) {
PageResultDTO<CompletedTaskPojo> pageResultDTO = new PageResultDTO<>(); PageResultDTO<CompletedTaskPojo> pageResultDTO = new PageResultDTO<>();
PageQueryResult<CompletedTaskPojo> queryResult = sw.buildFromDatasource("xdap_app_223770822127386625") List<CompletedTaskPojo> completedTaskPojos = sw.buildFromDatasource("xdap_app_223770822127386625")
.eq("owner_id", taskRequest.getPersonId()) .eq("owner_id", taskRequest.getPersonId())
.eq("is_delete", 0) .eq("is_delete", 0)
.orderBy("creation_date", "desc") .orderBy("creation_date", "desc")
.doPageQuery(taskRequest.getPage(), taskRequest.getSize(), CompletedTaskPojo.class); .doQuery(CompletedTaskPojo.class);
List<CompletedTaskPojo> tods = new ArrayList<>(); List<CompletedTaskPojo> tods = new ArrayList<>();
for (CompletedTaskPojo taskPojo : queryResult.getResult()) { for (CompletedTaskPojo taskPojo : completedTaskPojos) {
CompletedTaskPojo taskPojo1 = new CompletedTaskPojo(); CompletedTaskPojo taskPojo1 = new CompletedTaskPojo();
String currentProcessor = taskPojo.getCurrentProcessor(); String currentProcessor = taskPojo.getCurrentProcessor();
BeanUtils.copyProperties(taskPojo, taskPojo1); BeanUtils.copyProperties(taskPojo, taskPojo1);
@ -199,8 +199,14 @@ public class TodoTaskServiceImpl implements TodoTaskService {
.maxBy(Comparator.comparing(CompletedTaskPojo::getCreationDate)))) .maxBy(Comparator.comparing(CompletedTaskPojo::getCreationDate))))
.values()); .values());
collect.sort(Comparator.comparing(CompletedTaskPojo::getCreationDate).reversed()); collect.sort(Comparator.comparing(CompletedTaskPojo::getCreationDate).reversed());
pageResultDTO.setList(collect);
pageResultDTO.setTotalCount(queryResult.getCount()); // 分页
int fromIndex = (taskRequest.getPage() - 1) * taskRequest.getSize();
int toIndex = Math.min(fromIndex + taskRequest.getSize(), collect.size());
List<CompletedTaskPojo> paginatedList = collect.subList(fromIndex, toIndex);
pageResultDTO.setList(paginatedList);
pageResultDTO.setTotalCount(completedTaskPojos.size());
return pageResultDTO; return pageResultDTO;
} }