提交 a6ac3515 authored 作者: kxjia's avatar kxjia

合并代码

......@@ -168,6 +168,29 @@ export function todoListAll() {
})
}
// 转办任务 why 2026-4-7 add
export function assign(data) {
return defHttp.post({
url: '/flowable/task/assign',
data: data
})
}
// 转办任务 why 2026-4-8 add
export function assignRead(data) {
return defHttp.post({
url: '/flowable/task/assignRead',
data: data
})
}
// 查询待阅任务列表
export function todoReadList(query) {
return defHttp.get({
url: '/flowable/task/todoReadList',
params: query
})
}
......
......@@ -26,6 +26,10 @@
<template #icon><CloseCircleOutlined /></template>
转办
</a-button>
<a-button type="danger" size="large" @click="handleAssignReadTask" :loading="assiReadgning" class="action-btn">
<template #icon><CloseCircleOutlined /></template>
转阅
</a-button>
</a-space>
</div>
<div class="action-right">
......@@ -216,7 +220,7 @@
// API
import { flowRecord } from '/@/components/Process/api/finished';
import { flowXmlAndNode } from '/@/components/Process/api/definition';
import { complete, flowTaskForm, getNextFlowNode, getMyTaskFlow,assign } from '/@/components/Process/api/todo';
import { complete, flowTaskForm, getNextFlowNode, getMyTaskFlow,assign,assignRead } from '/@/components/Process/api/todo';
import { flowTaskInfo } from '/@/components/Process/api/process';
// 组件
......@@ -291,6 +295,7 @@
const isFixed = ref(true);
const assigning = ref(false);
const assiReadgning = ref(false);
const userType = computed(() => {
return nextNode.value?.type || '';
});
......@@ -769,6 +774,58 @@
}
};
//转阅处理
const handleAssignReadTask = async () => {
if (assiReadgning.value) return;
try {
assiReadgning.value = true;
const submitData = {
instanceId: taskForm.instanceId,
deployId: taskForm.deployId,
taskId: taskForm.taskId,
comment: '',
values: {},
};
const formData = await validate();
Object.assign(submitData, formData);
submitData.comment = submitData.comment || '';
//test1 1958436761110269953
// submitData.values['targetUserId'] = '1959869916657950721';
if (userType.value === 'user') {
submitData.values['targetUserId'] = formData.checkSendUser;
submitData.values['approvalType'] = 'user';
if (formData.checkSendUser) {
submitData.values['targetUserId'] = formData.checkSendUser;
submitData.values['approvalType'] = 'user';
}
} else if (formData.checkSendRole) {
submitData.values['targetUserId'] = formData.checkSendRole;
submitData.values['approvalType'] = 'role';
}
// 执行发送
const result = await assignRead(submitData);
message.success('任务转阅成功');
emit('success', result);
emit('callback');
} catch (error: any) {
if (error.errorFields) {
message.error('请完善表单信息');
} else {
console.error('转阅任务失败:', error);
message.error(error.message || '转阅任务失败');
}
} finally {
assiReadgning.value = false;
}
};
defineExpose({
iniData,
......
......@@ -276,4 +276,16 @@ public class FlowTaskController {
return flowTaskService.getMyTaskFlow(flowTaskVo);
}
@PostMapping(value = "/assignRead")
public Result assignRead(@RequestBody FlowTaskVo flowTaskVo) {
flowTaskService.assignReadTask(flowTaskVo);
return Result.OK();
}
//待阅列表
@GetMapping(value = "/todoReadList")
public Result todoReadList(@RequestParam Integer pageNum,
@RequestParam Integer pageSize) {
return flowTaskService.todoReadList(pageNum, pageSize);
}
}
......@@ -175,6 +175,8 @@ public interface IFlowTaskService {
public FlowNextDto getFlowNodeType(String taskId);
public Result flowFormAllData(String deployId,String taskId);
public Result getMyTaskFlow(FlowTaskVo flowTaskVo);
public void assignReadTask(FlowTaskVo flowTaskVo);
public Result todoReadList(Integer pageNum, Integer pageSize) ;
public Result<List<String>> todoListAll();
......
......@@ -470,7 +470,7 @@ public class FlowDefinitionServiceImpl extends FlowServiceFactory implements IFl
Task task = taskService.createTaskQuery().processInstanceId(processInstance.getProcessInstanceId()).active().singleResult();
result.put("deployId", DeployId);
result.put("taskId", task.getId());
result.put("procInsId", task.getProcessDefinitionId());
result.put("procInsId", task.getProcessInstanceId());
result.put("executionId", task.getExecutionId());
result.put("instanceId", task.getProcessInstanceId());
......@@ -603,6 +603,7 @@ public class FlowDefinitionServiceImpl extends FlowServiceFactory implements IFl
e.printStackTrace();
return Result.error("流程启动错误");
}
}
......
......@@ -71,6 +71,7 @@ import org.springframework.stereotype.Service;
import org.springframework.transaction.annotation.Transactional;
import java.io.InputStream;
import java.math.BigInteger;
import java.nio.charset.StandardCharsets;
import java.text.SimpleDateFormat;
import java.util.*;
......@@ -1143,6 +1144,9 @@ public class FlowTaskServiceImpl extends FlowServiceFactory implements IFlowTask
ProcessDefinition pd = repositoryService.createProcessDefinitionQuery()
.processDefinitionId(hisIns.getProcessDefinitionId())
.singleResult();
if (pd != null) {
flowTask.setDeployId(pd.getDeploymentId());
flowTask.setProcDefName(pd.getName());
flowTask.setProcDefVersion(pd.getVersion());
......@@ -1156,6 +1160,7 @@ public class FlowTaskServiceImpl extends FlowServiceFactory implements IFlowTask
List<HistoricTaskInstance> historicTaskInstance = historyService.createHistoricTaskInstanceQuery().processInstanceId(hisIns.getId()).orderByHistoricTaskInstanceEndTime().desc().list();
flowTask.setTaskId(historicTaskInstance.get(0).getId());
}
}
flowList.add(flowTask);
}
page.setRecords(flowList);
......@@ -1302,7 +1307,6 @@ public class FlowTaskServiceImpl extends FlowServiceFactory implements IFlowTask
// 获取用户所属的角色Ids
List<String> userRoleIds = iFlowThirdService.getUserRoleIdsByUserId(userName);
// 方法1:使用任务候选用户查询(如果系统支持)
TaskQuery taskQuery = taskService.createTaskQuery()
.active()
......@@ -2183,7 +2187,7 @@ public class FlowTaskServiceImpl extends FlowServiceFactory implements IFlowTask
.processInstanceId(procInsId)
.orderByHistoricTaskInstanceStartTime().asc()
.list();
String urlquerystr="";
String urlquerystr = "";
// 1. 获取历史活动实例
List<HistoricActivityInstance> activities = historyService
.createHistoricActivityInstanceQuery()
......@@ -2197,6 +2201,7 @@ public class FlowTaskServiceImpl extends FlowServiceFactory implements IFlowTask
.createHistoricProcessInstanceQuery()
.processInstanceId(procInsId)
.singleResult();
if(historicProcessInstance!=null){
BpmnModel bpmnModel = repositoryService
.getBpmnModel(historicProcessInstance.getProcessDefinitionId());
......@@ -2210,9 +2215,6 @@ public class FlowTaskServiceImpl extends FlowServiceFactory implements IFlowTask
UserTask userTask = (UserTask) flowElement;
// 获取任务实例信息(如果有)
if (activity.getTaskId() != null) {
HistoricTaskInstance task = historyService
......@@ -2224,25 +2226,25 @@ public class FlowTaskServiceImpl extends FlowServiceFactory implements IFlowTask
// 获取流程变量
Map<String, Object> formValues = getProcessVariables(task.getId());
if(formValues!=null){
if (formValues != null) {
// 获取流程变量
String formUrlparval="";
String formUrlpar="";
if(formValues.get("dataId")==null){
if(formValues.get("_value")!=null){
Map zdv=(Map)formValues.get("_value");
formUrlpar=(String)zdv.get("dataName");
formUrlparval=zdv.get("dataId").toString();
String formUrlparval = "";
String formUrlpar = "";
if (formValues.get("dataId") == null) {
if (formValues.get("_value") != null) {
Map zdv = (Map) formValues.get("_value");
formUrlpar = (String) zdv.get("dataName");
formUrlparval = zdv.get("dataId").toString();
}
}else{
formUrlparval=formValues.get("dataId").toString();
formUrlpar=formValues.get("dataName").toString();
} else {
formUrlparval = formValues.get("dataId").toString();
formUrlpar = formValues.get("dataName").toString();
}
urlquerystr=formUrlpar+"="+formUrlparval;
urlquerystr = formUrlpar + "=" + formUrlparval;
break;
}
......@@ -2253,6 +2255,8 @@ public class FlowTaskServiceImpl extends FlowServiceFactory implements IFlowTask
}
}
}
......@@ -2725,5 +2729,176 @@ public class FlowTaskServiceImpl extends FlowServiceFactory implements IFlowTask
}
/**
* 转办任务
*
* @param flowTaskVo 请求实体参数
*/
@Override
@Transactional(rollbackFor = Exception.class)
public void assignReadTask(FlowTaskVo flowTaskVo) {
SysUser loginUser = iFlowThirdService.getLoginUser();
// 1. (可选) 记录转办人,便于追溯。将原办理人记录在 Owner 字段中
taskService.setOwner(flowTaskVo.getTaskId(), loginUser.getId());
if(flowTaskVo.getValues()!=null){
if(flowTaskVo.getValues().get("approvalType")!=null){
if(flowTaskVo.getValues().get("approvalType").toString().equals("user")){
if(flowTaskVo.getValues().get("targetUserId")!=null){
//目标用户
String targetUserId = flowTaskVo.getValues().get("targetUserId").toString();
SysUser targetuser =iFlowThirdService.getUserByUserid(targetUserId);
// 添加一个用户为任务的候选人,使其能在候选任务列表中看到该任务
//taskService.addCandidateUser(flowTaskVo.getTaskId(), targetUserId);
// 为任务添加一个“阅读者”身份链接
taskService.addUserIdentityLink(flowTaskVo.getTaskId(), targetUserId, "reader");
Date date = new Date();
SimpleDateFormat sdf = new SimpleDateFormat("yyyy-MM-dd HH:mm:ss");
String curdate = sdf.format(date);
// 3. (可选) 添加一条评论或日志,记录这次转办动作
//taskService.addComment(flowTaskVo.getTaskId(), null, originalUserId + " 将任务转办给 " + targetUserId);
taskService.addComment(flowTaskVo.getTaskId(), flowTaskVo.getInstanceId(), curdate+loginUser.getRealname() + " 将任务转阅给 " + targetuser.getRealname());
}
}else {
}
}
}
}
/**
* 待阅任务列表
*
* @param pageNum 当前页码
* @param pageSize 每页条数
* @return
*/
@Override
public Result todoReadList(Integer pageNum, Integer pageSize) {
Page<FlowTaskDto> page = new Page<>();
String userId = iFlowThirdService.getLoginUser().getId();
String userName = iFlowThirdService.getLoginUser().getUsername();
// 获取用户所属的角色Ids
List<String> userRoleIds = iFlowThirdService.getUserRoleIdsByUserId(userName);
// 构建 UNION 查询,包含 reader 类型
String sql = "SELECT T.*, 'reader' AS TASK_TYPE_ FROM ACT_RU_TASK T " +
" INNER JOIN ACT_RU_IDENTITYLINK L ON T.ID_ = L.TASK_ID_ " +
" WHERE L.TYPE_ = 'reader' AND L.USER_ID_ = #{userId} " +
" AND T.SUSPENSION_STATE_ = 1 " +
"ORDER BY CREATE_TIME_ DESC";
// 统计总数的 SQL
String countSql = "SELECT COUNT(*) FROM (" +
" SELECT T.ID_ FROM ACT_RU_TASK T INNER JOIN ACT_RU_IDENTITYLINK L ON T.ID_ = L.TASK_ID_ " +
" WHERE L.TYPE_ = 'reader' AND L.USER_ID_ = #{userId} AND T.SUSPENSION_STATE_ = 1" +
") UNION_TASKS";
// 查询总数 - 返回 BigInteger
BigInteger totalBigInt = (BigInteger) taskService.createNativeTaskQuery()
.sql(countSql)
.parameter("userId", userId)
.singleResult();
// 设置分页总数
long total = totalBigInt != null ? totalBigInt.longValue() : 0L;
page.setTotal(total);
// 查询分页数据
List<Task> taskList = taskService.createNativeTaskQuery()
.sql(sql)
.parameter("userId", userId)
.listPage((pageNum - 1) * pageSize, pageSize);
List<FlowTaskDto> flowList = new ArrayList<>();
for (Task task : taskList) {
FlowTaskDto flowTask = new FlowTaskDto();
// 当前流程信息
flowTask.setTaskId(task.getId());
flowTask.setTaskDefKey(task.getTaskDefinitionKey());
flowTask.setCreateTime(task.getCreateTime());
flowTask.setProcDefId(task.getProcessDefinitionId());
flowTask.setTaskName(task.getName());
// 设置任务类型
/**
if (task.getAssignee() != null && task.getAssignee().equals(userId)) {
flowTask.setTaskType("assignee"); // 个人任务
} else {
flowTask.setTaskType("candidate"); // 候选任务
}
*/
flowTask.setTaskType("reader"); // 转阅人/抄送人(自定义类型),只读权限,无需处理任务,仅用于信息同步
// 流程定义信息
ProcessDefinition pd = repositoryService.createProcessDefinitionQuery()
.processDefinitionId(task.getProcessDefinitionId())
.singleResult();
flowTask.setDeployId(pd.getDeploymentId());
flowTask.setProcDefName(pd.getName());
flowTask.setProcDefVersion(pd.getVersion());
flowTask.setProcInsId(task.getProcessInstanceId());
flowTask.setCategory(pd.getCategory());
// 流程发起人信息
HistoricProcessInstance historicProcessInstance = historyService.createHistoricProcessInstanceQuery()
.processInstanceId(task.getProcessInstanceId())
.singleResult();
//SysUser startUser = iFlowThirdService.getUserByUsername(historicProcessInstance.getStartUserId());
SysUser startUser = iFlowThirdService.getUserByUserid(historicProcessInstance.getStartUserId());
if(startUser==null){
startUser = iFlowThirdService.getUserByUsername(historicProcessInstance.getStartUserId());
}
List<String> departNamesByUsername = iFlowThirdService.getDepartNamesByUsername(historicProcessInstance.getStartUserId());
if(departNamesByUsername==null||(departNamesByUsername!=null&&departNamesByUsername.size()==0)){
departNamesByUsername = iFlowThirdService.getDepartNamesByUserId(historicProcessInstance.getStartUserId());
}
flowTask.setStartUserId(startUser.getUsername());
flowTask.setStartUserName(startUser.getRealname());
flowTask.setStartDeptName(CollUtil.join(departNamesByUsername, ","));
//why add 2025-11-25 得到 dataId
// 1. 获取单个变量
String executionId = task.getExecutionId();
Object variableValue = runtimeService.getVariable(executionId, "dataId");
if(variableValue!=null){
Object variableValueName = runtimeService.getVariable(executionId, "dataName");
flowTask.setDataId(variableValue.toString());
flowTask.setDataName(variableValueName.toString());
}
FlowNextDto flowtDto=getFlowNodeType(task.getId());
if(flowtDto!=null){
flowTask.setNodeisApprove(flowtDto.isNodeisApprove());
}
flowList.add(flowTask);
}
page.setRecords(flowList);
return Result.OK(page);
}
}
Markdown 格式
0%
您添加了 0 到此讨论。请谨慎行事。
请先完成此评论的编辑!
注册 或者 后发表评论