EOS Low-Code Platform 8 EOS Low-Code Platform 8
产品简介
学习指南
更新说明
安装与集成
上线指南
初见EOS
低代码开发手册
专业代码开发手册
专题场景实战
公共服务框架
应用运行治理
最佳实践
运维指南
  • 工作项状态异常问题排查与解决手册
  • 问题一:提交任务时会报错In mothod [finishWorkItemWithStrategy],expect workItem state [10,4], but current workItem [7,682] state is [12]
  • 问题二:待办列表中有任务,但点开提示“无权限处理”
  • 问题三:多人会签,部分人审批后流程卡住
  • 问题四:回退后工作项状态为“已完成”(8),无法再次提交
  • 问题五:工作项状态为“挂起”(32),无法操作
  • 问题六:工作项状态为“待领取”(4),但用户已登录仍看不到
  • 问题七:集群环境下,A节点处理了工作项,B节点仍显示未处理
  • 问题八:工作项状态显示“已完成”(8),但流程节点仍高亮
  • 问题九:批量处理时,部分工作项提交成功,部分失败
  • 问题十:工作项长时间卡在“运行中”(2),无人处理
  • 快速排查清单(速查表)
  • 紧急修复脚本(谨慎使用)

# 工作项状态异常问题排查与解决手册

当遇到工作项状态异常时,请根据您看到的具体报错或现象,直接查阅下方对应的问题场景,按步骤操作即可。


# 问题一:提交任务时会报错In mothod [finishWorkItemWithStrategy],expect workItem state [10,4], but current workItem [7,682] state is [12]

原因分析: 该错误信息表示执行完成工作项方法时,期望工作项状态为10(运行)或4(待领取),但当前工作项状态为其他,不符合提交任务状态,无法提交。 当出现该错误异常时通常为当前处理人打开待办任务还未提交时,当前任务被其他人处理过。

解决步骤:

  1. 查看当前状态

    SELECT STATE FROM WFWORKITEM WHERE WORKITEMID = 你的工作项ID;
    
  2. 根据状态处理

    • 状态=12(已完成):该工作项已被他人处理,刷新页面查看最新状态
    • 状态=4(待领取):需要先领取再处理
    • 状态=13(终止):流程已终止,无法继续

# 问题二:待办列表中有任务,但点开提示“无权限处理”

现象:能看到待办任务,点击后提示当前用户不是处理人。

解决步骤:

  1. 检查工作项参与者

    SELECT PARTICIPANT, PARTICIPANTTYPE FROM WFWORKITEM WHERE WORKITEMID = 你的工作项ID;
    
  2. 确认当前用户信息

    SELECT ID, CODE, NAME FROM afc_employee WHERE CODE = '你的工号';
    
  3. 若参与者为角色/岗位

    • 检查用户是否在该角色/岗位下
    SELECT * FROM afc_r_party_role WHERE PARTY_ID = '用户ID' AND ROLE_ID = '角色ID';
    
  4. 若不在,联系管理员添加权限


# 问题三:多人会签,部分人审批后流程卡住

现象:会签节点需要多人审批,但部分人审批后流程不再继续。

解决步骤:

  1. 查看会签完成条件

    • 打开流程设计器,找到该人工活动
    • 检查“多工作项”->“完成条件”配置
    • 常见配置:全部完成、百分比完成、按投票结果
  2. 检查已审批人数

    SELECT COUNT(*) FROM WFWORKITEM 
    WHERE PROCESSINSTID = 你的流程实例ID 
      AND ACTIVITYDEFID = '节点ID' 
      AND STATE = 8;  -- 已完成
    
  3. 若未达到完成条件,等待其余人审批

  4. 若配置错误,修改流程定义后重新发布


# 问题四:回退后工作项状态为“已完成”(8),无法再次提交

现象:流程回退到某节点,但该节点的工作项状态显示已完成,审批人无法处理。

