commit
This commit is contained in:
@@ -4,6 +4,8 @@ import cn.dev33.satoken.annotation.SaCheckLogin;
|
||||
import cn.hutool.core.bean.BeanUtil;
|
||||
import cn.hutool.core.lang.Dict;
|
||||
import cn.hutool.core.util.StrUtil;
|
||||
import cn.hutool.json.JSONObject;
|
||||
import cn.hutool.json.JSONUtil;
|
||||
import com.budwk.app.base.result.Result;
|
||||
import com.budwk.app.base.vo.LabelValueVO;
|
||||
import com.budwk.app.flow.constant.FlowConst;
|
||||
@@ -12,14 +14,8 @@ import com.budwk.app.flow.engine.event.ProcessEvent;
|
||||
import com.budwk.app.flow.engine.event.ProcessPublisher;
|
||||
import com.budwk.app.flow.engine.model.ProcessModel;
|
||||
import com.budwk.app.flow.engine.model.TaskModel;
|
||||
import com.budwk.app.flow.entity.Candidate;
|
||||
import com.budwk.app.flow.entity.ProcessDefine;
|
||||
import com.budwk.app.flow.entity.ProcessInstance;
|
||||
import com.budwk.app.flow.entity.ProcessTask;
|
||||
import com.budwk.app.flow.enums.ProcessEventTypeEnum;
|
||||
import com.budwk.app.flow.enums.ProcessInstanceStateEnum;
|
||||
import com.budwk.app.flow.enums.ProcessTaskPerformTypeEnum;
|
||||
import com.budwk.app.flow.enums.ProcessTaskStateEnum;
|
||||
import com.budwk.app.flow.entity.*;
|
||||
import com.budwk.app.flow.enums.*;
|
||||
import com.budwk.app.flow.service.FlowCommonService;
|
||||
import com.budwk.app.flow.vo.HighLightVO;
|
||||
import com.budwk.app.flow.vo.ProcessInstanceVO;
|
||||
@@ -146,20 +142,25 @@ public class FlowCommonController {
|
||||
@SaCheckLogin
|
||||
@ApiOperation("获取流程定义的审批记录")
|
||||
public Result approvalRecord(Long instanceId) {
|
||||
List<ProcessTask> processTaskList = dao.query(ProcessTask.class, Cnd.where(ProcessTask::getProcessInstanceId, "=", instanceId)
|
||||
.and(ProcessTask::getTaskState, "not in", List.of(ProcessTaskStateEnum.DOING, ProcessTaskStateEnum.WITHDRAW, ProcessTaskStateEnum.ABANDON))
|
||||
.asc(ProcessTask::getUpdatedAt));
|
||||
List<ProcessTaskVO> res = new ArrayList<>();
|
||||
processTaskList.forEach(processTask -> {
|
||||
ProcessTaskVO vo = BeanUtil.toBean(processTask, ProcessTaskVO.class);
|
||||
if (vo.getTaskState().equals(ProcessTaskStateEnum.FINISHED.getCode()) && StrUtil.isNotBlank(vo.getOperator())) {
|
||||
List<ProcessTask> processTaskList = dao.query(ProcessTask.class, Cnd.where(ProcessTask::getProcessInstanceId, "=", instanceId)
|
||||
.and(ProcessTask::getTaskState, "not in", List.of(ProcessTaskStateEnum.WITHDRAW, ProcessTaskStateEnum.ABANDON))
|
||||
.asc(ProcessTask::getUpdatedAt));
|
||||
List<ProcessTaskVO> res = new ArrayList<>();
|
||||
processTaskList.forEach(processTask -> {
|
||||
ProcessTaskVO vo = BeanUtil.toBean(processTask, ProcessTaskVO.class);
|
||||
if (vo.getTaskState().equals(ProcessTaskStateEnum.FINISHED.getCode()) && StrUtil.isNotBlank(vo.getOperator())) {
|
||||
|
||||
}
|
||||
}
|
||||
if(vo.getTaskState().equals(ProcessTaskStateEnum.DOING.getCode())) {
|
||||
List<ProcessTaskActor> taskActorList = dao.query(ProcessTaskActor.class, Cnd.where(ProcessTaskActor::getProcessTaskId, "=", processTask.getId()));
|
||||
List<JSONObject> list = JSONUtil.toList(JSONUtil.toJsonStr(taskActorList), JSONObject.class);
|
||||
vo.setTaskActorList(list);
|
||||
}
|
||||
|
||||
res.add(vo);
|
||||
});
|
||||
return Result.success(res);
|
||||
}
|
||||
res.add(vo);
|
||||
});
|
||||
return Result.success(res);
|
||||
}
|
||||
|
||||
@At
|
||||
@SaCheckLogin
|
||||
@@ -239,7 +240,7 @@ public class FlowCommonController {
|
||||
@Aop(TransAop.READ_COMMITTED)
|
||||
public Result executeTask(@Param("data") String param) {
|
||||
Dict args = Json.fromJson(Dict.class, param);
|
||||
flowCommonService.executeTask(args);
|
||||
flowCommonService.executeTask(args);
|
||||
return Result.success();
|
||||
}
|
||||
|
||||
|
||||
@@ -19,6 +19,7 @@ import org.nutz.dao.Dao;
|
||||
import org.nutz.ioc.aop.Aop;
|
||||
import org.nutz.ioc.loader.annotation.Inject;
|
||||
import org.nutz.ioc.loader.annotation.IocBean;
|
||||
import org.nutz.json.Json;
|
||||
|
||||
import java.util.List;
|
||||
|
||||
@@ -37,7 +38,8 @@ public class FlowCommonService {
|
||||
*/
|
||||
public void executeTask(Dict args){
|
||||
Long processTaskId = args.getLong(FlowConst.PROCESS_TASK_ID_KEY);
|
||||
String operator = SecurityUtil.getUserId();
|
||||
|
||||
String operator = SecurityUtil.getUserId();
|
||||
if (args.containsKey(FlowConst.EXT_ENABLE_OPERATOR)&&args.getBool(FlowConst.EXT_ENABLE_OPERATOR)){
|
||||
operator = FlowConst.ADMIN_ID;
|
||||
}
|
||||
@@ -46,6 +48,15 @@ public class FlowCommonService {
|
||||
if (submitType == null) {
|
||||
submitType = ProcessSubmitTypeEnum.AGREE.getCode();
|
||||
}
|
||||
|
||||
ProcessTask processTask = flowEngine.processTaskService().getById(processTaskId);
|
||||
ProcessTask parentTask = flowEngine.processTaskService().getById(processTask.getTaskParentId());
|
||||
Dict taskArgs = Json.fromJson(Dict.class, parentTask.getVariable());
|
||||
if(taskArgs.containsKey("tf_sourceTaskKey") && !taskArgs.getBool("tf_audit")) {
|
||||
submitType = ProcessSubmitTypeEnum.JUMP.getCode();
|
||||
args.put(FlowConst.TASK_NAME, taskArgs.getStr("tf_sourceTaskKey"));
|
||||
}
|
||||
|
||||
args.put(FlowConst.SUBMIT_TYPE, submitType);
|
||||
|
||||
// 设置办理人信息到表单参数
|
||||
|
||||
@@ -270,43 +270,43 @@ public class ProcessInstanceServiceImpl extends BaseServiceImpl<ProcessInstance>
|
||||
|
||||
@Override
|
||||
public HighLightVO highLight(Long processInstanceId) {
|
||||
HighLightVO vo = new HighLightVO();
|
||||
ProcessInstanceVO processInstance = findById(processInstanceId);
|
||||
HighLightVO vo = new HighLightVO();
|
||||
ProcessInstanceVO processInstance = findById(processInstanceId);
|
||||
|
||||
FlowEngine flowEngine = ServiceContext.find(FlowEngine.class);
|
||||
FlowEngine flowEngine = ServiceContext.find(FlowEngine.class);
|
||||
|
||||
if (processInstance != null) {
|
||||
ProcessModel processModel = flowEngine.processDefineService().getProcessModel(processInstance.getProcessDefineId());
|
||||
// 拿到正在进行中的任务==>活跃节点
|
||||
List<ProcessTask> processTaskList = flowEngine.processTaskService().getDoingTaskList(processInstanceId, new String[]{});
|
||||
// 拿到历史任务-按更新时间倒序
|
||||
List<ProcessTask> hisProcessTaskList = flowEngine.processTaskService().query(Cnd.where(ProcessTask::getProcessInstanceId, "=", processInstanceId).desc(ProcessTask::getUpdatedAt));
|
||||
processTaskList.forEach(task -> {
|
||||
if (!vo.getActiveNodeNames().contains(task.getTaskName())) {
|
||||
vo.getActiveNodeNames().add(task.getTaskName());
|
||||
recursionModel(processModel.getStart(), processInstance, processTaskList, hisProcessTaskList, task.getTaskName(), vo);
|
||||
}
|
||||
});
|
||||
// 拿到非正常结束的流程实例状态值
|
||||
List<Integer> orderStatusList = Arrays.stream(ProcessInstanceStateEnum.values()).filter(item -> !item.equals(ProcessInstanceStateEnum.DOING) && !item.equals(ProcessInstanceStateEnum.FINISHED)).map(ProcessInstanceStateEnum::getCode).toList();
|
||||
// 非正常结束,需要进行特殊处理
|
||||
if (orderStatusList.contains(processInstance.getState())) {
|
||||
if (CollectionUtil.isNotEmpty(hisProcessTaskList)) {
|
||||
ProcessTask lastProcessTask = hisProcessTaskList.get(hisProcessTaskList.size() - 1);
|
||||
NodeModel nodeModel = processModel.getNode(lastProcessTask.getTaskName());
|
||||
recursionModel(processModel.getStart(), processInstance, processTaskList, hisProcessTaskList, nodeModel.getOutputs().get(0).getTo(), vo);
|
||||
}
|
||||
} else {
|
||||
List<EndModel> endModels = processModel.getModels(EndModel.class);
|
||||
if (endModels != null) {
|
||||
endModels.forEach(endModel -> {
|
||||
recursionModel(processModel.getStart(), processInstance, processTaskList, hisProcessTaskList, endModel.getName(), vo);
|
||||
});
|
||||
}
|
||||
}
|
||||
}
|
||||
return vo;
|
||||
}
|
||||
if (processInstance != null) {
|
||||
ProcessModel processModel = flowEngine.processDefineService().getProcessModel(processInstance.getProcessDefineId());
|
||||
// 拿到正在进行中的任务==>活跃节点
|
||||
List<ProcessTask> processTaskList = flowEngine.processTaskService().getDoingTaskList(processInstanceId, new String[]{});
|
||||
// 拿到历史任务-按更新时间倒序
|
||||
List<ProcessTask> hisProcessTaskList = flowEngine.processTaskService().query(Cnd.where(ProcessTask::getProcessInstanceId, "=", processInstanceId).desc(ProcessTask::getUpdatedAt));
|
||||
processTaskList.forEach(task -> {
|
||||
if (!vo.getActiveNodeNames().contains(task.getTaskName())) {
|
||||
vo.getActiveNodeNames().add(task.getTaskName());
|
||||
recursionModel(processModel.getStart(), processInstance, processTaskList, hisProcessTaskList, task.getTaskName(), vo);
|
||||
}
|
||||
});
|
||||
// 拿到非正常结束的流程实例状态值
|
||||
List<Integer> orderStatusList = Arrays.stream(ProcessInstanceStateEnum.values()).filter(item -> !item.equals(ProcessInstanceStateEnum.DOING) && !item.equals(ProcessInstanceStateEnum.FINISHED)).map(ProcessInstanceStateEnum::getCode).toList();
|
||||
// 非正常结束,需要进行特殊处理
|
||||
if (orderStatusList.contains(processInstance.getState())) {
|
||||
if (CollectionUtil.isNotEmpty(hisProcessTaskList)) {
|
||||
ProcessTask lastProcessTask = hisProcessTaskList.get(hisProcessTaskList.size() - 1);
|
||||
NodeModel nodeModel = processModel.getNode(lastProcessTask.getTaskName());
|
||||
recursionModel(processModel.getStart(), processInstance, processTaskList, hisProcessTaskList, nodeModel.getOutputs().get(0).getTo(), vo);
|
||||
}
|
||||
} else {
|
||||
List<EndModel> endModels = processModel.getModels(EndModel.class);
|
||||
if (endModels != null) {
|
||||
endModels.forEach(endModel -> {
|
||||
recursionModel(processModel.getStart(), processInstance, processTaskList, hisProcessTaskList, endModel.getName(), vo);
|
||||
});
|
||||
}
|
||||
}
|
||||
}
|
||||
return vo;
|
||||
}
|
||||
|
||||
@Override
|
||||
public List<ProcessTaskVO> approvalRecord(Long processInstanceId) {
|
||||
|
||||
@@ -195,6 +195,11 @@ public class ProcessTaskServiceImpl extends BaseServiceImpl<ProcessTask> impleme
|
||||
// execution.getArgs().remove(key);
|
||||
// }
|
||||
|
||||
// 删一下吧,只保证退回的那个任务节点有这两个字段,不然要出问题喔
|
||||
if(execution.getArgs().containsKey("tf_sourceTaskKey")) {
|
||||
execution.getArgs().remove("tf_sourceTaskKey");
|
||||
execution.getArgs().remove("tf_audit");
|
||||
}
|
||||
processTask.setVariable(JSONUtil.toJsonStr(execution.getArgs()));
|
||||
processTask.setCreatedAt(now);
|
||||
processTask.setUpdatedAt(now);
|
||||
|
||||
@@ -15,7 +15,7 @@ import java.util.Base64;
|
||||
public class CspProcessor extends AbstractProcessor {
|
||||
|
||||
public void process(ActionContext ac) throws Throwable {
|
||||
// 1. 生成 nonce
|
||||
/*// 1. 生成 nonce
|
||||
String nonce = Base64.getEncoder().encodeToString(
|
||||
java.security.SecureRandom.getInstanceStrong().generateSeed(16)
|
||||
);
|
||||
@@ -34,7 +34,7 @@ public class CspProcessor extends AbstractProcessor {
|
||||
"frame-ancestors 'self'; " +
|
||||
"object-src 'self';";
|
||||
|
||||
ac.getResponse().setHeader("Content-Security-Policy", csp);
|
||||
ac.getResponse().setHeader("Content-Security-Policy", csp);*/
|
||||
|
||||
doNext(ac);
|
||||
}
|
||||
|
||||
+24
-7
@@ -3,12 +3,15 @@ package com.budwk.app.zhgh.democratic.proposal.controller.transact;
|
||||
import cn.dev33.satoken.annotation.SaCheckPermission;
|
||||
import cn.hutool.core.lang.Dict;
|
||||
import cn.hutool.core.util.ObjectUtil;
|
||||
import cn.hutool.json.JSONUtil;
|
||||
import com.budwk.app.base.constant.RoleConstant;
|
||||
import com.budwk.app.base.page.Pagination;
|
||||
import com.budwk.app.base.result.Result;
|
||||
import com.budwk.app.base.vo.LabelValueVO;
|
||||
import com.budwk.app.flow.constant.FlowConst;
|
||||
import com.budwk.app.flow.entity.ProcessInstance;
|
||||
import com.budwk.app.flow.entity.ProcessTask;
|
||||
import com.budwk.app.flow.enums.ProcessSubmitTypeEnum;
|
||||
import com.budwk.app.flow.enums.ProcessTaskStateEnum;
|
||||
import com.budwk.app.flow.service.FlowCommonService;
|
||||
import com.budwk.app.flow.service.ProcessTaskService;
|
||||
@@ -136,13 +139,19 @@ public class ProposalSchoolLeaderApprovalController {
|
||||
return Result.success();
|
||||
}
|
||||
|
||||
|
||||
|
||||
@At
|
||||
@SaCheckPermission("proposal.schoolLeaderApproval")
|
||||
@ApiOperation("执行任务")
|
||||
public Result executeTask(@Param("data") String data) {
|
||||
Dict args = Json.fromJson(Dict.class, data);
|
||||
|
||||
if("back".equals(args.getStr("tf_approval"))) {
|
||||
args.put("submitType", ProcessSubmitTypeEnum.JUMP.getCode());
|
||||
args.put("taskName", "committee");
|
||||
flowCommonService.executeTask(args);
|
||||
return Result.success();
|
||||
}
|
||||
|
||||
String proposalId = args.getStr("proposalId");
|
||||
|
||||
ProcessTask thisTask = dao.fetch(ProcessTask.class, args.getLong(FlowConst.PROCESS_TASK_ID_KEY));
|
||||
@@ -150,8 +159,20 @@ public class ProposalSchoolLeaderApprovalController {
|
||||
Dict dict = Json.fromJson(Dict.class, parentTask.getVariable());
|
||||
|
||||
args.put("tf_caseFilingResult", dict.getStr("tf_caseFilingResult"));
|
||||
args.put("tf_helpunitreply", dict.getStr("tf_helpunitreply"));
|
||||
args.put("tf_masterUnitId", dict.getStr("tf_masterUnitId"));
|
||||
args.put("tf_slaveUnitIds", dict.getObj("tf_slaveUnitIds"));
|
||||
|
||||
// 方案流程实例
|
||||
ProcessInstance instance = dao.fetch(ProcessInstance.class, Cnd.where(ProcessInstance::getId, "=", thisTask.getProcessInstanceId()));
|
||||
Dict instanceDict = Json.fromJson(Dict.class, instance.getVariable());
|
||||
instanceDict.put("tf_helpunitreply", dict.getStr("tf_helpunitreply"));
|
||||
instanceDict.put("tf_masterUnitId", dict.getStr("tf_masterUnitId"));
|
||||
instanceDict.put("tf_slaveUnitIds", dict.getObj("tf_slaveUnitIds"));
|
||||
instance.setVariable(JSONUtil.toJsonStr(instanceDict));
|
||||
|
||||
dao.update(instance);
|
||||
|
||||
// 方案流程实例
|
||||
|
||||
// 单条审核
|
||||
List<String> mergeProposalIds = proposalCommonService.mergeProposal(proposalId);
|
||||
@@ -161,7 +182,6 @@ public class ProposalSchoolLeaderApprovalController {
|
||||
}
|
||||
|
||||
// 并案审核
|
||||
|
||||
List<ProcessTask> mergeTasks = processTaskService.getDoingTaskByBizIdTaskName(mergeProposalIds, thisTask.getTaskName());
|
||||
for (ProcessTask mergeTask : mergeTasks) {
|
||||
Dict cloneArgs = args.clone();
|
||||
@@ -170,7 +190,4 @@ public class ProposalSchoolLeaderApprovalController {
|
||||
}
|
||||
return Result.success();
|
||||
}
|
||||
|
||||
|
||||
|
||||
}
|
||||
|
||||
+3
-2
@@ -114,10 +114,11 @@ public class ProposalSecondedController {
|
||||
LEFT JOIN teacher_congress_delegation tcd on tcd.id = info.delegationId
|
||||
$condition
|
||||
""");
|
||||
sql.setParam("seconderId", SecurityUtil.getUserId());
|
||||
|
||||
Cnd cnd = Cnd.NEW();
|
||||
cnd.and("t.taskName", "in", List.of("invite", "second", "delegation", "committee"));
|
||||
cnd.and(new Static("ps.isAgree is null"));
|
||||
sql.setParam("seconderId", SecurityUtil.getUserId());
|
||||
cnd.and("ps.isAgree", "is", null);
|
||||
|
||||
if (!AuthUtil.hasRole(RoleConstant.SYSADMIN.name())) {
|
||||
cnd.and("ta.actorId", "in", List.of(SecurityUtil.getUserId()));
|
||||
|
||||
+2
-2
@@ -53,8 +53,8 @@ public class ProposalUnSubmitQueryController {
|
||||
tcd.name as delegationName,
|
||||
pt.name as typeName,
|
||||
manner.name as mannerName,
|
||||
(select count(DISTINCT(seconderId))from proposal_seconded where proposalId = info.id) AS secondedNum,
|
||||
(select count(DISTINCT(seconderId))from proposal_seconded where proposalId = info.id and isAgree = 1) AS secondedAgreeNum,
|
||||
(select count(DISTINCT(seconderId))from proposal_second where proposalId = info.id) AS secondedNum,
|
||||
(select count(DISTINCT(seconderId))from proposal_second where proposalId = info.id and isAgree = 1) AS secondedAgreeNum,
|
||||
IF(info.stateCode <= 200 ,'未审核','已审核') AS delegationAudit
|
||||
FROM
|
||||
proposal_info info
|
||||
|
||||
+16
-19
@@ -1,16 +1,24 @@
|
||||
package com.budwk.app.zhgh.democratic.proposal.handler;
|
||||
|
||||
import cn.hutool.core.lang.Dict;
|
||||
import com.budwk.app.base.constant.RoleConstant;
|
||||
import com.budwk.app.base.exception.BaseException;
|
||||
import com.budwk.app.flow.engine.AssignmentHandler;
|
||||
import com.budwk.app.flow.engine.core.Execution;
|
||||
import com.budwk.app.flow.engine.core.ServiceContext;
|
||||
import com.budwk.app.flow.engine.model.TaskModel;
|
||||
import com.budwk.app.flow.entity.Candidate;
|
||||
import com.budwk.app.sys.models.Sys_role;
|
||||
import com.budwk.app.sys.models.Sys_user;
|
||||
import com.budwk.app.sys.models.Sys_user_role;
|
||||
import com.budwk.app.sys.services.SysRoleService;
|
||||
import com.budwk.app.web.controllers.open.commons.service.CommonService;
|
||||
import com.budwk.app.zhgh.democratic.proposal.models.ProposalConfig;
|
||||
import org.nutz.dao.Cnd;
|
||||
import org.nutz.dao.Dao;
|
||||
import org.nutz.dao.Sqls;
|
||||
import org.nutz.dao.sql.Sql;
|
||||
import org.nutz.lang.Lang;
|
||||
import org.nutz.lang.util.NutMap;
|
||||
|
||||
import java.util.List;
|
||||
@@ -22,30 +30,19 @@ public class ProposalSchoolLeaderAssignmentHandler implements AssignmentHandler
|
||||
|
||||
@Override
|
||||
public List<String> assign(TaskModel model, Execution execution) {
|
||||
Dao dao = ServiceContext.find(Dao.class);
|
||||
ProposalConfig proposalConfig = dao.fetch(ProposalConfig.class, Cnd.NEW());
|
||||
List<String> unitIds = proposalConfig.getSchoolLeaderUnitIds();
|
||||
Sql sql = Sqls.create("select id,username,loginname from vw_user where unitId in (@unitIds)");
|
||||
sql.setParam("unitIds", unitIds);
|
||||
sql.setCallback(Sqls.callback.maps());
|
||||
dao.execute(sql);
|
||||
List<NutMap> list = sql.getList(NutMap.class);
|
||||
CommonService commonService = ServiceContext.find(CommonService.class);
|
||||
List<Sys_user> users = commonService.findUserInfoByRoleCode(RoleConstant.PROPOSAL_BRANCH_SCHOOL_LEADER.name());
|
||||
|
||||
List<Candidate> candidates = list.stream().map(item -> Candidate.builder()
|
||||
.userId(item.getString("id"))
|
||||
.userName(item.getString("username"))
|
||||
.ext(Dict.of("loginName", item.getString("loginname")))
|
||||
.build()
|
||||
).toList();
|
||||
if(candidates.size() > 0) {
|
||||
return candidates.stream().map(Candidate::getUserId).toList();
|
||||
}
|
||||
return List.of();
|
||||
if(Lang.isEmpty(users)) {
|
||||
throw new BaseException("未查询到相关审批人");
|
||||
}
|
||||
|
||||
return users.stream().map(Sys_user::getId).toList();
|
||||
}
|
||||
|
||||
@Override
|
||||
public String getMessage() {
|
||||
return "指定主管校领导";
|
||||
return "获取提案主管校领导";
|
||||
}
|
||||
|
||||
@Override
|
||||
|
||||
+7
@@ -3,6 +3,7 @@ package com.budwk.app.zhgh.democratic.proposal.interceptor;
|
||||
import cn.hutool.core.lang.Dict;
|
||||
import cn.hutool.core.util.ObjectUtil;
|
||||
import cn.hutool.core.util.StrUtil;
|
||||
import cn.hutool.json.JSONUtil;
|
||||
import com.budwk.app.base.constant.RoleConstant;
|
||||
import com.budwk.app.flow.constant.FlowConst;
|
||||
import com.budwk.app.flow.engine.FlowInterceptor;
|
||||
@@ -100,5 +101,11 @@ public class ProposalCaseFilingInterceptor implements FlowInterceptor {
|
||||
}
|
||||
dao.update(processTaskList,"variable");
|
||||
|
||||
String helpUnitReply = execution.getArgs().getStr(FlowConst.TASK_FORM_DATA_PREFIX + "helpunitreply");
|
||||
ProcessTask processTask = execution.getProcessTask();
|
||||
Dict dict = JSONUtil.toBean(processTask.getVariable(), Dict.class);
|
||||
dict.set(FlowConst.TASK_FORM_DATA_PREFIX + "helpunitreply", helpUnitReply);
|
||||
processTask.setVariable(JSONUtil.toJsonStr(dict));
|
||||
dao.update(processTask);
|
||||
}
|
||||
}
|
||||
|
||||
Reference in New Issue
Block a user