修改:新增报告附加草稿状态的流程,获取流程审批人附带流程信息

This commit is contained in:
zjh 2026-01-12 10:24:01 +08:00
parent c45f9938e9
commit 0b704c9977
12 changed files with 236 additions and 154 deletions

View File

@ -93,7 +93,7 @@ public class ActivitiProcessController {
public Response getApprovalUsers( public Response getApprovalUsers(
@NotBlank @RequestParam String templateId @NotBlank @RequestParam String templateId
) { ) {
List<ApprovalUserNodeDTO> nodes = activitiProcessService.getApprovalUsers(templateId); ApprovalNodesDTO nodes = activitiProcessService.getApprovalUsers(templateId);
return Response.ok().data(nodes); return Response.ok().data(nodes);
} }
// 直送回退回的节点 // 直送回退回的节点

View File

@ -6,6 +6,7 @@ import com.xdap.runtime.service.RuntimeDatasourceService;
import com.xdap.self_development.controller.form.*; import com.xdap.self_development.controller.form.*;
import com.xdap.self_development.exception.CommonException; import com.xdap.self_development.exception.CommonException;
import com.xdap.self_development.pojo.dto.ApprovalNodeDTO; import com.xdap.self_development.pojo.dto.ApprovalNodeDTO;
import com.xdap.self_development.pojo.dto.ApprovalNodesDTO;
import com.xdap.self_development.pojo.view.ApprovalFlowNodeView; import com.xdap.self_development.pojo.view.ApprovalFlowNodeView;
import com.xdap.self_development.pojo.view.DepartmentUserView; import com.xdap.self_development.pojo.view.DepartmentUserView;
import com.xdap.self_development.pojo.view.TemplateChangeView; import com.xdap.self_development.pojo.view.TemplateChangeView;
@ -40,7 +41,7 @@ public class TemplateApprovalController {
public Response getApprovalUsers( public Response getApprovalUsers(
@NotBlank @RequestParam String templateId @NotBlank @RequestParam String templateId
) { ) {
List<ApprovalUserNodeDTO> nodes = templateApprovalService.getApprovalUsers(templateId); ApprovalNodesDTO nodes = templateApprovalService.getApprovalUsers(templateId);
return Response.ok().data(nodes); return Response.ok().data(nodes);
} }

View File

@ -9,15 +9,12 @@ import java.util.List;
@Data @Data
public class ApprovalPersonForm { public class ApprovalPersonForm {
@NotEmpty(message = "创建者不能为空") @NotBlank(message = "创建者不能为空")
private String userId; private String userId;
@NotEmpty(message = "报告不能为空") @NotBlank(message = "报告不能为空")
private String reportId; private String reportId;
@NotBlank(message = "流程标题不能为空")
private String processTitle; @NotBlank(message = "流程不能为空")
// 审批环节配置列表 private String flowId;
@NotEmpty(message = "环节不能为空")
private List<ApprovalNodeDTO> nodeList;
private String explanation;
} }

View File

@ -1,8 +1,11 @@
package com.xdap.self_development.controller.form; package com.xdap.self_development.controller.form;
import com.xdap.self_development.pojo.dto.ApprovalNodeDTO;
import lombok.Data; import lombok.Data;
import javax.validation.constraints.NotBlank; import javax.validation.constraints.NotBlank;
import javax.validation.constraints.NotEmpty;
import java.util.List;
@Data @Data
public class SaveBenchmarkingReportForm { public class SaveBenchmarkingReportForm {
@ -24,6 +27,13 @@ public class SaveBenchmarkingReportForm {
private String subsystem; private String subsystem;
private String partsName; private String partsName;
@NotBlank(message = "流程标题不能为空")
private String processTitle;
// 审批环节配置列表
@NotEmpty(message = "环节不能为空")
private List<ApprovalNodeDTO> nodeList;
private String explanation;
@NotBlank(message = "发起人不能为空") @NotBlank(message = "发起人不能为空")
private String userId; private String userId;
private String fileUrl; private String fileUrl;

View File

@ -1,13 +1,18 @@
package com.xdap.self_development.controller.form; package com.xdap.self_development.controller.form;
import com.xdap.self_development.pojo.dto.ApprovalNodeDTO;
import lombok.Data; import lombok.Data;
import javax.validation.constraints.NotBlank; import javax.validation.constraints.NotBlank;
import javax.validation.constraints.NotEmpty;
import java.util.List;
@Data @Data
public class UpdateBenchmarkingReportForm { public class UpdateBenchmarkingReportForm {
@NotBlank(message = "原对标报告不能为空") @NotBlank(message = "原对标报告不能为空")
private String reportId; private String reportId;
@NotBlank(message = "流程不能为空")
private String flowId;
private String title; private String title;
private String manufacturerName; private String manufacturerName;
@ -25,9 +30,14 @@ public class UpdateBenchmarkingReportForm {
private String subsystem; private String subsystem;
private String partsName; private String partsName;
private String fileUrl; private String fileUrl;
@NotBlank(message = "流程标题不能为空")
private String processTitle;
@NotEmpty(message = "流程节点不能为空")
private List<ApprovalNodeDTO> nodeList;
private String explanation;
@NotBlank(message = "发起人不能为空") @NotBlank(message = "发起人不能为空")
private String userId; private String userId;
} }

View File

@ -0,0 +1,13 @@
package com.xdap.self_development.pojo.dto;
import com.xdap.self_development.controller.form.ApprovalUserNodeDTO;
import lombok.Data;
import java.util.List;
@Data
public class ApprovalNodesDTO {
private String processTitle;
private List<ApprovalUserNodeDTO> nodeList;
private String explanation;
}

View File

@ -12,7 +12,7 @@ import java.util.List;
// CASE af.flow_status WHEN 'COMPLETE' THEN 1 WHEN 'APPROVING' THEN 2 WHEN 'DRAFT' THEN 3 WHEN 'REJECTED' THEN 4 ELSE 5 END ASC, // CASE af.flow_status WHEN 'COMPLETE' THEN 1 WHEN 'APPROVING' THEN 2 WHEN 'DRAFT' THEN 3 WHEN 'REJECTED' THEN 4 ELSE 5 END ASC,
@SQLQuery(value = { @SQLQuery(value = {
@SQL(view = "getAllReportApprovalList", @SQL(view = "getAllReportApprovalList",
sql = "WITH RankedFlows AS (SELECT af.id AS flowId, r.id AS reportId, af.process_title AS title, af.flow_status AS status, af.create_by AS createBy, xu.username AS username, af.created_time AS createdTime, ac.assignees AS current_users, ROW_NUMBER() OVER (PARTITION BY af.template_id ORDER BY af.created_time DESC) AS rn FROM yfsjglpt_model_approval_flow af LEFT JOIN approval_config ac ON af.id = ac.approval_id AND af.current_node = ac.node_order LEFT JOIN yfsjglpt_model_benchmarking_report r ON af.template_id = r.id LEFT JOIN xdap_users xu ON xu.id = af.create_by WHERE af.flow_type = 2) SELECT flowId, reportId, title, status, createBy, username, createdTime, current_users FROM RankedFlows WHERE rn = 1 AND title LIKE CONCAT('%', #title, '%') AND status LIKE CONCAT('%', #status, '%') AND createdTime LIKE CONCAT('%', #createdTime, '%') AND username LIKE CONCAT('%', #username, '%') ORDER BY createdTime DESC") sql = "WITH RankedFlows AS (SELECT af.id AS flowId, r.id AS reportId, af.process_title AS title, af.flow_status AS status, af.create_by AS createBy, xu.username AS username, af.created_time AS createdTime, ac.assignees AS current_users, ROW_NUMBER() OVER (PARTITION BY af.template_id ORDER BY af.created_time DESC) AS rn FROM yfsjglpt_model_approval_flow af LEFT JOIN approval_config ac ON af.id = ac.approval_id AND af.current_node = ac.node_order LEFT JOIN yfsjglpt_model_benchmarking_report r ON af.template_id = r.id LEFT JOIN xdap_users xu ON xu.id = af.create_by WHERE af.flow_type = 2 and af.flow_status <> 'DRAFT') SELECT flowId, reportId, title, status, createBy, username, createdTime, current_users FROM RankedFlows WHERE rn = 1 AND title LIKE CONCAT('%', #title, '%') AND status LIKE CONCAT('%', #status, '%') AND createdTime LIKE CONCAT('%', #createdTime, '%') AND username LIKE CONCAT('%', #username, '%') ORDER BY createdTime DESC")
}) })
@Data @Data
public class TodoAndReportListView { public class TodoAndReportListView {

View File

@ -8,10 +8,7 @@ import com.xdap.self_development.controller.request.ApprovalByPlatformRequest;
import com.xdap.self_development.controller.request.ApprovalNodeRequest; import com.xdap.self_development.controller.request.ApprovalNodeRequest;
import com.xdap.self_development.enums.ParamValueVersionEnum; import com.xdap.self_development.enums.ParamValueVersionEnum;
import com.xdap.self_development.pojo.*; import com.xdap.self_development.pojo.*;
import com.xdap.self_development.pojo.dto.ActivitiDataAndRecordDTO; import com.xdap.self_development.pojo.dto.*;
import com.xdap.self_development.pojo.dto.ActivitiDataDTO;
import com.xdap.self_development.pojo.dto.HandleApprovalDTO;
import com.xdap.self_development.pojo.dto.ShowActivitiDTO;
import javax.validation.Valid; import javax.validation.Valid;
import javax.validation.constraints.NotBlank; import javax.validation.constraints.NotBlank;
@ -31,7 +28,7 @@ public interface ActivitiProcessService {
boolean getIsDirect(String flowId); boolean getIsDirect(String flowId);
List<ApprovalUserNodeDTO> getApprovalUsers(@NotBlank String flowId); ApprovalNodesDTO getApprovalUsers(@NotBlank String flowId);
void directSendingApproval(@NotBlank String templateId, @NotBlank String userId); void directSendingApproval(@NotBlank String templateId, @NotBlank String userId);

View File

@ -7,6 +7,7 @@ import com.xdap.self_development.pojo.ApprovalFlow;
import com.xdap.self_development.pojo.ApprovalRecord; import com.xdap.self_development.pojo.ApprovalRecord;
import com.xdap.self_development.pojo.Template; import com.xdap.self_development.pojo.Template;
import com.xdap.self_development.pojo.dto.ApprovalNodeDTO; import com.xdap.self_development.pojo.dto.ApprovalNodeDTO;
import com.xdap.self_development.pojo.dto.ApprovalNodesDTO;
import com.xdap.self_development.pojo.view.ApprovalFlowNodeView; import com.xdap.self_development.pojo.view.ApprovalFlowNodeView;
import com.xdap.self_development.pojo.view.TemplateChangeView; import com.xdap.self_development.pojo.view.TemplateChangeView;
import com.xdap.self_development.pojo.view.TodoAndTemplateView; import com.xdap.self_development.pojo.view.TodoAndTemplateView;
@ -48,7 +49,7 @@ public interface TemplateApprovalService {
List<String> getReturnNodes(@NotBlank String flowId); List<String> getReturnNodes(@NotBlank String flowId);
List<ApprovalUserNodeDTO> getApprovalUsers(@NotBlank String templateId); ApprovalNodesDTO getApprovalUsers(@NotBlank String templateId);
boolean getIsDirect(String flowId); boolean getIsDirect(String flowId);
} }

View File

@ -682,7 +682,10 @@ public class ActivitiProcessServiceImpl implements ActivitiProcessService {
} }
@Override @Override
public List<ApprovalUserNodeDTO> getApprovalUsers(String flowId) { public ApprovalNodesDTO getApprovalUsers(String flowId) {
ApprovalNodesDTO nodes = new ApprovalNodesDTO();
nodes.setProcessTitle("");
nodes.setExplanation("");
List<ApprovalUserNodeDTO> list = new ArrayList<>(); List<ApprovalUserNodeDTO> list = new ArrayList<>();
// 获取到模板最近一次未完成的流程 // 获取到模板最近一次未完成的流程
@ -690,7 +693,8 @@ public class ActivitiProcessServiceImpl implements ActivitiProcessService {
.eq("id", flowId) .eq("id", flowId)
.doQueryFirst(EngineReviewListPojo.class); .doQueryFirst(EngineReviewListPojo.class);
if (flow == null) { if (flow == null) {
return list; nodes.setNodeList(list);
return nodes;
} }
// 获取流程节点 // 获取流程节点
@ -710,7 +714,10 @@ public class ActivitiProcessServiceImpl implements ActivitiProcessService {
); );
list.add(dto); list.add(dto);
}); });
return list; nodes.setProcessTitle(flow.getProcessTopic());
nodes.setExplanation(flow.getReviewComment());
nodes.setNodeList(list);
return nodes;
} }
@Override @Override

View File

@ -58,6 +58,158 @@ public class BenchmarkingReportServiceImpl implements BenchmarkingReportService
private static final String FLOW_LOCK_PREFIX = "report:lock:"; private static final String FLOW_LOCK_PREFIX = "report:lock:";
private static final int FLOW_LOCK_EXPIRE_SECONDS = 5; private static final int FLOW_LOCK_EXPIRE_SECONDS = 5;
@Override
@Transactional(rollbackFor = Exception.class)
public void insertReport(SaveBenchmarkingReportForm form) {
// 创建报告
BenchmarkingReport report = new BenchmarkingReport();
BeanUtils.copyProperties(form, report);
report.setFilePath(form.getFileUrl() == null ? "" : form.getFileUrl());
report.setUploadTime(Timestamp.valueOf(LocalDateTime.now()));
// 草稿状态
report.setStatus("DRAFT");
report.setCreateBy(form.getUserId());
report.setIsDelete(0);
report.setReturnNum(0);
report.setFileName(form.getFileName());
bd.getBusinessDatabase().doInsert(report);
// 新增流程
ApprovalFlow flow = new ApprovalFlow();
flow.setTemplateId(report.getId());
flow.setCurrentNode(1);
flow.setFlowStatus("DRAFT");
flow.setProcessTitle(form.getProcessTitle());
flow.setCreateBy(form.getUserId());
flow.setCreatedTime(Timestamp.valueOf(LocalDateTime.now()));
flow.setFlowType(2); // 设置为报告审批流程
flow.setExplanation(form.getExplanation());
flow.setReturnNum(0);
flow.setPreNode(-1);
bd.getBusinessDatabase().doInsert(flow);
// 创建审批配置
List<ApprovalConfigPojo> approvalConfigs = new ArrayList<>();
for (ApprovalNodeDTO node : form.getNodeList()) {
ApprovalConfigPojo config = new ApprovalConfigPojo();
config.setNodeName(node.getNodeName());
config.setNodeOrder(node.getNodeOrder());
config.setAssignees(JSON.toJSONString(node.getAssignees()));
config.setApprovalId(flow.getId());
approvalConfigs.add(config);
}
bd.getBusinessDatabase().doBatchInsert(approvalConfigs);
}
@Override
public void updateReport(UpdateBenchmarkingReportForm form) {
// 验证报告
BenchmarkingReport report = bd.getBusinessDatabase()
.eq("id", form.getReportId())
.doQueryFirst(BenchmarkingReport.class);
if (!"DRAFT".equals(report.getStatus()) && !"REJECTED".equals(report.getStatus())) {
throw new CommonException("报告非草稿或拒绝状态不可修改");
}
if (!Objects.equals(report.getCreateBy(), form.getUserId())) {
throw new CommonException("非创建者不能修改");
}
// 修改报告
BeanUtils.copyProperties(form, report);
report.setFilePath(form.getFileUrl() == null ? "" : form.getFileUrl());
report.setUploadTime(Timestamp.valueOf(LocalDateTime.now()));
report.setStatus("DRAFT");
bd.getBusinessDatabase()
.eq("id", report.getId())
.doUpdate(report);
// 修改流程
ApprovalFlow flow = bd.getBusinessDatabase()
.eq("id", form.getFlowId())
.doQueryFirst(ApprovalFlow.class);
flow.setExplanation(form.getExplanation());
flow.setProcessTitle(form.getProcessTitle());
bd.getBusinessDatabase()
.eq("id", flow.getId())
.update("explanation", flow.getExplanation())
.update("process_title", flow.getProcessTitle())
.doUpdate(ApprovalFlow.class);
// 修改流程节点
List<String> ids = bd.getBusinessDatabase()
.eq("approval_id", flow.getId())
.orderBy("node_order", "asc")
.doQuery(ApprovalConfigPojo.class)
.stream().map(ApprovalConfigPojo::getId)
.collect(Collectors.toList());
bd.getBusinessDatabase()
.in("ids", ids)
.doDelete(ApprovalConfigPojo.class);
List<ApprovalConfigPojo> approvalConfigs = new ArrayList<>();
for (ApprovalNodeDTO node : form.getNodeList()) {
ApprovalConfigPojo config = new ApprovalConfigPojo();
config.setNodeName(node.getNodeName());
config.setNodeOrder(node.getNodeOrder());
config.setAssignees(JSON.toJSONString(node.getAssignees()));
config.setApprovalId(flow.getId());
approvalConfigs.add(config);
}
bd.getBusinessDatabase().doBatchInsert(approvalConfigs);
}
@Override
@Transactional(rollbackFor = Exception.class)
public void deleteReport(String reportId) {
BenchmarkingReport report = bd.getBusinessDatabase()
.eq("id", reportId)
.doQueryFirst(BenchmarkingReport.class);
if (report == null) {
throw new CommonException("该报告不存在");
}
ApprovalFlow flow = bd.getBusinessDatabase()
.eq("template_id", reportId)
.ne("pre_node", -1)
.eq("flow_status", "APPROVING")
.orderBy("created_time", "desc")
.doQueryFirst(ApprovalFlow.class);
if (flow != null) {
throw new CommonException("该报告正在审批中");
}
bd.getBusinessDatabase()
.eq("id", reportId)
.update("is_delete", 1)
.doUpdate(BenchmarkingReport.class);
}
@Override
public String uploadFile(MultipartFile file, String userId) {
String currentTenantId = runtimeAppContextService.getCurrentTenantId();
AppTokenDTO token = apaasMyTokenFeign.getAppToken(
"client_credentials",
clientId,
clientSecret
);
UserTokenDT0 userToken = apaasMyTokenFeign.getUserToken(
token.getAccess_token(),
userId
);
String uploadId = new ObjectId().toHexString();
FileUploadDTO fileUploadDTO = apaasMyTokenFeign.uploadFile(
"Bearer " + userToken.getAccess_token(),
"application/x-www-form-urlencoded",
file,
uploadId,
currentTenantId,
userId
);
Map<String, String> map = new HashMap<>();
map.put("xdaptenantid", currentTenantId);
cn.hutool.json.JSON json = JSONUtil.parse(map);
String tokenXdap = Base64.encode(json.toString());
return fileUploadDTO.getData().getUrl() +"&download=download&token=" + tokenXdap;
}
@Override @Override
@Transactional(rollbackFor = Exception.class) @Transactional(rollbackFor = Exception.class)
public void startReportApproval(ApprovalPersonForm form) { public void startReportApproval(ApprovalPersonForm form) {
@ -70,59 +222,34 @@ public class BenchmarkingReportServiceImpl implements BenchmarkingReportService
} }
ApprovalFlow approvalFlow = bd.getBusinessDatabase() ApprovalFlow approvalFlow = bd.getBusinessDatabase()
.eq("template_id", report.getId()) .eq("id", form.getFlowId())
.doQueryFirst(ApprovalFlow.class); .doQueryFirst(ApprovalFlow.class);
if (approvalFlow != null && Objects.equals(approvalFlow.getFlowStatus(), "APPROVING")) { if (approvalFlow == null || Objects.equals(approvalFlow.getFlowStatus(), "APPROVING")) {
throw new CommonException("该报告正在审批中,请勿重复发起审批"); throw new CommonException("该报告正在审批中");
} }
// 新增流程 // 获取首个节点
ApprovalFlow flow = new ApprovalFlow(); ApprovalConfigPojo firstNode = bd.getBusinessDatabase()
flow.setTemplateId(report.getId()); .eq("approval_id", approvalFlow.getId())
flow.setCurrentNode(1); .eq("node_order", 1)
flow.setFlowStatus("APPROVING"); .doQueryFirst(ApprovalConfigPojo.class);
flow.setProcessTitle(form.getProcessTitle());
flow.setCreateBy(form.getUserId());
flow.setCreatedTime(Timestamp.valueOf(LocalDateTime.now()));
flow.setFlowType(2); // 设置为报告审批流程
flow.setExplanation(form.getExplanation());
flow.setReturnNum(0);
flow.setPreNode(-1);
bd.getBusinessDatabase().doInsert(flow);
// 创建审批配置
List<ApprovalConfigPojo> approvalConfigs = new ArrayList<>();
ApprovalNodeDTO firstNode = new ApprovalNodeDTO();
for (ApprovalNodeDTO node : form.getNodeList()) {
if (node.getNodeOrder() == 1) {
firstNode.setNodeOrder(1);
firstNode.setAssignees(node.getAssignees());
firstNode.setNodeName(node.getNodeName());
}
ApprovalConfigPojo config = new ApprovalConfigPojo();
config.setNodeName(node.getNodeName());
config.setNodeOrder(node.getNodeOrder());
config.setAssignees(JSON.toJSONString(node.getAssignees()));
config.setApprovalId(flow.getId());
approvalConfigs.add(config);
}
bd.getBusinessDatabase().doBatchInsert(approvalConfigs);
// 新增我的待办 // 新增我的待办
List<TodoTaskPojo> list = new ArrayList<>(); List<TodoTaskPojo> list = new ArrayList<>();
for (String person : firstNode.getAssignees()) { for (String person : JSON.parseArray(firstNode.getAssignees()).toJavaList(String.class)) {
TodoTaskPojo todoTask = new TodoTaskPojo(); TodoTaskPojo todoTask = new TodoTaskPojo();
todoTask.setCreatedById(form.getUserId()); todoTask.setCreatedById(form.getUserId());
todoTask.setCreatedBy(xdapDeptUsersService.selectUserByID(form.getUserId()).getUsername()); todoTask.setCreatedBy(xdapDeptUsersService.selectUserByID(form.getUserId()).getUsername());
todoTask.setCurrentNode(firstNode.getNodeName()); todoTask.setCurrentNode(firstNode.getNodeName());
todoTask.setDataType("对标报告审核"); todoTask.setDataType("对标报告审核");
todoTask.setDocumentNo(flow.getId()); todoTask.setDocumentNo(approvalFlow.getId());
todoTask.setCreationDate(Timestamp.valueOf(LocalDateTime.now())); todoTask.setCreationDate(Timestamp.valueOf(LocalDateTime.now()));
todoTask.setIsDelete(0); todoTask.setIsDelete(0);
todoTask.setModelId(report.getId()); todoTask.setModelId(report.getId());
todoTask.setModelName(report.getProjectName() + "对标报告"); todoTask.setModelName(report.getProjectName() + "对标报告");
todoTask.setProcessTitle(form.getProcessTitle()); todoTask.setProcessTitle(approvalFlow.getProcessTitle());
todoTask.setStatusCode(flow.getFlowStatus()); todoTask.setStatusCode(approvalFlow.getFlowStatus());
todoTask.setVersionNumber(1); todoTask.setVersionNumber(1);
todoTask.setOwnerId(person); todoTask.setOwnerId(person);
todoTask.setCurrentProcessor(JSON.toJSONString(firstNode.getAssignees())); todoTask.setCurrentProcessor(JSON.toJSONString(firstNode.getAssignees()));
@ -132,23 +259,23 @@ public class BenchmarkingReportServiceImpl implements BenchmarkingReportService
// 新增我创建的 // 新增我创建的
InitiatedTaskPojo initiatedTask = new InitiatedTaskPojo(); InitiatedTaskPojo initiatedTask = new InitiatedTaskPojo();
initiatedTask.setDocumentNo(flow.getId()); initiatedTask.setDocumentNo(approvalFlow.getId());
initiatedTask.setCreatedById(form.getUserId()); initiatedTask.setCreatedById(form.getUserId());
initiatedTask.setCreatedBy(xdapDeptUsersService.selectUserByID(form.getUserId()).getUsername()); initiatedTask.setCreatedBy(xdapDeptUsersService.selectUserByID(form.getUserId()).getUsername());
initiatedTask.setCurrentNode(firstNode.getNodeName()); initiatedTask.setCurrentNode(firstNode.getNodeName());
initiatedTask.setCurrentProcessor(JSON.toJSONString(firstNode.getAssignees())); initiatedTask.setCurrentProcessor(JSON.toJSONString(firstNode.getAssignees()));
initiatedTask.setDataType("对标报告审核"); initiatedTask.setDataType("对标报告审核");
initiatedTask.setProcessTitle(form.getProcessTitle()); initiatedTask.setProcessTitle(approvalFlow.getProcessTitle());
initiatedTask.setCreationDate(Timestamp.valueOf(LocalDateTime.now())); initiatedTask.setCreationDate(Timestamp.valueOf(LocalDateTime.now()));
initiatedTask.setIsDelete(0); initiatedTask.setIsDelete(0);
initiatedTask.setModelId(flow.getTemplateId()); initiatedTask.setModelId(approvalFlow.getTemplateId());
initiatedTask.setEnableReturn(1); initiatedTask.setEnableReturn(1);
bd.getBusinessDatabase().doInsert(initiatedTask); bd.getBusinessDatabase().doInsert(initiatedTask);
// 新增发起记录 // 新增发起记录
bd.getBusinessDatabase().doInsert( bd.getBusinessDatabase().doInsert(
new ApprovalRecord( new ApprovalRecord(
flow.getId(), approvalFlow.getId(),
"发起审批", "发起审批",
xdapDeptUsersService.selectUserByID(form.getUserId()).getUsername(), xdapDeptUsersService.selectUserByID(form.getUserId()).getUsername(),
"发起审批", "发起审批",
@ -397,60 +524,6 @@ public class BenchmarkingReportServiceImpl implements BenchmarkingReportService
} }
} }
@Override
@Transactional(rollbackFor = Exception.class)
public void deleteReport(String reportId) {
BenchmarkingReport report = bd.getBusinessDatabase()
.eq("id", reportId)
.doQueryFirst(BenchmarkingReport.class);
if (report == null) {
throw new CommonException("该报告不存在");
}
ApprovalFlow flow = bd.getBusinessDatabase()
.eq("template_id", reportId)
.ne("pre_node", -1)
.eq("flow_status", "APPROVING")
.orderBy("created_time", "desc")
.doQueryFirst(ApprovalFlow.class);
if (flow != null) {
throw new CommonException("该报告正在审批中");
}
bd.getBusinessDatabase()
.eq("id", reportId)
.update("is_delete", 1)
.doUpdate(BenchmarkingReport.class);
}
@Override
public String uploadFile(MultipartFile file, String userId) {
String currentTenantId = runtimeAppContextService.getCurrentTenantId();
AppTokenDTO token = apaasMyTokenFeign.getAppToken(
"client_credentials",
clientId,
clientSecret
);
UserTokenDT0 userToken = apaasMyTokenFeign.getUserToken(
token.getAccess_token(),
userId
);
String uploadId = new ObjectId().toHexString();
FileUploadDTO fileUploadDTO = apaasMyTokenFeign.uploadFile(
"Bearer " + userToken.getAccess_token(),
"application/x-www-form-urlencoded",
file,
uploadId,
currentTenantId,
userId
);
Map<String, String> map = new HashMap<>();
map.put("xdaptenantid", currentTenantId);
cn.hutool.json.JSON json = JSONUtil.parse(map);
String tokenXdap = Base64.encode(json.toString());
return fileUploadDTO.getData().getUrl() +"&download=download&token=" + tokenXdap;
}
@Override @Override
public PageQueryResult<TodoAndReportListView> getApprovalList(ApprovalListForm form) { public PageQueryResult<TodoAndReportListView> getApprovalList(ApprovalListForm form) {
PageQueryResult<TodoAndReportListView> result = bd.getBusinessDatabase() PageQueryResult<TodoAndReportListView> result = bd.getBusinessDatabase()
@ -503,41 +576,6 @@ public class BenchmarkingReportServiceImpl implements BenchmarkingReportService
return result; return result;
} }
@Override
public void insertReport(SaveBenchmarkingReportForm form) {
BenchmarkingReport report = new BenchmarkingReport();
BeanUtils.copyProperties(form, report);
report.setFilePath(form.getFileUrl() == null ? "" : form.getFileUrl());
report.setUploadTime(Timestamp.valueOf(LocalDateTime.now()));
// 草稿状态
report.setStatus("DRAFT");
report.setCreateBy(form.getUserId());
report.setIsDelete(0);
report.setReturnNum(0);
report.setFileName(form.getFileName());
bd.getBusinessDatabase().doInsert(report);
}
@Override
public void updateReport(UpdateBenchmarkingReportForm form) {
BenchmarkingReport report = bd.getBusinessDatabase()
.eq("id", form.getReportId())
.doQueryFirst(BenchmarkingReport.class);
if (!"DRAFT".equals(report.getStatus()) && !"REJECTED".equals(report.getStatus())) {
throw new CommonException("报告非草稿或拒绝状态不可修改");
}
if (!Objects.equals(report.getCreateBy(), form.getUserId())) {
throw new CommonException("非创建者不能修改");
}
BeanUtils.copyProperties(form, report);
report.setFilePath(form.getFileUrl() == null ? "" : form.getFileUrl());
report.setUploadTime(Timestamp.valueOf(LocalDateTime.now()));
report.setStatus("DRAFT");
bd.getBusinessDatabase()
.eq("id", report.getId())
.doUpdate(report);
}
private void setCurrentApprovers(PageQueryResult<TodoAndReportView> result) { private void setCurrentApprovers(PageQueryResult<TodoAndReportView> result) {
result.getResult().forEach(item -> { result.getResult().forEach(item -> {
ApprovalXdapUsers approvalXdapUser = bd.getBusinessDatabase() ApprovalXdapUsers approvalXdapUser = bd.getBusinessDatabase()

View File

@ -8,6 +8,7 @@ import com.xdap.self_development.controller.form.*;
import com.xdap.self_development.exception.CommonException; import com.xdap.self_development.exception.CommonException;
import com.xdap.self_development.pojo.*; import com.xdap.self_development.pojo.*;
import com.xdap.self_development.pojo.dto.ApprovalNodeDTO; import com.xdap.self_development.pojo.dto.ApprovalNodeDTO;
import com.xdap.self_development.pojo.dto.ApprovalNodesDTO;
import com.xdap.self_development.pojo.view.ApprovalFlowNodeView; import com.xdap.self_development.pojo.view.ApprovalFlowNodeView;
import com.xdap.self_development.pojo.view.FlowNode; import com.xdap.self_development.pojo.view.FlowNode;
import com.xdap.self_development.pojo.view.TemplateChangeView; import com.xdap.self_development.pojo.view.TemplateChangeView;
@ -603,7 +604,10 @@ public class TemplateApprovalServiceImpl implements TemplateApprovalService {
} }
@Override @Override
public List<ApprovalUserNodeDTO> getApprovalUsers(String templateId) { public ApprovalNodesDTO getApprovalUsers(String templateId) {
ApprovalNodesDTO nodes = new ApprovalNodesDTO();
nodes.setProcessTitle("");
nodes.setExplanation("");
List<ApprovalUserNodeDTO> list = new ArrayList<>(); List<ApprovalUserNodeDTO> list = new ArrayList<>();
// 获取到模板最近一次未完成的流程 // 获取到模板最近一次未完成的流程
@ -614,7 +618,8 @@ public class TemplateApprovalServiceImpl implements TemplateApprovalService {
.orderBy("created_time", "desc") .orderBy("created_time", "desc")
.doQueryFirst(ApprovalFlow.class); .doQueryFirst(ApprovalFlow.class);
if (flow == null) { if (flow == null) {
return list; nodes.setNodeList(list);
return nodes;
} }
// 获取流程节点 // 获取流程节点
@ -634,7 +639,10 @@ public class TemplateApprovalServiceImpl implements TemplateApprovalService {
); );
list.add(dto); list.add(dto);
}); });
return list; nodes.setProcessTitle(flow.getProcessTitle());
nodes.setExplanation(flow.getExplanation());
nodes.setNodeList(list);
return nodes;
} }
@Override @Override