包头流程绑定表单字段
This commit is contained in:
parent
132d2f544f
commit
009318295c
@ -20,6 +20,9 @@ import java.util.Map;
|
|||||||
@Data
|
@Data
|
||||||
public class ApprovalProps implements Serializable {
|
public class ApprovalProps implements Serializable {
|
||||||
private static final long serialVersionUID = -45475579271153023L;
|
private static final long serialVersionUID = -45475579271153023L;
|
||||||
|
private String saveDateTime;
|
||||||
|
|
||||||
|
private String saveFormUser;
|
||||||
|
|
||||||
private ApprovalTypeEnum assignedType;
|
private ApprovalTypeEnum assignedType;
|
||||||
|
|
||||||
|
|||||||
@ -7,6 +7,8 @@ import cn.hutool.core.collection.ConcurrentHashSet;
|
|||||||
import cn.hutool.core.date.DateUtil;
|
import cn.hutool.core.date.DateUtil;
|
||||||
import cn.hutool.core.util.ObjectUtil;
|
import cn.hutool.core.util.ObjectUtil;
|
||||||
import cn.hutool.core.util.StrUtil;
|
import cn.hutool.core.util.StrUtil;
|
||||||
|
import com.alibaba.fastjson2.JSON;
|
||||||
|
import com.alibaba.fastjson2.JSONArray;
|
||||||
import com.alibaba.fastjson2.JSONObject;
|
import com.alibaba.fastjson2.JSONObject;
|
||||||
import com.baomidou.mybatisplus.core.conditions.query.LambdaQueryWrapper;
|
import com.baomidou.mybatisplus.core.conditions.query.LambdaQueryWrapper;
|
||||||
import com.baomidou.mybatisplus.extension.plugins.pagination.Page;
|
import com.baomidou.mybatisplus.extension.plugins.pagination.Page;
|
||||||
@ -18,6 +20,7 @@ import com.wflow.mapper.WflowModelHistorysMapper;
|
|||||||
import com.wflow.mapper.WflowModelsMapper;
|
import com.wflow.mapper.WflowModelsMapper;
|
||||||
import com.wflow.service.OrgRepositoryService;
|
import com.wflow.service.OrgRepositoryService;
|
||||||
import com.wflow.utils.UserUtil;
|
import com.wflow.utils.UserUtil;
|
||||||
|
import com.wflow.workflow.UELTools;
|
||||||
import com.wflow.workflow.bean.dto.NotifyDto;
|
import com.wflow.workflow.bean.dto.NotifyDto;
|
||||||
import com.wflow.workflow.bean.dto.ProcessInstanceOwnerDto;
|
import com.wflow.workflow.bean.dto.ProcessInstanceOwnerDto;
|
||||||
import com.wflow.workflow.bean.process.OrgUser;
|
import com.wflow.workflow.bean.process.OrgUser;
|
||||||
@ -26,8 +29,12 @@ import com.wflow.workflow.bean.process.props.CcProps;
|
|||||||
import com.wflow.workflow.bean.vo.*;
|
import com.wflow.workflow.bean.vo.*;
|
||||||
import com.wflow.workflow.config.WflowGlobalVarDef;
|
import com.wflow.workflow.config.WflowGlobalVarDef;
|
||||||
import com.wflow.workflow.extension.cmd.RecallToHisApprovalNodeCmd;
|
import com.wflow.workflow.extension.cmd.RecallToHisApprovalNodeCmd;
|
||||||
import com.wflow.workflow.service.*;
|
import com.wflow.workflow.service.BusinessDataStorageService;
|
||||||
|
import com.wflow.workflow.service.NotifyService;
|
||||||
|
import com.wflow.workflow.service.ProcessTaskService;
|
||||||
|
import com.wflow.workflow.service.UserDeptOrLeaderService;
|
||||||
import com.wflow.workflow.utils.FlowableUtils;
|
import com.wflow.workflow.utils.FlowableUtils;
|
||||||
|
import com.zhgd.xmgl.security.util.SecurityUtils;
|
||||||
import com.zhgd.xmgl.tenant.TenantContextHolder;
|
import com.zhgd.xmgl.tenant.TenantContextHolder;
|
||||||
import lombok.extern.slf4j.Slf4j;
|
import lombok.extern.slf4j.Slf4j;
|
||||||
import org.apache.commons.lang3.StringUtils;
|
import org.apache.commons.lang3.StringUtils;
|
||||||
@ -49,6 +56,7 @@ import org.flowable.task.api.history.HistoricTaskInstance;
|
|||||||
import org.flowable.task.service.history.NativeHistoricTaskInstanceQuery;
|
import org.flowable.task.service.history.NativeHistoricTaskInstanceQuery;
|
||||||
import org.flowable.variable.api.history.HistoricVariableInstance;
|
import org.flowable.variable.api.history.HistoricVariableInstance;
|
||||||
import org.springframework.beans.factory.annotation.Autowired;
|
import org.springframework.beans.factory.annotation.Autowired;
|
||||||
|
import org.springframework.context.annotation.Lazy;
|
||||||
import org.springframework.stereotype.Service;
|
import org.springframework.stereotype.Service;
|
||||||
import org.springframework.transaction.annotation.Transactional;
|
import org.springframework.transaction.annotation.Transactional;
|
||||||
|
|
||||||
@ -62,6 +70,12 @@ import java.util.stream.Collectors;
|
|||||||
@Slf4j
|
@Slf4j
|
||||||
@Service("processTaskService")
|
@Service("processTaskService")
|
||||||
public class ProcessTaskServiceImpl implements ProcessTaskService {
|
public class ProcessTaskServiceImpl implements ProcessTaskService {
|
||||||
|
@Lazy
|
||||||
|
@Autowired
|
||||||
|
private WflowModelHistorysMapper modelHistorysMapper;
|
||||||
|
|
||||||
|
@Autowired
|
||||||
|
private UELTools uelTools;
|
||||||
|
|
||||||
@Autowired
|
@Autowired
|
||||||
private TaskService taskService;
|
private TaskService taskService;
|
||||||
@ -337,6 +351,63 @@ public class ProcessTaskServiceImpl implements ProcessTaskService {
|
|||||||
return page;
|
return page;
|
||||||
}
|
}
|
||||||
|
|
||||||
|
/**
|
||||||
|
* 获取表单id的现在时间
|
||||||
|
* @param instanceId
|
||||||
|
* @param fieldId
|
||||||
|
*/
|
||||||
|
private String getFormDataNowTime(String instanceId, String fieldId) {
|
||||||
|
String format = "yyyy-MM-dd HH:mm:ss";
|
||||||
|
//先查实例,然后判断是子流程还是主流程
|
||||||
|
HistoricProcessInstance instance = historyService.createHistoricProcessInstanceQuery()
|
||||||
|
.processInstanceId(instanceId).singleResult();
|
||||||
|
//是否是子流程
|
||||||
|
boolean isSub = StrUtil.isNotBlank(instance.getSuperProcessInstanceId());
|
||||||
|
HistoricProcessInstance mainInst = isSub ? null : instance;
|
||||||
|
if (isSub) {
|
||||||
|
//查出主流程表单数据
|
||||||
|
mainInst = historyService.createHistoricProcessInstanceQuery()
|
||||||
|
.processInstanceId(instance.getSuperProcessInstanceId()).singleResult();
|
||||||
|
}
|
||||||
|
//搜索当前版本流程的配置
|
||||||
|
WflowModelHistorys modelHistory = modelHistorysMapper.selectOne(new LambdaQueryWrapper<>(WflowModelHistorys.builder()
|
||||||
|
.processDefId(mainInst.getProcessDefinitionId()).version(mainInst.getProcessDefinitionVersion()).build()));
|
||||||
|
String formItems = modelHistory.getFormItems();
|
||||||
|
JSONArray root = JSON.parseArray(formItems);
|
||||||
|
boolean find = false;
|
||||||
|
for (int i = 0; i < root.size(); i++) {
|
||||||
|
JSONObject jo = root.getJSONObject(i);
|
||||||
|
String valueType = jo.getString("valueType");
|
||||||
|
if (Objects.equals(valueType, "Array")) {
|
||||||
|
JSONArray items = jo.getJSONObject("props").getJSONArray("items");
|
||||||
|
for (int j = 0; j < items.size(); j++) {
|
||||||
|
JSONObject jo1 = items.getJSONObject(j);
|
||||||
|
String valueType1 = jo.getString("valueType");
|
||||||
|
if (Objects.equals(valueType1, "Date")) {
|
||||||
|
if (jo1.getString("id").equals(fieldId)) {
|
||||||
|
find = true;
|
||||||
|
format = jo1.getJSONObject("props").getString("format");
|
||||||
|
break;
|
||||||
|
}
|
||||||
|
}
|
||||||
|
}
|
||||||
|
} else {
|
||||||
|
String valueType1 = jo.getString("valueType");
|
||||||
|
if (Objects.equals(valueType1, "Date")) {
|
||||||
|
if (jo.getString("id").equals(fieldId)) {
|
||||||
|
find = true;
|
||||||
|
format = jo.getJSONObject("props").getString("format");
|
||||||
|
break;
|
||||||
|
}
|
||||||
|
}
|
||||||
|
}
|
||||||
|
if (find) {
|
||||||
|
break;
|
||||||
|
}
|
||||||
|
}
|
||||||
|
return DateUtil.format(new Date(), format);
|
||||||
|
}
|
||||||
|
|
||||||
@Override
|
@Override
|
||||||
@Transactional
|
@Transactional
|
||||||
public void approvalTask(ProcessHandlerParamsVo params) {
|
public void approvalTask(ProcessHandlerParamsVo params) {
|
||||||
@ -346,6 +417,29 @@ public class ProcessTaskServiceImpl implements ProcessTaskService {
|
|||||||
if (StrUtil.isNotBlank(params.getTaskId())) {
|
if (StrUtil.isNotBlank(params.getTaskId())) {
|
||||||
task = taskService.createTaskQuery().taskId(params.getTaskId()).active().singleResult();
|
task = taskService.createTaskQuery().taskId(params.getTaskId()).active().singleResult();
|
||||||
}
|
}
|
||||||
|
String instanceId = params.getInstanceId();
|
||||||
|
String processDefinitionId = task.getProcessDefinitionId();
|
||||||
|
Map<String, Object> contextVar = uelTools.getContextVar(instanceId, processDefinitionId);
|
||||||
|
Map map = (Map) contextVar.get(WflowGlobalVarDef.WFLOW_NODE_PROPS);
|
||||||
|
Object nodeProps = map.get(task.getTaskDefinitionKey());
|
||||||
|
Map<String, JSONArray> nodeLis = null;
|
||||||
|
if (nodeProps instanceof ApprovalProps) {
|
||||||
|
ApprovalProps props = (ApprovalProps) nodeProps;
|
||||||
|
String saveFormUser = props.getSaveFormUser();
|
||||||
|
if (StrUtil.isNotBlank(saveFormUser)) {
|
||||||
|
JSONObject jsonObject = new JSONObject();
|
||||||
|
jsonObject.put("name", SecurityUtils.getUser().getRealName());
|
||||||
|
jsonObject.put("id", userId);
|
||||||
|
jsonObject.put("type", "user");
|
||||||
|
jsonObject.put("selected", true);
|
||||||
|
params.getFormData().put(saveFormUser, Arrays.asList(jsonObject));
|
||||||
|
}
|
||||||
|
String saveDateTime = props.getSaveDateTime();
|
||||||
|
if (StrUtil.isNotBlank(saveDateTime)) {
|
||||||
|
params.getFormData().put(saveDateTime, getFormDataNowTime(instanceId, saveDateTime));
|
||||||
|
}
|
||||||
|
}
|
||||||
|
|
||||||
boolean isComment = ProcessHandlerParamsVo.Action.comment.equals(params.getAction());
|
boolean isComment = ProcessHandlerParamsVo.Action.comment.equals(params.getAction());
|
||||||
if (hasComment(params.getComment())) {
|
if (hasComment(params.getComment())) {
|
||||||
boolean putComment = Objects.nonNull(task) && userId.equals(task.getAssignee());
|
boolean putComment = Objects.nonNull(task) && userId.equals(task.getAssignee());
|
||||||
@ -355,7 +449,7 @@ public class ProcessTaskServiceImpl implements ProcessTaskService {
|
|||||||
if (!(isComment || putComment)){
|
if (!(isComment || putComment)){
|
||||||
throw new BusinessException("任务不存在,请刷新数据");
|
throw new BusinessException("任务不存在,请刷新数据");
|
||||||
}
|
}
|
||||||
taskService.addComment(params.getTaskId(), params.getInstanceId(), JSONObject.toJSONString(params.getComment()));
|
taskService.addComment(params.getTaskId(), instanceId, JSONObject.toJSONString(params.getComment()));
|
||||||
}
|
}
|
||||||
if (StrUtil.isNotBlank(params.getSignature())) {
|
if (StrUtil.isNotBlank(params.getSignature())) {
|
||||||
if (params.getUpdateSign()) {
|
if (params.getUpdateSign()) {
|
||||||
@ -380,20 +474,20 @@ public class ProcessTaskServiceImpl implements ProcessTaskService {
|
|||||||
switch (params.getAction()) {
|
switch (params.getAction()) {
|
||||||
case agree:
|
case agree:
|
||||||
case refuse:
|
case refuse:
|
||||||
businessDataService.updateInstanceFormData(userId, params.getInstanceId(), params.getFormData());
|
businessDataService.updateInstanceFormData(userId, instanceId, params.getFormData());
|
||||||
doApproval(task, params);
|
doApproval(task, params);
|
||||||
break;
|
break;
|
||||||
case recall: //退回
|
case recall: //退回
|
||||||
doRecallTask(task, userId, params);
|
doRecallTask(task, userId, params);
|
||||||
break;
|
break;
|
||||||
case transfer: //转交
|
case transfer: //转交
|
||||||
businessDataService.updateInstanceFormData(userId, params.getInstanceId(), params.getFormData());
|
businessDataService.updateInstanceFormData(userId, instanceId, params.getFormData());
|
||||||
doTransferTask(task, params, userId);
|
doTransferTask(task, params, userId);
|
||||||
break;
|
break;
|
||||||
case afterAdd:
|
case afterAdd:
|
||||||
case beforeAdd: //加签,暂时只支持后加签
|
case beforeAdd: //加签,暂时只支持后加签
|
||||||
//加签如果是顺序会签,暂时先禁止,
|
//加签如果是顺序会签,暂时先禁止,
|
||||||
BpmnModel bpmnModel = repositoryService.getBpmnModel(task.getProcessDefinitionId());
|
BpmnModel bpmnModel = repositoryService.getBpmnModel(processDefinitionId);
|
||||||
UserTask userTask = (UserTask) bpmnModel.getMainProcess().getFlowElement(task.getTaskDefinitionKey());
|
UserTask userTask = (UserTask) bpmnModel.getMainProcess().getFlowElement(task.getTaskDefinitionKey());
|
||||||
MultiInstanceLoopCharacteristics loopCharacteristics = userTask.getLoopCharacteristics();
|
MultiInstanceLoopCharacteristics loopCharacteristics = userTask.getLoopCharacteristics();
|
||||||
if (Objects.isNull(loopCharacteristics) || loopCharacteristics.isSequential()) {
|
if (Objects.isNull(loopCharacteristics) || loopCharacteristics.isSequential()) {
|
||||||
@ -405,8 +499,8 @@ public class ProcessTaskServiceImpl implements ProcessTaskService {
|
|||||||
break;
|
break;
|
||||||
case cancel:
|
case cancel:
|
||||||
List<ActivityInstance> instances = runtimeService.createActivityInstanceQuery()
|
List<ActivityInstance> instances = runtimeService.createActivityInstanceQuery()
|
||||||
.processInstanceId(params.getInstanceId()).unfinished().list();
|
.processInstanceId(instanceId).unfinished().list();
|
||||||
doCancelProcess(params.getInstanceId(),
|
doCancelProcess(instanceId,
|
||||||
instances.stream()
|
instances.stream()
|
||||||
.filter(v -> v.getActivityType().equalsIgnoreCase("userTask"))
|
.filter(v -> v.getActivityType().equalsIgnoreCase("userTask"))
|
||||||
.findFirst().get().getActivityId());
|
.findFirst().get().getActivityId());
|
||||||
|
|||||||
Loading…
x
Reference in New Issue
Block a user