修改:新增报告附加草稿状态的流程,获取流程审批人附带流程信息
This commit is contained in:
parent
c45f9938e9
commit
0b704c9977
@ -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);
|
||||||
}
|
}
|
||||||
// 直送回退回的节点
|
// 直送回退回的节点
|
||||||
|
|||||||
@ -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);
|
||||||
}
|
}
|
||||||
|
|
||||||
|
|||||||
@ -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;
|
|
||||||
}
|
}
|
||||||
|
|||||||
@ -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;
|
||||||
|
|||||||
@ -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;
|
||||||
}
|
}
|
||||||
|
|||||||
@ -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;
|
||||||
|
}
|
||||||
@ -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 {
|
||||||
|
|||||||
@ -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);
|
||||||
|
|
||||||
|
|||||||
@ -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);
|
||||||
}
|
}
|
||||||
|
|||||||
@ -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
|
||||||
|
|||||||
@ -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()
|
||||||
|
|||||||
@ -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
|
||||||
|
|||||||
Loading…
x
Reference in New Issue
Block a user