解决步骤:

  1. 确认回退策略

    • 检查回退按钮配置
    • 原路径提交:会保留原工作项状态
    • 跳转提交:会创建新工作项
  2. 查看回退后生成的新工作项

    SELECT WORKITEMID, STATE, CREATE_TIME 
    FROM WFWORKITEM 
    WHERE PROCESSINSTID = 你的流程实例ID 
      AND ACTIVITYDEFID = '回退目标节点ID'
    ORDER BY CREATE_TIME DESC;
    
  3. 若没有新工作项,手动创建

    // 调用接口重新激活工作项
    workFlowManager.restartWorkItem(oldWorkItemId, userId);
    
  4. 推荐配置:回退按钮使用“跳转提交”


# 问题五:工作项状态为“挂起”(32),无法操作

现象:工作项显示为挂起状态,所有操作按钮都不可用。

解决步骤:

  1. 查询挂起原因

    SELECT SUSPEND_REASON, SUSPEND_TIME FROM WFWORKITEM WHERE WORKITEMID = 你的工作项ID;
    
  2. 恢复工作项

    // 恢复挂起的工作项
    workFlowManager.resumeWorkItem(workItemId, "恢复原因");
    
  3. 若因超时挂起

    • 调整超时时间配置
    # application.properties
    bps.workitem.timeout.default=604800000  # 改为更长时间
    
  4. 管理端操作:流程中心→实例管理→活动实例信息→点击“恢复”


# 问题六:工作项状态为“待领取”(4),但用户已登录仍看不到

现象:用户属于该角色,但待办列表中不显示工作项。

解决步骤:

  1. 检查用户是否真的属于该角色

    SELECT * FROM afc_r_party_role 
    WHERE PARTY_ID = (SELECT ID FROM afc_employee WHERE CODE = '用户工号')
      AND ROLE_ID = (SELECT ID FROM afc_role WHERE CODE = '角色编码');
    
  2. 检查工作项参与者记录

    SELECT PARTICIPANT FROM WFWORKITEM WHERE WORKITEMID = 你的工作项ID;
    -- 返回值可能是角色ID,也可能是多个用|分隔的ID
    
  3. 若参与者包含角色ID,正常

  4. 若参与者为空,说明数据异常,手动修复

    UPDATE WFWORKITEM SET PARTICIPANT = '角色ID' WHERE WORKITEMID = 你的工作项ID;
    

# 问题七:集群环境下,A节点处理了工作项,B节点仍显示未处理

现象:多节点部署,用户在一台服务器处理了任务,刷新后另一台服务器仍显示待处理。

解决步骤:

  1. 检查Redis会话共享配置

    # application.properties
    spring.session.store-type=redis
    spring.redis.host=你的redis地址
    spring.redis.port=6379
    
  2. 检查分布式锁表

    -- 确认eos_lock表存在
    SELECT COUNT(*) FROM eos_lock;
    -- 若不存在,执行bps初始化脚本
    
  3. 强制刷新缓存

    // 清除工作项缓存
    workFlowManager.evictWorkItemCache(workItemId);
    
  4. 重启服务顺序:Redis → Nacos → BPS → AFCenter → 业务应用


# 问题八:工作项状态显示“已完成”(8),但流程节点仍高亮

现象:工作项已完成,但流程图中该节点仍显示为进行中状态。

解决步骤:

  1. 检查该节点下是否有多个工作项

    SELECT COUNT(*) FROM WFWORKITEM 
    WHERE PROCESSINSTID = 你的流程实例ID 
      AND ACTIVITYDEFID = '节点ID';
    
  2. 若有多个,查看是否全部完成

    SELECT STATE, COUNT(*) FROM WFWORKITEM 
    WHERE PROCESSINSTID = 你的流程实例ID 
      AND ACTIVITYDEFID = '节点ID'
    GROUP BY STATE;
    
  3. 若全部完成但流程图显示异常

    • 清除浏览器缓存
    • 重新加载流程图
  4. 若问题依旧,可能是前端缓存问题,打补丁

    • PLATFORM_8.3.2_AFCENTER_UI_20251229_P1(移动端流程图问题)
    • PLATFORM_8.3.3_AFCENTER_UI_20250919_P1(PC端流程图问题)

