mirror of
http://git.pig4cloud.com/pig/pigx.git
synced 2026-11-08 12:39:05 +08:00
feat(pigx-flow-biz): 新增流程打印模板功能
- 在 Process 实体类中新增 printTemplate 字段,用于存储 HTML 格式的打印模板 - 新增数据库表字段 print_template,支持流程定义的打印模板存储 - 在 ProcessController 中新增获取和保存打印模板的 REST API 接口 - 在 ProcessInstanceRecordVo 中新增 hasPrintTemplate 字段,标识流程是否配置打印模板 - 优化流程实例列表查询,批量检查打印模板配置状态 - 修复 ProcessInstanceServiceImpl 中重复设置 formData 的问题
This commit is contained in:
1 parent
3c05364e12
commit
410a869db2
6 files changed
+67
-7
No files matched your search
@@ -1536,6 +1536,7 @@ CREATE TABLE `process` (
|
||||
`unique_id` varchar(50) CHARACTER SET utf8mb4 COLLATE utf8mb4_general_ci DEFAULT NULL COMMENT '唯一性id',
|
||||
`admin_list` varchar(255) CHARACTER SET utf8mb4 COLLATE utf8mb4_general_ci DEFAULT NULL COMMENT '管理员',
|
||||
`range_show` varchar(255) CHARACTER SET utf8mb4 COLLATE utf8mb4_general_ci DEFAULT NULL COMMENT '范围描述显示',
|
||||
`print_template` text CHARACTER SET utf8mb4 COLLATE utf8mb4_general_ci DEFAULT NULL COMMENT '打印模板',
|
||||
`tenant_id` bigint(20) NOT NULL DEFAULT '0' COMMENT '所属租户id',
|
||||
PRIMARY KEY (`id`) USING BTREE,
|
||||
UNIQUE KEY `idx_form_id` (`flow_id`) USING BTREE,
|
||||
|
||||
@@ -47,6 +47,7 @@ CREATE TABLE `process` (
|
||||
`unique_id` varchar(50) CHARACTER SET utf8mb4 COLLATE utf8mb4_general_ci DEFAULT NULL COMMENT '唯一性id',
|
||||
`admin_list` varchar(255) CHARACTER SET utf8mb4 COLLATE utf8mb4_general_ci DEFAULT NULL COMMENT '管理员',
|
||||
`range_show` varchar(255) CHARACTER SET utf8mb4 COLLATE utf8mb4_general_ci DEFAULT NULL COMMENT '范围描述显示',
|
||||
`print_template` text CHARACTER SET utf8mb4 COLLATE utf8mb4_general_ci DEFAULT NULL COMMENT '打印模板',
|
||||
`tenant_id` bigint(20) NOT NULL DEFAULT '0' COMMENT '所属租户id',
|
||||
PRIMARY KEY (`id`) USING BTREE,
|
||||
UNIQUE KEY `idx_form_id` (`flow_id`) USING BTREE,
|
||||
|
||||
@@ -118,6 +118,18 @@ public class Process {
|
||||
@TableField("range_show")
|
||||
private String rangeShow;
|
||||
|
||||
/**
|
||||
* 打印模板 HTML格式的打印模板内容,支持 mention 变量占位符
|
||||
*/
|
||||
@TableField("print_template")
|
||||
private String printTemplate;
|
||||
|
||||
/**
|
||||
* 租户ID 多租户隔离字段,用于区分不同租户的流程定义
|
||||
*/
|
||||
@TableField("tenant_id")
|
||||
private Long tenantId;
|
||||
|
||||
/**
|
||||
* 主键ID 使用雪花算法生成的分布式ID
|
||||
*/
|
||||
|
||||
+9
@@ -35,4 +35,13 @@ public class ProcessInstanceRecordVo extends ProcessInstanceRecord {
|
||||
*/
|
||||
private String resubmitTaskId;
|
||||
|
||||
/**
|
||||
* 是否配置了打印模板
|
||||
* <p>
|
||||
* true表示该流程定义已配置打印模板,前端显示打印按钮;
|
||||
* false或null表示未配置打印模板,前端不显示打印按钮
|
||||
* </p>
|
||||
*/
|
||||
private Boolean hasPrintTemplate;
|
||||
|
||||
}
|
||||
+24
@@ -94,4 +94,28 @@ public class ProcessController {
|
||||
return processService.validateFlowId(flowId);
|
||||
}
|
||||
|
||||
/**
|
||||
* 获取流程打印模板
|
||||
*
|
||||
* @param flowId 流程定义ID
|
||||
* @return 打印模板HTML内容
|
||||
*/
|
||||
@GetMapping("printTemplate/{flowId}")
|
||||
public R<String> getPrintTemplate(@PathVariable String flowId) {
|
||||
Process process = processService.getByFlowId(flowId);
|
||||
return R.ok(process != null ? process.getPrintTemplate() : null);
|
||||
}
|
||||
|
||||
/**
|
||||
* 保存流程打印模板
|
||||
*
|
||||
* @param process 包含flowId和printTemplate的实体
|
||||
* @return 操作结果
|
||||
*/
|
||||
@PutMapping("printTemplate")
|
||||
public R<Void> savePrintTemplate(@RequestBody Process process) {
|
||||
processService.updateByFlowId(new Process().setFlowId(process.getFlowId()).setPrintTemplate(process.getPrintTemplate()));
|
||||
return R.ok();
|
||||
}
|
||||
|
||||
}
|
||||
+20
-7
@@ -309,7 +309,6 @@ public class ProcessInstanceServiceImpl implements IProcessInstanceService {
|
||||
record.setGroupName(processInstanceRecord.getGroupName());
|
||||
record.setRootUserName(startUser.getName());
|
||||
record.setRootUserAvatarUrl(startUser.getAvatar());
|
||||
record.setTaskId(record.getTaskId());
|
||||
record.setStartTime(processInstanceRecord.getCreateTime());
|
||||
taskNewDtoList.add(record);
|
||||
}
|
||||
@@ -368,21 +367,29 @@ public class ProcessInstanceServiceImpl implements IProcessInstanceService {
|
||||
// 转换为 VO 并添加驳回状态信息
|
||||
List<ProcessInstanceRecordVo> voList = BeanUtil.copyToList(instanceRecordPage.getRecords(), ProcessInstanceRecordVo.class);
|
||||
|
||||
// 批量查询流程定义,用于检查打印模板
|
||||
Set<String> flowIds = voList.stream()
|
||||
.map(ProcessInstanceRecordVo::getFlowId)
|
||||
.filter(StrUtil::isNotBlank)
|
||||
.collect(Collectors.toSet());
|
||||
List<Process> processList = CollUtil.isEmpty(flowIds) ? Collections.emptyList()
|
||||
: processService.lambdaQuery().in(Process::getFlowId, flowIds).list();
|
||||
|
||||
for (ProcessInstanceRecordVo vo : voList) {
|
||||
try {
|
||||
// 从 Flowable 变量中获取 rejectToStarter 状态
|
||||
Object rejectVar = runtimeService.getVariable(
|
||||
vo.getProcessInstanceId(),
|
||||
"rejectToStarter"
|
||||
vo.getProcessInstanceId(),
|
||||
"rejectToStarter"
|
||||
);
|
||||
vo.setRejectToStarter(Boolean.TRUE.equals(rejectVar));
|
||||
|
||||
// 如果是驳回状态,获取 root 任务 ID 用于重新提交
|
||||
if (Boolean.TRUE.equals(vo.getRejectToStarter())) {
|
||||
Task task = taskService.createTaskQuery()
|
||||
.processInstanceId(vo.getProcessInstanceId())
|
||||
.taskDefinitionKey("root")
|
||||
.singleResult();
|
||||
.processInstanceId(vo.getProcessInstanceId())
|
||||
.taskDefinitionKey("root")
|
||||
.singleResult();
|
||||
if (task != null) {
|
||||
vo.setResubmitTaskId(task.getId());
|
||||
}
|
||||
@@ -391,6 +398,12 @@ public class ProcessInstanceServiceImpl implements IProcessInstanceService {
|
||||
// 流程可能已结束,设置为 false
|
||||
vo.setRejectToStarter(false);
|
||||
}
|
||||
|
||||
// 检查是否配置了打印模板(不依赖运行时变量,无需放在 try-catch 内)
|
||||
processList.stream()
|
||||
.filter(process -> process.getFlowId().equalsIgnoreCase(vo.getFlowId()))
|
||||
.findFirst()
|
||||
.ifPresent(process -> vo.setHasPrintTemplate(StrUtil.isNotBlank(process.getPrintTemplate())));
|
||||
}
|
||||
|
||||
// 构建返回的分页对象
|
||||
@@ -537,7 +550,7 @@ public class ProcessInstanceServiceImpl implements IProcessInstanceService {
|
||||
Node nodeDto = objectMapper.readValue(process, Node.class);
|
||||
Map<String, String> formPerms1 = nodeDto.getFormPerms();
|
||||
|
||||
Dict set = Dict.create().set(ProcessInstanceRecord.Fields.processInstanceId, processInstanceId).set(ProcessInstanceRecord.Fields.status, processInstanceRecord.getStatus()).set("process", oaForms.getProcess()).set("formItems", oaForms.getFormItems()).set("formData", formData).set("formData", formData).set("formConfig", oaForms.getFormConfig()).set("formPerms", formPerms1);
|
||||
Dict set = Dict.create().set(ProcessInstanceRecord.Fields.processInstanceId, processInstanceId).set(ProcessInstanceRecord.Fields.status, processInstanceRecord.getStatus()).set("process", oaForms.getProcess()).set("formItems", oaForms.getFormItems()).set("formData", formData).set("formConfig", oaForms.getFormConfig()).set("formPerms", formPerms1);
|
||||
|
||||
return R.ok(set);
|
||||
}
|
||||
|
||||
Reference in new issue
Block a user