增加动态表单依赖,增加节点与表单字段关联功能
This commit is contained in:
parent
537b74d96c
commit
6a879782de
@ -14,7 +14,7 @@
|
||||
<dependencies>
|
||||
<dependency>
|
||||
<groupId>ink.wgink</groupId>
|
||||
<artifactId>common</artifactId>
|
||||
<artifactId>module-form</artifactId>
|
||||
<version>1.0-SNAPSHOT</version>
|
||||
</dependency>
|
||||
|
||||
|
@ -69,9 +69,9 @@ public class ActivitiController extends DefaultBaseController {
|
||||
@ApiImplicitParam(name = "modelId", value = "模型ID", paramType = "path")
|
||||
})
|
||||
@ApiResponses({@ApiResponse(code = 400, message = "请求失败", response = ErrorResult.class)})
|
||||
@PutMapping("publish/{modelId}")
|
||||
public SuccessResult publish(@PathVariable("modelId") String modelId) throws IOException {
|
||||
activitiService.publish(modelId);
|
||||
@PutMapping("deploy/{modelId}")
|
||||
public SuccessResult deploy(@PathVariable("modelId") String modelId) throws IOException {
|
||||
activitiService.saveDeploy(modelId);
|
||||
return new SuccessResult();
|
||||
}
|
||||
|
||||
@ -80,9 +80,9 @@ public class ActivitiController extends DefaultBaseController {
|
||||
@ApiImplicitParam(name = "modelId", value = "模型ID", paramType = "path")
|
||||
})
|
||||
@ApiResponses({@ApiResponse(code = 400, message = "请求失败", response = ErrorResult.class)})
|
||||
@PutMapping("revoke-publish/{modelId}")
|
||||
public SuccessResult revokePublish(@PathVariable("modelId") String modelId) {
|
||||
activitiService.revokePublish(modelId);
|
||||
@PutMapping("revoke-deploy/{modelId}")
|
||||
public SuccessResult revokeDeploy(@PathVariable("modelId") String modelId) {
|
||||
activitiService.revokeDeploy(modelId);
|
||||
return new SuccessResult();
|
||||
}
|
||||
|
||||
|
@ -2,6 +2,7 @@ package ink.wgink.module.activiti.controller.api;
|
||||
|
||||
import ink.wgink.common.base.DefaultBaseController;
|
||||
import ink.wgink.interfaces.consts.ISystemConstant;
|
||||
import ink.wgink.module.activiti.pojo.dtos.ActivitiFlowNodeDTO;
|
||||
import ink.wgink.module.activiti.pojo.dtos.ActivitiProcdefDTO;
|
||||
import ink.wgink.module.activiti.service.activiti.IActivitiProcdefService;
|
||||
import ink.wgink.pojo.ListPage;
|
||||
@ -10,6 +11,7 @@ import ink.wgink.pojo.result.SuccessResultList;
|
||||
import io.swagger.annotations.*;
|
||||
import org.springframework.beans.factory.annotation.Autowired;
|
||||
import org.springframework.web.bind.annotation.GetMapping;
|
||||
import org.springframework.web.bind.annotation.PathVariable;
|
||||
import org.springframework.web.bind.annotation.RequestMapping;
|
||||
import org.springframework.web.bind.annotation.RestController;
|
||||
|
||||
@ -41,4 +43,14 @@ public class ActivitiProcdefController extends DefaultBaseController {
|
||||
return activitiProcdefService.listPage(page.getPage(), page.getRows());
|
||||
}
|
||||
|
||||
@ApiOperation(value = "通过部署ID获取任务列表", notes = "通过部署ID获取任务列表接口")
|
||||
@ApiImplicitParams({
|
||||
@ApiImplicitParam(name = "deploymentId", value = "部署ID", paramType = "path"),
|
||||
})
|
||||
@ApiResponses({@ApiResponse(code = 400, message = "请求失败", response = ErrorResult.class)})
|
||||
@GetMapping("list-flow-node/deployment-id/{deploymentId}")
|
||||
public List<ActivitiFlowNodeDTO> listFlowNodeByDefineId(@PathVariable("deploymentId") String deploymentId) {
|
||||
return activitiProcdefService.listFlowNodeByDeploymentId(deploymentId);
|
||||
}
|
||||
|
||||
}
|
||||
|
@ -0,0 +1,25 @@
|
||||
package ink.wgink.module.activiti.controller.api.oa;
|
||||
|
||||
import ink.wgink.common.base.DefaultBaseController;
|
||||
import ink.wgink.interfaces.consts.ISystemConstant;
|
||||
import ink.wgink.module.activiti.service.oa.INodeFieldService;
|
||||
import io.swagger.annotations.Api;
|
||||
import org.springframework.beans.factory.annotation.Autowired;
|
||||
import org.springframework.web.bind.annotation.RequestMapping;
|
||||
import org.springframework.web.bind.annotation.RestController;
|
||||
|
||||
/**
|
||||
* @Description: 表单字段与流程节点
|
||||
* @Author: WenG
|
||||
* @Date: 2022/3/17 19:49
|
||||
* @Version: 1.0
|
||||
**/
|
||||
@Api(tags = ISystemConstant.API_TAGS_SYSTEM_PREFIX + "表单字段与流程节点")
|
||||
@RestController
|
||||
@RequestMapping(ISystemConstant.API_PREFIX + "/node-field")
|
||||
public class NodeFieldController extends DefaultBaseController {
|
||||
|
||||
@Autowired
|
||||
private INodeFieldService nodeFieldService;
|
||||
|
||||
}
|
@ -0,0 +1,34 @@
|
||||
package ink.wgink.module.activiti.dao.oa;
|
||||
|
||||
import ink.wgink.exceptions.RemoveException;
|
||||
import ink.wgink.exceptions.SaveException;
|
||||
import ink.wgink.interfaces.init.IInitBaseTable;
|
||||
import org.springframework.stereotype.Repository;
|
||||
|
||||
import java.util.Map;
|
||||
|
||||
/**
|
||||
* @Description: 表单字段与流程节点
|
||||
* @Author: WenG
|
||||
* @Date: 2022/3/17 20:09
|
||||
* @Version: 1.0
|
||||
**/
|
||||
@Repository
|
||||
public interface INodeFieldDao extends IInitBaseTable {
|
||||
|
||||
/**
|
||||
* 新增
|
||||
*
|
||||
* @param params
|
||||
* @throws SaveException
|
||||
*/
|
||||
void save(Map<String, Object> params) throws SaveException;
|
||||
|
||||
/**
|
||||
* 删除
|
||||
*
|
||||
* @param params
|
||||
* @throws RemoveException
|
||||
*/
|
||||
void delete(Map<String, Object> params) throws RemoveException;
|
||||
}
|
@ -0,0 +1,56 @@
|
||||
package ink.wgink.module.activiti.pojo.dtos;
|
||||
|
||||
/**
|
||||
* @Description: 表单节点
|
||||
* @Author: WenG
|
||||
* @Date: 2022/3/17 18:04
|
||||
* @Version: 1.0
|
||||
**/
|
||||
public class ActivitiFlowNodeDTO {
|
||||
|
||||
private String type;
|
||||
private String id;
|
||||
private String name;
|
||||
private String summary;
|
||||
private String formKey;
|
||||
|
||||
public String getType() {
|
||||
return type;
|
||||
}
|
||||
|
||||
public void setType(String type) {
|
||||
this.type = type;
|
||||
}
|
||||
|
||||
public String getId() {
|
||||
return id;
|
||||
}
|
||||
|
||||
public void setId(String id) {
|
||||
this.id = id;
|
||||
}
|
||||
|
||||
public String getName() {
|
||||
return name;
|
||||
}
|
||||
|
||||
public void setName(String name) {
|
||||
this.name = name;
|
||||
}
|
||||
|
||||
public String getSummary() {
|
||||
return summary;
|
||||
}
|
||||
|
||||
public void setSummary(String summary) {
|
||||
this.summary = summary;
|
||||
}
|
||||
|
||||
public String getFormKey() {
|
||||
return formKey;
|
||||
}
|
||||
|
||||
public void setFormKey(String formKey) {
|
||||
this.formKey = formKey;
|
||||
}
|
||||
}
|
@ -0,0 +1,64 @@
|
||||
package ink.wgink.module.activiti.pojo.vos.oa;
|
||||
|
||||
import ink.wgink.annotation.CheckEmptyAnnotation;
|
||||
import ink.wgink.annotation.CheckListAnnotation;
|
||||
import ink.wgink.annotation.CheckListBeanAnnotation;
|
||||
import io.swagger.annotations.ApiModel;
|
||||
import io.swagger.annotations.ApiModelProperty;
|
||||
|
||||
import java.util.List;
|
||||
|
||||
/**
|
||||
* @Description: 表单字段与流程节点更新
|
||||
* @Author: WenG
|
||||
* @Date: 2022/3/17 20:12
|
||||
* @Version: 1.0
|
||||
**/
|
||||
@ApiModel
|
||||
public class NodeFieldUpdateVO {
|
||||
|
||||
@ApiModelProperty(name = "deploymentId", value = "部署ID")
|
||||
@CheckEmptyAnnotation(name = "部署ID")
|
||||
private String deploymentId;
|
||||
@ApiModelProperty(name = "formId", value = "表单ID")
|
||||
@CheckEmptyAnnotation(name = "表单ID")
|
||||
private String formId;
|
||||
@ApiModelProperty(name = "flowNodeId", value = "流程节点ID")
|
||||
@CheckEmptyAnnotation(name = "流程节点ID")
|
||||
private String flowNodeId;
|
||||
@CheckListAnnotation(name = "表单字段列表")
|
||||
@CheckListBeanAnnotation
|
||||
private List<NodeFieldVO> formFields;
|
||||
|
||||
public String getDeploymentId() {
|
||||
return deploymentId;
|
||||
}
|
||||
|
||||
public void setDeploymentId(String deploymentId) {
|
||||
this.deploymentId = deploymentId;
|
||||
}
|
||||
|
||||
public String getFormId() {
|
||||
return formId;
|
||||
}
|
||||
|
||||
public void setFormId(String formId) {
|
||||
this.formId = formId;
|
||||
}
|
||||
|
||||
public String getFlowNodeId() {
|
||||
return flowNodeId;
|
||||
}
|
||||
|
||||
public void setFlowNodeId(String flowNodeId) {
|
||||
this.flowNodeId = flowNodeId;
|
||||
}
|
||||
|
||||
public List<NodeFieldVO> getFormFields() {
|
||||
return formFields;
|
||||
}
|
||||
|
||||
public void setFormFields(List<NodeFieldVO> formFields) {
|
||||
this.formFields = formFields;
|
||||
}
|
||||
}
|
@ -0,0 +1,49 @@
|
||||
package ink.wgink.module.activiti.pojo.vos.oa;
|
||||
|
||||
import ink.wgink.annotation.CheckEmptyAnnotation;
|
||||
import io.swagger.annotations.ApiModel;
|
||||
import io.swagger.annotations.ApiModelProperty;
|
||||
|
||||
/**
|
||||
* @Description: 表单字段与流程节点
|
||||
* @Author: WenG
|
||||
* @Date: 2022/3/17 19:51
|
||||
* @Version: 1.0
|
||||
**/
|
||||
@ApiModel
|
||||
public class NodeFieldVO {
|
||||
|
||||
@ApiModelProperty(name = "fieldName", value = "字段名")
|
||||
@CheckEmptyAnnotation(name = "字段名")
|
||||
private String fieldName;
|
||||
@ApiModelProperty(name = "isVisible", value = "是否可见")
|
||||
@CheckEmptyAnnotation(name = "是否可见")
|
||||
private Integer isVisible;
|
||||
@ApiModelProperty(name = "isEditable", value = "是否可编辑")
|
||||
@CheckEmptyAnnotation(name = "是否可编辑")
|
||||
private Integer isEditable;
|
||||
|
||||
public String getFieldName() {
|
||||
return fieldName;
|
||||
}
|
||||
|
||||
public void setFieldName(String fieldName) {
|
||||
this.fieldName = fieldName;
|
||||
}
|
||||
|
||||
public Integer getIsVisible() {
|
||||
return isVisible;
|
||||
}
|
||||
|
||||
public void setIsVisible(Integer isVisible) {
|
||||
this.isVisible = isVisible;
|
||||
}
|
||||
|
||||
public Integer getIsEditable() {
|
||||
return isEditable;
|
||||
}
|
||||
|
||||
public void setIsEditable(Integer isEditable) {
|
||||
this.isEditable = isEditable;
|
||||
}
|
||||
}
|
@ -1,7 +1,9 @@
|
||||
package ink.wgink.module.activiti.service.activiti;
|
||||
|
||||
import ink.wgink.module.activiti.pojo.dtos.ActivitiFlowNodeDTO;
|
||||
import ink.wgink.module.activiti.pojo.dtos.ActivitiProcdefDTO;
|
||||
import ink.wgink.pojo.result.SuccessResultList;
|
||||
import org.activiti.bpmn.model.BpmnModel;
|
||||
|
||||
import java.util.List;
|
||||
|
||||
@ -16,4 +18,7 @@ public interface IActivitiProcdefService {
|
||||
|
||||
SuccessResultList<List<ActivitiProcdefDTO>> listPage(int page, int rows);
|
||||
|
||||
List<ActivitiFlowNodeDTO> listFlowNodeByDeploymentId(String deploymentId);
|
||||
|
||||
List<ActivitiFlowNodeDTO> listFlowNodeByModel(BpmnModel bpmnModel);
|
||||
}
|
||||
|
@ -42,14 +42,14 @@ public interface IActivitiService {
|
||||
*
|
||||
* @param modelId
|
||||
*/
|
||||
void publish(String modelId) throws IOException;
|
||||
void saveDeploy(String modelId) throws IOException;
|
||||
|
||||
/**
|
||||
* 撤销发布模型
|
||||
*
|
||||
* @param modelId
|
||||
*/
|
||||
void revokePublish(String modelId);
|
||||
void revokeDeploy(String modelId);
|
||||
|
||||
/**
|
||||
* 模型列表
|
||||
|
@ -1,9 +1,14 @@
|
||||
package ink.wgink.module.activiti.service.activiti.impl;
|
||||
|
||||
import ink.wgink.common.base.DefaultBaseService;
|
||||
import ink.wgink.exceptions.SearchException;
|
||||
import ink.wgink.exceptions.base.SystemException;
|
||||
import ink.wgink.module.activiti.pojo.dtos.ActivitiFlowNodeDTO;
|
||||
import ink.wgink.module.activiti.pojo.dtos.ActivitiProcdefDTO;
|
||||
import ink.wgink.module.activiti.service.activiti.IActivitiProcdefService;
|
||||
import ink.wgink.pojo.result.SuccessResultList;
|
||||
import org.activiti.bpmn.model.Process;
|
||||
import org.activiti.bpmn.model.*;
|
||||
import org.activiti.engine.RepositoryService;
|
||||
import org.activiti.engine.repository.ProcessDefinition;
|
||||
import org.activiti.engine.repository.ProcessDefinitionQuery;
|
||||
@ -38,7 +43,50 @@ public class ActivitiProcdefServiceImpl extends DefaultBaseService implements IA
|
||||
BeanUtils.copyProperties(processDefinition, activitiProcdefDTO);
|
||||
activitiProcdefDTOs.add(activitiProcdefDTO);
|
||||
});
|
||||
|
||||
return new SuccessResultList<>(activitiProcdefDTOs, page, processDefinitionQuery.count());
|
||||
}
|
||||
|
||||
@Override
|
||||
public List<ActivitiFlowNodeDTO> listFlowNodeByDeploymentId(String deploymentId) {
|
||||
ProcessDefinition processDefinition = repositoryService.createProcessDefinitionQuery().deploymentId(deploymentId).singleResult();
|
||||
if (processDefinition == null) {
|
||||
throw new SearchException("流程定义不存在,请检查流程部署情况");
|
||||
}
|
||||
BpmnModel bpmnModel = repositoryService.getBpmnModel(processDefinition.getId());
|
||||
return listFlowNodeByModel(bpmnModel);
|
||||
}
|
||||
|
||||
@Override
|
||||
public List<ActivitiFlowNodeDTO> listFlowNodeByModel(BpmnModel bpmnModel) {
|
||||
List<Process> processes = bpmnModel.getProcesses();
|
||||
if (processes.size() > 1) {
|
||||
throw new SystemException("流程不能有多条");
|
||||
}
|
||||
List<FlowNode> flowNodes = processes.get(0).findFlowElementsOfType(FlowNode.class);
|
||||
List<ActivitiFlowNodeDTO> activitiFlowNodeDTOs = new ArrayList<>();
|
||||
for (FlowNode flowNode : flowNodes) {
|
||||
ActivitiFlowNodeDTO activitiFlowNodeDTO = new ActivitiFlowNodeDTO();
|
||||
activitiFlowNodeDTO.setId(flowNode.getId());
|
||||
activitiFlowNodeDTO.setName(flowNode.getName());
|
||||
activitiFlowNodeDTO.setSummary(flowNode.getDocumentation());
|
||||
if (flowNode instanceof StartEvent) {
|
||||
StartEvent startEvent = (StartEvent) flowNode;
|
||||
activitiFlowNodeDTO.setFormKey(startEvent.getFormKey());
|
||||
activitiFlowNodeDTO.setType(StartEvent.class.getSimpleName());
|
||||
} else if (flowNode instanceof EndEvent) {
|
||||
activitiFlowNodeDTO.setType(EndEvent.class.getSimpleName());
|
||||
} else if (flowNode instanceof UserTask) {
|
||||
UserTask userTask = (UserTask) flowNode;
|
||||
activitiFlowNodeDTO.setFormKey(userTask.getFormKey());
|
||||
activitiFlowNodeDTO.setType(UserTask.class.getSimpleName());
|
||||
} else {
|
||||
continue;
|
||||
}
|
||||
activitiFlowNodeDTOs.add(activitiFlowNodeDTO);
|
||||
}
|
||||
return activitiFlowNodeDTOs;
|
||||
}
|
||||
|
||||
|
||||
}
|
||||
|
@ -6,11 +6,22 @@ import com.fasterxml.jackson.databind.ObjectMapper;
|
||||
import ink.wgink.common.base.DefaultBaseService;
|
||||
import ink.wgink.exceptions.RemoveException;
|
||||
import ink.wgink.exceptions.SearchException;
|
||||
import ink.wgink.exceptions.base.SystemException;
|
||||
import ink.wgink.interfaces.consts.ISystemConstant;
|
||||
import ink.wgink.module.activiti.pojo.dtos.ActivitiFlowNodeDTO;
|
||||
import ink.wgink.module.activiti.pojo.vos.ActivitiVO;
|
||||
import ink.wgink.module.activiti.pojo.vos.oa.NodeFieldUpdateVO;
|
||||
import ink.wgink.module.activiti.pojo.vos.oa.NodeFieldVO;
|
||||
import ink.wgink.module.activiti.service.activiti.IActivitiProcdefService;
|
||||
import ink.wgink.module.activiti.service.activiti.IActivitiService;
|
||||
import ink.wgink.module.activiti.service.oa.INodeFieldService;
|
||||
import ink.wgink.module.form.pojo.pos.design.FormFieldPO;
|
||||
import ink.wgink.module.form.pojo.pos.design.FormPO;
|
||||
import ink.wgink.module.form.service.design.IFormFieldService;
|
||||
import ink.wgink.module.form.service.design.IFormService;
|
||||
import ink.wgink.pojo.result.SuccessResultList;
|
||||
import org.activiti.bpmn.model.BpmnModel;
|
||||
import org.activiti.bpmn.model.StartEvent;
|
||||
import org.activiti.editor.constants.ModelDataJsonConstants;
|
||||
import org.activiti.editor.language.json.converter.BpmnJsonConverter;
|
||||
import org.activiti.engine.HistoryService;
|
||||
@ -25,6 +36,7 @@ import org.springframework.stereotype.Service;
|
||||
|
||||
import java.io.IOException;
|
||||
import java.io.UnsupportedEncodingException;
|
||||
import java.util.ArrayList;
|
||||
import java.util.List;
|
||||
|
||||
/**
|
||||
@ -46,6 +58,14 @@ public class ActivitiServiceImpl extends DefaultBaseService implements IActiviti
|
||||
private HistoryService historyService;
|
||||
@Autowired
|
||||
private RuntimeService runtimeService;
|
||||
@Autowired
|
||||
private IActivitiProcdefService activitiProcdefService;
|
||||
@Autowired
|
||||
private INodeFieldService nodeFieldService;
|
||||
@Autowired
|
||||
private IFormService formService;
|
||||
@Autowired
|
||||
private IFormFieldService formFieldService;
|
||||
|
||||
@Override
|
||||
public String create(ActivitiVO activitiVO) throws UnsupportedEncodingException {
|
||||
@ -77,7 +97,7 @@ public class ActivitiServiceImpl extends DefaultBaseService implements IActiviti
|
||||
}
|
||||
|
||||
@Override
|
||||
public void publish(String modelId) throws IOException {
|
||||
public void saveDeploy(String modelId) throws IOException {
|
||||
Model model = repositoryService.getModel(modelId);
|
||||
if (model == null) {
|
||||
throw new SearchException("模型不存在");
|
||||
@ -86,6 +106,7 @@ public class ActivitiServiceImpl extends DefaultBaseService implements IActiviti
|
||||
if (modelEditorSource == null) {
|
||||
throw new SearchException("模型数据不存在");
|
||||
}
|
||||
LOG.debug("部署流程");
|
||||
JsonNode modelNode = new ObjectMapper().readTree(modelEditorSource);
|
||||
BpmnModel bpmnModel = new BpmnJsonConverter().convertToBpmnModel(modelNode);
|
||||
Deployment deployment = repositoryService.createDeployment()
|
||||
@ -95,10 +116,62 @@ public class ActivitiServiceImpl extends DefaultBaseService implements IActiviti
|
||||
.deploy();
|
||||
model.setDeploymentId(deployment.getId());
|
||||
repositoryService.saveModel(model);
|
||||
LOG.debug("节点关联表单");
|
||||
saveNodeField(deployment.getId(), bpmnModel);
|
||||
}
|
||||
|
||||
/**
|
||||
* 保存节点与表单字段
|
||||
*
|
||||
* @param deploymentId
|
||||
*/
|
||||
private void saveNodeField(String deploymentId, BpmnModel bpmnModel) {
|
||||
List<ActivitiFlowNodeDTO> activitiFlowNodeDTOs = activitiProcdefService.listFlowNodeByModel(bpmnModel);
|
||||
if (activitiFlowNodeDTOs.isEmpty()) {
|
||||
return;
|
||||
}
|
||||
String formKey = getFormIdByStartEvent(activitiFlowNodeDTOs);
|
||||
if (StringUtils.isBlank(formKey)) {
|
||||
LOG.debug("开始节点未绑定表单");
|
||||
return;
|
||||
}
|
||||
FormPO formPO = formService.getPO(formKey);
|
||||
if (formPO == null) {
|
||||
throw new SystemException("表单不存在");
|
||||
}
|
||||
List<FormFieldPO> formFieldPOs = formFieldService.listPO(formPO.getFormId());
|
||||
if (formFieldPOs.isEmpty()) {
|
||||
throw new SystemException("表单字段为空");
|
||||
}
|
||||
activitiFlowNodeDTOs.forEach(activitiFlowNodeDTO -> {
|
||||
NodeFieldUpdateVO nodeFieldUpdateVO = new NodeFieldUpdateVO();
|
||||
nodeFieldUpdateVO.setFlowNodeId(activitiFlowNodeDTO.getId());
|
||||
nodeFieldUpdateVO.setFormId(formPO.getFormId());
|
||||
nodeFieldUpdateVO.setDeploymentId(deploymentId);
|
||||
List<NodeFieldVO> nodeFieldVOs = new ArrayList<>();
|
||||
formFieldPOs.forEach(formFieldPO -> {
|
||||
NodeFieldVO nodeFieldVO = new NodeFieldVO();
|
||||
nodeFieldVO.setFieldName(formFieldPO.getFieldName());
|
||||
nodeFieldVO.setIsVisible(1);
|
||||
nodeFieldVO.setIsEditable(1);
|
||||
nodeFieldVOs.add(nodeFieldVO);
|
||||
});
|
||||
nodeFieldUpdateVO.setFormFields(nodeFieldVOs);
|
||||
nodeFieldService.save(nodeFieldUpdateVO);
|
||||
});
|
||||
}
|
||||
|
||||
private String getFormIdByStartEvent(List<ActivitiFlowNodeDTO> activitiFlowNodeDTOs) {
|
||||
for (ActivitiFlowNodeDTO activitiFlowNodeDTO : activitiFlowNodeDTOs) {
|
||||
if (StringUtils.equals(activitiFlowNodeDTO.getType(), StartEvent.class.getSimpleName())) {
|
||||
return activitiFlowNodeDTO.getFormKey();
|
||||
}
|
||||
}
|
||||
return null;
|
||||
}
|
||||
|
||||
@Override
|
||||
public void revokePublish(String modelId) {
|
||||
public void revokeDeploy(String modelId) {
|
||||
Model modelData = repositoryService.getModel(modelId);
|
||||
if (modelData == null) {
|
||||
throw new SearchException("模型不存在");
|
||||
@ -147,7 +220,7 @@ public class ActivitiServiceImpl extends DefaultBaseService implements IActiviti
|
||||
editorObject.put("resourceId", "canvas");
|
||||
|
||||
JSONObject stencilSetObject = new JSONObject();
|
||||
stencilSetObject.put("namespace", "http://b3mn.org/stencilset/bpmn2.0#");
|
||||
stencilSetObject.put("namespace", "wgink");
|
||||
|
||||
editorObject.put("stencilset", stencilSetObject);
|
||||
repositoryService.addModelEditorSource(modelId, editorObject.toString().getBytes(ISystemConstant.CHARSET_UTF8));
|
||||
|
@ -0,0 +1,20 @@
|
||||
package ink.wgink.module.activiti.service.oa;
|
||||
|
||||
import ink.wgink.module.activiti.pojo.vos.oa.NodeFieldUpdateVO;
|
||||
|
||||
/**
|
||||
* @Description: 表单字段与流程节点
|
||||
* @Author: WenG
|
||||
* @Date: 2022/3/17 20:08
|
||||
* @Version: 1.0
|
||||
**/
|
||||
public interface INodeFieldService {
|
||||
|
||||
/**
|
||||
* 新增绑定
|
||||
*
|
||||
* @param nodeFieldUpdateVO
|
||||
*/
|
||||
void save(NodeFieldUpdateVO nodeFieldUpdateVO);
|
||||
|
||||
}
|
@ -0,0 +1,71 @@
|
||||
package ink.wgink.module.activiti.service.oa.impl;
|
||||
|
||||
import ink.wgink.common.base.DefaultBaseService;
|
||||
import ink.wgink.module.activiti.dao.oa.INodeFieldDao;
|
||||
import ink.wgink.module.activiti.pojo.vos.oa.NodeFieldUpdateVO;
|
||||
import ink.wgink.module.activiti.pojo.vos.oa.NodeFieldVO;
|
||||
import ink.wgink.module.activiti.service.oa.INodeFieldService;
|
||||
import ink.wgink.util.UUIDUtil;
|
||||
import ink.wgink.util.map.HashMapUtil;
|
||||
import org.springframework.beans.factory.annotation.Autowired;
|
||||
import org.springframework.stereotype.Service;
|
||||
|
||||
import java.util.List;
|
||||
import java.util.Map;
|
||||
|
||||
/**
|
||||
* @Description: 表单字段与流程节点
|
||||
* @Author: WenG
|
||||
* @Date: 2022/3/17 20:09
|
||||
* @Version: 1.0
|
||||
**/
|
||||
@Service
|
||||
public class NodeFieldFieldServiceImpl extends DefaultBaseService implements INodeFieldService {
|
||||
|
||||
@Autowired
|
||||
private INodeFieldDao nodeFieldDao;
|
||||
|
||||
@Override
|
||||
public void save(NodeFieldUpdateVO nodeFieldUpdateVO) {
|
||||
LOG.debug("删除原有配置");
|
||||
delete(nodeFieldUpdateVO.getDeploymentId(), nodeFieldUpdateVO.getFormId(), nodeFieldUpdateVO.getFlowNodeId());
|
||||
LOG.debug("新增现有配置");
|
||||
save(nodeFieldUpdateVO.getDeploymentId(), nodeFieldUpdateVO.getFormId(), nodeFieldUpdateVO.getFlowNodeId(), nodeFieldUpdateVO.getFormFields());
|
||||
}
|
||||
|
||||
/**
|
||||
* 保存
|
||||
*
|
||||
* @param deploymentId
|
||||
* @param formId
|
||||
* @param flowNodeId
|
||||
* @param formFields
|
||||
*/
|
||||
private void save(String deploymentId, String formId, String flowNodeId, List<NodeFieldVO> formFields) {
|
||||
formFields.forEach(nodeFieldVO -> {
|
||||
Map<String, Object> params = HashMapUtil.beanToMap(nodeFieldVO);
|
||||
params.put("nodeFieldId", UUIDUtil.getUUID());
|
||||
params.put("deploymentId", deploymentId);
|
||||
params.put("formId", formId);
|
||||
params.put("flowNodeId", flowNodeId);
|
||||
nodeFieldDao.save(params);
|
||||
});
|
||||
}
|
||||
|
||||
/**
|
||||
* 删除
|
||||
*
|
||||
* @param deploymentId 部署ID
|
||||
* @param formId 表单ID
|
||||
* @param flowNodeId 流程节点ID
|
||||
*/
|
||||
private void delete(String deploymentId, String formId, String flowNodeId) {
|
||||
Map<String, Object> params = getHashMap(6);
|
||||
params.put("deploymentId", deploymentId);
|
||||
params.put("formId", formId);
|
||||
params.put("flowNodeId", flowNodeId);
|
||||
|
||||
nodeFieldDao.delete(params);
|
||||
}
|
||||
|
||||
}
|
@ -0,0 +1,56 @@
|
||||
<?xml version="1.0" encoding="UTF-8"?>
|
||||
<!DOCTYPE mapper PUBLIC "-//mybatis.org//DTD Mapper 3.0//EN" "http://mybatis.org/dtd/mybatis-3-mapper.dtd">
|
||||
<mapper namespace="ink.wgink.module.activiti.dao.oa.INodeFieldDao">
|
||||
|
||||
<update id="createTable">
|
||||
CREATE TABLE IF NOT EXISTS `oa_node_field` (
|
||||
`id` bigint(20) unsigned NOT NULL AUTO_INCREMENT,
|
||||
`node_field_id` char(36) DEFAULT NULL COMMENT '主键',
|
||||
`deployment_id` char(36) DEFAULT NULL COMMENT '流程部署ID',
|
||||
`form_id` char(36) DEFAULT NULL COMMENT '表单ID',
|
||||
`flow_node_id` char(60) DEFAULT NULL COMMENT '流程节点ID',
|
||||
`field_name` varchar(255) DEFAULT NULL COMMENT '字段名',
|
||||
`is_visible` int(1) DEFAULT '1' COMMENT '是否可见',
|
||||
`is_editable` int(1) DEFAULT '1' COMMENT '是否可编辑',
|
||||
PRIMARY KEY (`id`)
|
||||
) ENGINE=InnoDB DEFAULT CHARSET=utf8 COMMENT='节点字段绑定';
|
||||
</update>
|
||||
|
||||
<!-- 新增 -->
|
||||
<insert id="save" parameterType="map">
|
||||
INSERT INTO oa_node_field(
|
||||
node_field_id,
|
||||
deployment_id,
|
||||
form_id,
|
||||
flow_node_id,
|
||||
field_name,
|
||||
is_visible,
|
||||
is_editable
|
||||
) VALUES(
|
||||
#{nodeFieldId},
|
||||
#{deploymentId},
|
||||
#{formId},
|
||||
#{flowNodeId},
|
||||
#{fieldName},
|
||||
#{isVisible},
|
||||
#{isEditable}
|
||||
)
|
||||
</insert>
|
||||
|
||||
<!-- 删除 -->
|
||||
<delete id="delete" parameterType="map">
|
||||
DELETE FROM
|
||||
oa_node_field
|
||||
WHERE
|
||||
deployment_id = #{deploymentId}
|
||||
<if test="formId != null and formId != ''">
|
||||
AND
|
||||
form_id = #{formId}
|
||||
</if>
|
||||
<if test="flowNodeId != null and flowNodeId != ''">
|
||||
AND
|
||||
flow_node_id = #{flowNodeId}
|
||||
</if>
|
||||
</delete>
|
||||
|
||||
</mapper>
|
@ -127,7 +127,7 @@
|
||||
},
|
||||
{field: 'option2', width: 80, title: '操作', align:'center', fixed: 'right',
|
||||
templet: function(row) {
|
||||
return '<button class="layui-btn layui-btn-normal layui-btn-xs" lay-event="publishEvent">部署</button>';
|
||||
return '<button class="layui-btn layui-btn-normal layui-btn-xs" lay-event="deployEvent">部署</button>';
|
||||
}
|
||||
},
|
||||
]
|
||||
@ -233,11 +233,11 @@
|
||||
table.on('tool(dataTable)', function(obj) {
|
||||
var data = obj.data;
|
||||
var layEvent = obj.event;
|
||||
if(layEvent === 'publishEvent') {
|
||||
if(layEvent === 'deployEvent') {
|
||||
top.dialog.confirm('确定 部署 流程?', function(index) {
|
||||
top.dialog.close(index);
|
||||
var loadLayerIndex;
|
||||
top.restAjax.put(top.restAjax.path('api/activiti/publish/{modelId}', [data.id]), {}, null, function(code, data) {
|
||||
top.restAjax.put(top.restAjax.path('api/activiti/deploy/{modelId}', [data.id]), {}, null, function(code, data) {
|
||||
top.dialog.msg('操作成功');
|
||||
reloadTable();
|
||||
}, function(code, data) {
|
||||
|
@ -135,6 +135,14 @@
|
||||
}
|
||||
return '<button class="layui-btn layui-btn-xs" lay-event="flowChatEvent">查看</button>';
|
||||
}
|
||||
},
|
||||
{field: 'form', width: 180, title: '操作', align:'center', fixed: 'right',
|
||||
templet: function(row) {
|
||||
return '<div class="layui-btn-group">' +
|
||||
'<button class="layui-btn layui-btn-xs" lay-event="bindFormEvent">绑定表单</button>'+
|
||||
'<button class="layui-btn layui-btn-primary layui-btn-xs" lay-event="bindFormEvent">节点管理</button>'+
|
||||
'</div>';
|
||||
}
|
||||
}
|
||||
]
|
||||
],
|
||||
@ -189,6 +197,8 @@
|
||||
height: '400px',
|
||||
onClose: function() {}
|
||||
});
|
||||
} else if(layEvent === 'bindFormEvent') {
|
||||
|
||||
}
|
||||
});
|
||||
});
|
||||
|
Loading…
Reference in New Issue
Block a user