# 问题九:批量处理时,部分工作项提交成功,部分失败

现象:选择多个待办批量提交,有的成功,有的报错“工作项状态异常”。

解决步骤:

  1. 查看失败的批量请求日志

    grep "batch" bps.log | grep "workItemId"
    
  2. 逐个检查失败的工作项状态

    SELECT WORKITEMID, STATE FROM WFWORKITEM 
    WHERE WORKITEMID IN (失败的工作项ID列表);
    
  3. 常见原因及处理

    • 状态=8:已被他人处理 → 告知用户
    • 状态=4:未领取 → 先领取再批量处理
    • 状态=16:已终止 → 忽略
  4. 优化批量处理逻辑

    // 批量处理前先过滤掉状态异常的工作项
    List<Long> validItems = new ArrayList<>();
    for (Long id : workItemIds) {
        WFWorkItem item = workItemManager.getWorkItem(id);
        if (item.getState() == 2) { // 只处理运行中的
            validItems.add(id);
        }
    }
    

# 问题十:工作项长时间卡在“运行中”(2),无人处理

现象:工作项状态正常,但指定处理人一直未收到待办。

解决步骤:

  1. 确认处理人是否正确

    SELECT PARTICIPANT, PARTICIPANTTYPE FROM WFWORKITEM WHERE WORKITEMID = 你的工作项ID;
    
  2. 检查处理人账号是否正常

    SELECT STATUS FROM afc_employee WHERE ID = '参与者ID';
    -- STATUS=0为正常,1为禁用
    
  3. 若参与者为角色,检查角色下是否有人员

    SELECT * FROM afc_r_party_role WHERE ROLE_ID = '角色ID';
    
  4. 手动转交给其他处理人

    • 在流程中心→待办任务→点击“转交”
    • 选择新的处理人
  5. 若需批量处理,写脚本转交

    // 转交工作项
    workFlowManager.transferWorkItem(workItemId, newParticipantId, "转交原因");
    

# 快速排查清单(速查表)

问题现象 可能原因 快速操作
提交报错“not running” 状态异常 查WFWORKITEM.STATE,状态=4时先领取
有任务但点不开 参与者错误 对比PARTICIPANT和当前用户ID
会签卡住 完成条件未达 查已完成数量,对照完成条件
回退后无法处理 回退策略错误 改用“跳转提交”
状态=32挂起 超时/手动挂起 调用resumeWorkItem恢复
集群不同步 Redis未配置 配置spring.session.store-type=redis
流程图状态不对 缓存问题 清浏览器缓存,刷新页面
批量处理部分失败 部分状态异常 过滤掉状态!=2的工作项

# 紧急修复脚本(谨慎使用)

-- 1. 备份数据
CREATE TABLE WFWORKITEM_BAK_日期 AS SELECT * FROM WFWORKITEM WHERE WORKITEMID IN (问题ID列表);

-- 2. 修复为运行中(仅限确认没问题的工作项)
UPDATE WFWORKITEM 
SET STATE = 2, UPDATE_TIME = NOW() 
WHERE WORKITEMID IN (问题ID列表) 
  AND STATE NOT IN (8, 16);  -- 不能修复已完成或终止的

-- 3. 清理分布式锁
DELETE FROM eos_lock WHERE LOCK_KEY LIKE '%workitem_问题ID%';

如遇到未覆盖的问题,请提供:

  1. 完整报错信息
  2. 工作项ID和当前状态
  3. 操作步骤
  4. bps.log中相关日志

← 回退失败 流程事件/引擎事件不触发 →