调整了代码结构,增加了节点管理后台逻辑,增加了人员选择,部门选择

This commit is contained in:
wanggeng 2022-04-05 23:42:43 +08:00
parent 774afc6fa6
commit 538f85eeb4
29 changed files with 1316 additions and 287 deletions

View File

@ -53,17 +53,6 @@ public class ActivitiController extends DefaultBaseController {
return new SuccessResultData<>(activitiService.create(activitiVO)); return new SuccessResultData<>(activitiService.create(activitiVO));
} }
@ApiOperation(value = "删除模型", notes = "删除模型接口")
@ApiImplicitParams({
@ApiImplicitParam(name = "modelId", value = "模型ID", paramType = "path")
})
@ApiResponses({@ApiResponse(code = 400, message = "请求失败", response = ErrorResult.class)})
@DeleteMapping("delete/{modelId}")
public SuccessResult delete(@PathVariable("modelId") String modelId) {
activitiService.delete(modelId);
return new SuccessResult();
}
@ApiOperation(value = "发布模型", notes = "发布模型接口") @ApiOperation(value = "发布模型", notes = "发布模型接口")
@ApiImplicitParams({ @ApiImplicitParams({
@ApiImplicitParam(name = "modelId", value = "模型ID", paramType = "path") @ApiImplicitParam(name = "modelId", value = "模型ID", paramType = "path")

View File

@ -53,7 +53,18 @@ public class ActivitiModelController extends DefaultBaseController {
if (RegexUtil.isChinese(activitiModelVO.getName())) { if (RegexUtil.isChinese(activitiModelVO.getName())) {
throw new ParamsException("名称不能有中文"); throw new ParamsException("名称不能有中文");
} }
activitiModelService.saveModel(modelId, activitiModelVO.getName(), activitiModelVO.getDescription(), activitiModelVO.getJsonXml(), activitiModelVO.getSvgXml()); activitiModelService.save(modelId, activitiModelVO);
return new SuccessResult();
}
@ApiOperation(value = "删除模型", notes = "删除模型接口")
@ApiImplicitParams({
@ApiImplicitParam(name = "modelId", value = "模型ID", paramType = "path")
})
@ApiResponses({@ApiResponse(code = 400, message = "请求失败", response = ErrorResult.class)})
@DeleteMapping("delete/{modelId}")
public SuccessResult delete(@PathVariable("modelId") String modelId) {
activitiModelService.delete(modelId);
return new SuccessResult(); return new SuccessResult();
} }

View File

@ -0,0 +1,51 @@
package ink.wgink.module.activiti.dao.oa;
import ink.wgink.exceptions.RemoveException;
import ink.wgink.exceptions.SaveException;
import ink.wgink.exceptions.UpdateException;
import org.springframework.stereotype.Repository;
import java.util.Map;
/**
* @ClassName: INodeAssigneeDao
* @Description: 节点代理人
* @Author: wanggeng
* @Date: 2022/4/4 15:18
* @Version: 1.0
*/
@Repository
public interface INodeAssigneeDao {
/**
* 新增
*
* @param params
* @throws SaveException
*/
void save(Map<String, Object> params) throws SaveException;
/**
* 删除
*
* @param params
* @throws RemoveException
*/
void delete(Map<String, Object> params) throws RemoveException;
/**
* 更新部署ID
*
* @param params
* @throws UpdateException
*/
void updateDeploymentId(Map<String, Object> params) throws UpdateException;
/**
* 删除部署ID
*
* @param deploymentId
* @throws UpdateException
*/
void deleteDeploymentId(String deploymentId) throws UpdateException;
}

View File

@ -44,6 +44,22 @@ public interface INodeFieldDao extends IInitBaseTable {
*/ */
void update(Map<String, Object> params) throws UpdateException; void update(Map<String, Object> params) throws UpdateException;
/**
* 更新部署ID
*
* @param params
* @throws UpdateException
*/
void updateDeploymentId(Map<String, Object> params) throws UpdateException;
/**
* 删除部署ID
*
* @param deploymentId
* @throws UpdateException
*/
void deleteDeploymentId(String deploymentId) throws UpdateException;
/** /**
* 节点列表 * 节点列表
* *
@ -62,4 +78,5 @@ public interface INodeFieldDao extends IInitBaseTable {
*/ */
List<NodeFieldDTO> list(Map<String, Object> params) throws SearchException; List<NodeFieldDTO> list(Map<String, Object> params) throws SearchException;
} }

View File

@ -1,5 +1,9 @@
package ink.wgink.module.activiti.pojo.vos; package ink.wgink.module.activiti.pojo.vos;
import ink.wgink.module.activiti.pojo.vos.oa.nodemanage.OaNodeManageVO;
import java.util.List;
/** /**
* @ClassName: ActivitiModelVO * @ClassName: ActivitiModelVO
* @Description: 模型 * @Description: 模型
@ -14,6 +18,8 @@ public class ActivitiModelVO {
private String description; private String description;
private String jsonXml; private String jsonXml;
private String svgXml; private String svgXml;
private Boolean isOa;
private List<OaNodeManageVO> oaNodeManages;
public String getName() { public String getName() {
return name == null ? "" : name.trim(); return name == null ? "" : name.trim();
@ -46,4 +52,20 @@ public class ActivitiModelVO {
public void setSvgXml(String svgXml) { public void setSvgXml(String svgXml) {
this.svgXml = svgXml; this.svgXml = svgXml;
} }
public Boolean getOa() {
return isOa == null ? false : isOa;
}
public void setOa(Boolean oa) {
isOa = oa;
}
public List<OaNodeManageVO> getOaNodeManages() {
return oaNodeManages;
}
public void setOaNodeManages(List<OaNodeManageVO> oaNodeManages) {
this.oaNodeManages = oaNodeManages;
}
} }

View File

@ -0,0 +1,63 @@
package ink.wgink.module.activiti.pojo.vos.oa.nodemanage;
import ink.wgink.module.activiti.pojo.vos.oa.nodemanage.config.AssigneeVO;
import ink.wgink.module.activiti.pojo.vos.oa.nodemanage.config.NodeFormFieldVO;
import io.swagger.annotations.ApiModel;
import io.swagger.annotations.ApiModelProperty;
import java.util.List;
/**
* @ClassName: ConfigVO
* @Description: 配置
* @Author: wanggeng
* @Date: 2022/4/4 11:06
* @Version: 1.0
*/
@ApiModel
public class ConfigVO {
@ApiModelProperty(name = "formId", value = "表单ID")
private String formId;
@ApiModelProperty(name = "assignee", value = "代理人")
private AssigneeVO assignee;
@ApiModelProperty(name = "formFields", value = "表单字段列表")
private List<NodeFormFieldVO> formFields;
public String getFormId() {
return formId == null ? "" : formId.trim();
}
public void setFormId(String formId) {
this.formId = formId;
}
public AssigneeVO getAssignee() {
return assignee;
}
public void setAssignee(AssigneeVO assignee) {
this.assignee = assignee;
}
public List<NodeFormFieldVO> getFormFields() {
return formFields;
}
public void setFormFields(List<NodeFormFieldVO> formFields) {
this.formFields = formFields;
}
@Override
public String toString() {
final StringBuilder sb = new StringBuilder("{");
sb.append("\"formId\":\"")
.append(formId).append('\"');
sb.append(",\"assignee\":")
.append(assignee);
sb.append(",\"formFields\":")
.append(formFields);
sb.append('}');
return sb.toString();
}
}

View File

@ -0,0 +1,47 @@
package ink.wgink.module.activiti.pojo.vos.oa.nodemanage;
import io.swagger.annotations.ApiModel;
import io.swagger.annotations.ApiModelProperty;
/**
* @ClassName: OaNodeManageVO
* @Description: oa节点管理
* @Author: wanggeng
* @Date: 2022/4/4 11:06
* @Version: 1.0
*/
@ApiModel
public class OaNodeManageVO {
@ApiModelProperty(name = "nodeId", value = "节点ID")
private String nodeId;
@ApiModelProperty(name = "config", value = "配置")
private ConfigVO config;
public String getNodeId() {
return nodeId == null ? "" : nodeId.trim();
}
public void setNodeId(String nodeId) {
this.nodeId = nodeId;
}
public ConfigVO getConfig() {
return config;
}
public void setConfig(ConfigVO config) {
this.config = config;
}
@Override
public String toString() {
final StringBuilder sb = new StringBuilder("{");
sb.append("\"nodeId\":\"")
.append(nodeId).append('\"');
sb.append(",\"config\":")
.append(config);
sb.append('}');
return sb.toString();
}
}

View File

@ -0,0 +1,237 @@
package ink.wgink.module.activiti.pojo.vos.oa.nodemanage.config;
import io.swagger.annotations.ApiModel;
import io.swagger.annotations.ApiModelProperty;
/**
* @ClassName: AssigneeVO
* @Description: 代理人
* @Author: wanggeng
* @Date: 2022/4/4 10:46
* @Version: 1.0
*/
@ApiModel
public class AssigneeVO {
@ApiModelProperty(name = "nodeType", value = "节点类型")
private String nodeType;
@ApiModelProperty(name = "assigneeType", value = "代理人类型")
private String assigneeType;
@ApiModelProperty(name = "assigneeCount", value = "代理人数量")
private String assigneeCount;
@ApiModelProperty(name = "assignee", value = "代理人")
private String assignee;
@ApiModelProperty(name = "assigneeName", value = "代理人名称")
private String assigneeName;
@ApiModelProperty(name = "autoAssignType", value = "自动方式")
private String autoAssignType;
@ApiModelProperty(name = "departmentType", value = "部门类型")
private String departmentType;
@ApiModelProperty(name = "departments", value = "选择部门")
private String departments;
@ApiModelProperty(name = "departmentNames", value = "选择部门名称")
private String departmentNames;
@ApiModelProperty(name = "roles", value = "角色")
private String roles;
@ApiModelProperty(name = "roleNames", value = "角色名称")
private String roleNames;
@ApiModelProperty(name = "positions", value = "职位")
private String positions;
@ApiModelProperty(name = "positionNames", value = "职位名称")
private String positionNames;
@ApiModelProperty(name = "quickAssignee", value = "快速代理人")
private String quickAssignee;
@ApiModelProperty(name = "signType", value = "会签类型")
private String signType;
@ApiModelProperty(name = "signUsers", value = "会签人")
private String signUsers;
@ApiModelProperty(name = "completeCondition", value = "完成条件")
private String completeCondition;
@ApiModelProperty(name = "completeCount", value = "")
private Integer completeCount;
public String getNodeType() {
return nodeType == null ? "" : nodeType.trim();
}
public void setNodeType(String nodeType) {
this.nodeType = nodeType;
}
public String getAssigneeType() {
return assigneeType == null ? "" : assigneeType.trim();
}
public void setAssigneeType(String assigneeType) {
this.assigneeType = assigneeType;
}
public String getAssigneeCount() {
return assigneeCount == null ? "" : assigneeCount.trim();
}
public void setAssigneeCount(String assigneeCount) {
this.assigneeCount = assigneeCount;
}
public String getAssignee() {
return assignee == null ? "" : assignee.trim();
}
public void setAssignee(String assignee) {
this.assignee = assignee;
}
public String getAssigneeName() {
return assigneeName == null ? "" : assigneeName.trim();
}
public void setAssigneeName(String assigneeName) {
this.assigneeName = assigneeName;
}
public String getAutoAssignType() {
return autoAssignType == null ? "" : autoAssignType.trim();
}
public void setAutoAssignType(String autoAssignType) {
this.autoAssignType = autoAssignType;
}
public String getDepartmentType() {
return departmentType == null ? "" : departmentType.trim();
}
public void setDepartmentType(String departmentType) {
this.departmentType = departmentType;
}
public String getDepartments() {
return departments == null ? "" : departments.trim();
}
public void setDepartments(String departments) {
this.departments = departments;
}
public String getDepartmentNames() {
return departmentNames == null ? "" : departmentNames.trim();
}
public void setDepartmentNames(String departmentNames) {
this.departmentNames = departmentNames;
}
public String getRoles() {
return roles == null ? "" : roles.trim();
}
public void setRoles(String roles) {
this.roles = roles;
}
public String getRoleNames() {
return roleNames == null ? "" : roleNames.trim();
}
public void setRoleNames(String roleNames) {
this.roleNames = roleNames;
}
public String getPositions() {
return positions == null ? "" : positions.trim();
}
public void setPositions(String positions) {
this.positions = positions;
}
public String getPositionNames() {
return positionNames == null ? "" : positionNames.trim();
}
public void setPositionNames(String positionNames) {
this.positionNames = positionNames;
}
public String getQuickAssignee() {
return quickAssignee == null ? "" : quickAssignee.trim();
}
public void setQuickAssignee(String quickAssignee) {
this.quickAssignee = quickAssignee;
}
public String getSignType() {
return signType == null ? "" : signType.trim();
}
public void setSignType(String signType) {
this.signType = signType;
}
public String getSignUsers() {
return signUsers == null ? "" : signUsers.trim();
}
public void setSignUsers(String signUsers) {
this.signUsers = signUsers;
}
public String getCompleteCondition() {
return completeCondition == null ? "" : completeCondition.trim();
}
public void setCompleteCondition(String completeCondition) {
this.completeCondition = completeCondition;
}
public Integer getCompleteCount() {
return completeCount == null ? 0 : completeCount;
}
public void setCompleteCount(Integer completeCount) {
this.completeCount = completeCount;
}
@Override
public String toString() {
final StringBuilder sb = new StringBuilder("{");
sb.append("\"nodeType\":\"")
.append(nodeType).append('\"');
sb.append(",\"assigneeType\":\"")
.append(assigneeType).append('\"');
sb.append(",\"assigneeCount\":")
.append(assigneeCount);
sb.append(",\"assignee\":\"")
.append(assignee).append('\"');
sb.append(",\"autoAssignType\":\"")
.append(autoAssignType).append('\"');
sb.append(",\"departmentType\":\"")
.append(departmentType).append('\"');
sb.append(",\"departments\":\"")
.append(departments).append('\"');
sb.append(",\"departmentNames\":\"")
.append(departmentNames).append('\"');
sb.append(",\"roles\":\"")
.append(roles).append('\"');
sb.append(",\"roleNames\":\"")
.append(roleNames).append('\"');
sb.append(",\"positions\":\"")
.append(positions).append('\"');
sb.append(",\"positionNames\":\"")
.append(positionNames).append('\"');
sb.append(",\"quickAssignee\":\"")
.append(quickAssignee).append('\"');
sb.append(",\"signType\":\"")
.append(signType).append('\"');
sb.append(",\"signUsers\":\"")
.append(signUsers).append('\"');
sb.append(",\"completeCondition\":\"")
.append(completeCondition).append('\"');
sb.append(",\"completeCount\":")
.append(completeCount);
sb.append('}');
return sb.toString();
}
}

View File

@ -0,0 +1,107 @@
package ink.wgink.module.activiti.pojo.vos.oa.nodemanage.config;
import io.swagger.annotations.ApiModel;
import io.swagger.annotations.ApiModelProperty;
/**
* @ClassName: FormFieldVO
* @Description: 表单字段
* @Author: wanggeng
* @Date: 2022/4/4 10:48
* @Version: 1.0
*/
@ApiModel
public class NodeFormFieldVO {
@ApiModelProperty(name = "fieldId", value = "字段ID")
private String fieldId;
@ApiModelProperty(name = "fieldExplain", value = "字段描述")
private String fieldExplain;
@ApiModelProperty(name = "fieldName", value = "字段名")
private String fieldName;
@ApiModelProperty(name = "fieldTag", value = "字段标签")
private String fieldTag;
@ApiModelProperty(name = "fieldType", value = "字段类型")
private String fieldType;
@ApiModelProperty(name = "isEditable", value = "是否操作")
private Boolean isEditable;
@ApiModelProperty(name = "isVisible", value = "是否可见")
private Boolean isVisible;
public String getFieldId() {
return fieldId == null ? "" : fieldId.trim();
}
public void setFieldId(String fieldId) {
this.fieldId = fieldId;
}
public String getFieldExplain() {
return fieldExplain == null ? "" : fieldExplain.trim();
}
public void setFieldExplain(String fieldExplain) {
this.fieldExplain = fieldExplain;
}
public String getFieldName() {
return fieldName == null ? "" : fieldName.trim();
}
public void setFieldName(String fieldName) {
this.fieldName = fieldName;
}
public String getFieldTag() {
return fieldTag == null ? "" : fieldTag.trim();
}
public void setFieldTag(String fieldTag) {
this.fieldTag = fieldTag;
}
public String getFieldType() {
return fieldType == null ? "" : fieldType.trim();
}
public void setFieldType(String fieldType) {
this.fieldType = fieldType;
}
public Boolean getEditable() {
return isEditable;
}
public void setEditable(Boolean editable) {
isEditable = editable;
}
public Boolean getVisible() {
return isVisible;
}
public void setVisible(Boolean visible) {
isVisible = visible;
}
@Override
public String toString() {
final StringBuilder sb = new StringBuilder("{");
sb.append("\"fieldId\":\"")
.append(fieldId).append('\"');
sb.append(",\"fieldExplain\":\"")
.append(fieldExplain).append('\"');
sb.append(",\"fieldName\":\"")
.append(fieldName).append('\"');
sb.append(",\"fieldTag\":\"")
.append(fieldTag).append('\"');
sb.append(",\"fieldType\":\"")
.append(fieldType).append('\"');
sb.append(",\"isEditable\":")
.append(isEditable);
sb.append(",\"isVisible\":")
.append(isVisible);
sb.append('}');
return sb.toString();
}
}

View File

@ -2,6 +2,7 @@ package ink.wgink.module.activiti.service.activiti;
import com.alibaba.fastjson.JSONObject; import com.alibaba.fastjson.JSONObject;
import ink.wgink.module.activiti.pojo.dtos.ActivitiFlowNodeDTO; import ink.wgink.module.activiti.pojo.dtos.ActivitiFlowNodeDTO;
import ink.wgink.module.activiti.pojo.vos.ActivitiModelVO;
import org.activiti.bpmn.model.*; import org.activiti.bpmn.model.*;
import javax.servlet.http.HttpServletResponse; import javax.servlet.http.HttpServletResponse;
@ -36,13 +37,17 @@ public interface IActivitiModelService {
* 保存模型 * 保存模型
* *
* @param modelId * @param modelId
* @param name * @param activitiModelVO
* @param description
* @param json_xml
* @param svg_xml
* @throws Exception * @throws Exception
*/ */
void saveModel(String modelId, String name, String description, String json_xml, String svg_xml) throws Exception; void save(String modelId, ActivitiModelVO activitiModelVO) throws Exception;
/**
* 删除模型
*
* @param modelId
*/
void delete(String modelId);
/** /**
* 获取原生流程节点列表 * 获取原生流程节点列表

View File

@ -29,13 +29,6 @@ public interface IActivitiService {
*/ */
String create(ActivitiVO activitiVO) throws UnsupportedEncodingException; String create(ActivitiVO activitiVO) throws UnsupportedEncodingException;
/**
* 删除模型
*
* @param modelId 模型ID
*/
void delete(String modelId);
/** /**
* 发布模型 * 发布模型

View File

@ -3,11 +3,14 @@ package ink.wgink.module.activiti.service.activiti.impl;
import com.alibaba.fastjson.JSONArray; import com.alibaba.fastjson.JSONArray;
import com.alibaba.fastjson.JSONObject; import com.alibaba.fastjson.JSONObject;
import ink.wgink.common.base.DefaultBaseService; import ink.wgink.common.base.DefaultBaseService;
import ink.wgink.exceptions.RemoveException;
import ink.wgink.exceptions.SearchException; import ink.wgink.exceptions.SearchException;
import ink.wgink.exceptions.base.SystemException; import ink.wgink.exceptions.base.SystemException;
import ink.wgink.interfaces.consts.ISystemConstant; import ink.wgink.interfaces.consts.ISystemConstant;
import ink.wgink.module.activiti.pojo.dtos.ActivitiFlowNodeDTO; import ink.wgink.module.activiti.pojo.dtos.ActivitiFlowNodeDTO;
import ink.wgink.module.activiti.pojo.vos.ActivitiModelVO;
import ink.wgink.module.activiti.service.activiti.IActivitiModelService; import ink.wgink.module.activiti.service.activiti.IActivitiModelService;
import ink.wgink.module.activiti.service.oa.INodeManageService;
import ink.wgink.util.ResourceUtil; import ink.wgink.util.ResourceUtil;
import ink.wgink.util.xml.XMLUtil; import ink.wgink.util.xml.XMLUtil;
import org.activiti.bpmn.model.*; import org.activiti.bpmn.model.*;
@ -51,24 +54,35 @@ public class ActivitiModelServiceImpl extends DefaultBaseService implements IAct
private RuntimeService runtimeService; private RuntimeService runtimeService;
@Autowired @Autowired
private HistoryService historyService; private HistoryService historyService;
@Autowired
private INodeManageService nodeManageService;
@Override @Override
public void saveModel(String modelId, String name, String description, String json_xml, String svg_xml) throws Exception { public void save(String modelId, ActivitiModelVO activitiModelVO) throws Exception {
Model model = repositoryService.getModel(modelId); Model model = repositoryService.getModel(modelId);
if (model == null) { if (model == null) {
throw new SearchException("模型不存在"); throw new SearchException("模型不存在");
} }
String deploymentId = model.getDeploymentId();
Integer modelVersion;
if (!StringUtils.isBlank(deploymentId)) {
LOG.debug("已经部署,版本号递增");
modelVersion = model.getVersion() + 1;
} else {
LOG.debug("未部署,版本号不变");
modelVersion = model.getVersion();
}
JSONObject modelObject = JSONObject.parseObject(model.getMetaInfo()); JSONObject modelObject = JSONObject.parseObject(model.getMetaInfo());
modelObject.put(MODEL_NAME, name); modelObject.put(MODEL_NAME, activitiModelVO.getName());
modelObject.put(MODEL_DESCRIPTION, description); modelObject.put(MODEL_DESCRIPTION, activitiModelVO.getDescription());
model.setMetaInfo(modelObject.toString()); model.setMetaInfo(modelObject.toString());
model.setName(name); model.setName(activitiModelVO.getName());
model.setVersion(model.getVersion() + 1); model.setVersion(modelVersion);
repositoryService.saveModel(model); repositoryService.saveModel(model);
repositoryService.addModelEditorSource(model.getId(), json_xml.getBytes(ISystemConstant.CHARSET_UTF8)); repositoryService.addModelEditorSource(model.getId(), activitiModelVO.getJsonXml().getBytes(ISystemConstant.CHARSET_UTF8));
InputStream svgStream = new ByteArrayInputStream(svg_xml.getBytes(ISystemConstant.CHARSET_UTF8)); InputStream svgStream = new ByteArrayInputStream(activitiModelVO.getSvgXml().getBytes(ISystemConstant.CHARSET_UTF8));
TranscoderInput input = new TranscoderInput(svgStream); TranscoderInput input = new TranscoderInput(svgStream);
PNGTranscoder transcoder = new PNGTranscoder(); PNGTranscoder transcoder = new PNGTranscoder();
@ -82,6 +96,22 @@ public class ActivitiModelServiceImpl extends DefaultBaseService implements IAct
repositoryService.addModelEditorSourceExtra(model.getId(), result); repositoryService.addModelEditorSourceExtra(model.getId(), result);
outStream.close(); outStream.close();
LOG.debug("保存节点配置");
nodeManageService.save(activitiModelVO, modelId, modelVersion, deploymentId);
}
@Override
public void delete(String modelId) {
Model model = repositoryService.getModel(modelId);
if (model == null) {
throw new SearchException("模型不存在");
}
if (!StringUtils.isBlank(model.getDeploymentId())) {
throw new RemoveException("已部署的模型不能删除");
}
repositoryService.deleteModel(modelId);
LOG.debug("删除节点配置");
nodeManageService.delete(modelId, model.getVersion());
} }
@Override @Override

View File

@ -4,6 +4,8 @@ import ink.wgink.common.base.DefaultBaseService;
import ink.wgink.module.activiti.pojo.dtos.ActivitiProcdefDTO; import ink.wgink.module.activiti.pojo.dtos.ActivitiProcdefDTO;
import ink.wgink.module.activiti.service.activiti.IActivitiModelService; import ink.wgink.module.activiti.service.activiti.IActivitiModelService;
import ink.wgink.module.activiti.service.activiti.IActivitiProcdefService; import ink.wgink.module.activiti.service.activiti.IActivitiProcdefService;
import ink.wgink.module.activiti.service.oa.INodeAssigneeService;
import ink.wgink.module.activiti.service.oa.INodeFieldService;
import ink.wgink.pojo.result.SuccessResultList; import ink.wgink.pojo.result.SuccessResultList;
import org.activiti.engine.RepositoryService; import org.activiti.engine.RepositoryService;
import org.activiti.engine.RuntimeService; import org.activiti.engine.RuntimeService;
@ -29,13 +31,17 @@ public class ActivitiProcdefServiceImpl extends DefaultBaseService implements IA
@Autowired @Autowired
private RepositoryService repositoryService; private RepositoryService repositoryService;
@Autowired @Autowired
private RuntimeService runtimeService; private INodeAssigneeService nodeAssigneeService;
@Autowired @Autowired
private IActivitiModelService activitiModelService; private INodeFieldService nodeFieldService;
@Override @Override
public void delete(String deploymentId) { public void delete(String deploymentId) {
repositoryService.deleteDeployment(deploymentId, true); repositoryService.deleteDeployment(deploymentId, true);
LOG.debug("删除代理人配置部署ID");
nodeAssigneeService.deleteDeploymentId(deploymentId);
LOG.debug("删除表单配置部署ID");
nodeFieldService.deleteDeploymentId(deploymentId);
} }
@Override @Override

View File

@ -4,29 +4,20 @@ import com.alibaba.fastjson.JSONObject;
import com.fasterxml.jackson.databind.JsonNode; import com.fasterxml.jackson.databind.JsonNode;
import com.fasterxml.jackson.databind.ObjectMapper; import com.fasterxml.jackson.databind.ObjectMapper;
import ink.wgink.common.base.DefaultBaseService; import ink.wgink.common.base.DefaultBaseService;
import ink.wgink.exceptions.RemoveException;
import ink.wgink.exceptions.SearchException; import ink.wgink.exceptions.SearchException;
import ink.wgink.exceptions.base.SystemException;
import ink.wgink.interfaces.consts.ISystemConstant; 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.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.IActivitiModelService; import ink.wgink.module.activiti.service.activiti.IActivitiModelService;
import ink.wgink.module.activiti.service.activiti.IActivitiProcdefService;
import ink.wgink.module.activiti.service.activiti.IActivitiService; import ink.wgink.module.activiti.service.activiti.IActivitiService;
import ink.wgink.module.activiti.service.oa.INodeAssigneeService;
import ink.wgink.module.activiti.service.oa.INodeFieldService; 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 ink.wgink.pojo.result.SuccessResultList;
import org.activiti.bpmn.model.*; import org.activiti.bpmn.model.BpmnModel;
import org.activiti.bpmn.model.FlowNode;
import org.activiti.bpmn.model.StartEvent;
import org.activiti.editor.constants.ModelDataJsonConstants; import org.activiti.editor.constants.ModelDataJsonConstants;
import org.activiti.editor.language.json.converter.BpmnJsonConverter; import org.activiti.editor.language.json.converter.BpmnJsonConverter;
import org.activiti.engine.HistoryService;
import org.activiti.engine.RepositoryService; import org.activiti.engine.RepositoryService;
import org.activiti.engine.RuntimeService;
import org.activiti.engine.repository.Deployment; import org.activiti.engine.repository.Deployment;
import org.activiti.engine.repository.Model; import org.activiti.engine.repository.Model;
import org.activiti.engine.repository.ModelQuery; import org.activiti.engine.repository.ModelQuery;
@ -36,7 +27,6 @@ import org.springframework.stereotype.Service;
import java.io.IOException; import java.io.IOException;
import java.io.UnsupportedEncodingException; import java.io.UnsupportedEncodingException;
import java.util.ArrayList;
import java.util.List; import java.util.List;
/** /**
@ -55,19 +45,11 @@ public class ActivitiServiceImpl extends DefaultBaseService implements IActiviti
@Autowired @Autowired
private RepositoryService repositoryService; private RepositoryService repositoryService;
@Autowired @Autowired
private HistoryService historyService;
@Autowired
private RuntimeService runtimeService;
@Autowired
private IActivitiModelService activitiModelService; private IActivitiModelService activitiModelService;
@Autowired @Autowired
private IActivitiProcdefService activitiProcdefService; private INodeAssigneeService nodeAssigneeService;
@Autowired @Autowired
private INodeFieldService nodeFieldService; private INodeFieldService nodeFieldService;
@Autowired
private IFormService formService;
@Autowired
private IFormFieldService formFieldService;
@Override @Override
public String create(ActivitiVO activitiVO) throws UnsupportedEncodingException { public String create(ActivitiVO activitiVO) throws UnsupportedEncodingException {
@ -86,18 +68,6 @@ public class ActivitiServiceImpl extends DefaultBaseService implements IActiviti
return model.getId(); return model.getId();
} }
@Override
public void delete(String modelId) {
Model model = repositoryService.getModel(modelId);
if (model == null) {
throw new SearchException("模型不存在");
}
if (!StringUtils.isBlank(model.getDeploymentId())) {
throw new RemoveException("已部署的模型不能删除");
}
repositoryService.deleteModel(modelId);
}
@Override @Override
public void saveDeploy(String modelId) throws IOException { public void saveDeploy(String modelId) throws IOException {
Model model = repositoryService.getModel(modelId); Model model = repositoryService.getModel(modelId);
@ -112,7 +82,6 @@ public class ActivitiServiceImpl extends DefaultBaseService implements IActiviti
JsonNode modelNode = new ObjectMapper().readTree(modelEditorSource); JsonNode modelNode = new ObjectMapper().readTree(modelEditorSource);
BpmnModel bpmnModel = new BpmnJsonConverter().convertToBpmnModel(modelNode); BpmnModel bpmnModel = new BpmnJsonConverter().convertToBpmnModel(modelNode);
LOG.debug("获取流程节点列表"); LOG.debug("获取流程节点列表");
List<FlowNode> flowNodes = activitiModelService.listFlowNode(bpmnModel); List<FlowNode> flowNodes = activitiModelService.listFlowNode(bpmnModel);
LOG.debug("获得开始节点"); LOG.debug("获得开始节点");
@ -122,12 +91,12 @@ public class ActivitiServiceImpl extends DefaultBaseService implements IActiviti
String deploymentId; String deploymentId;
if (!StringUtils.isBlank(formKey)) { if (!StringUtils.isBlank(formKey)) {
LOG.debug("存在自定义表单是OA流程执行初始化操作"); LOG.debug("存在自定义表单是OA流程执行初始化操作");
LOG.debug("1.初始化"); LOG.debug("1.部署流程");
LOG.debug("2.部署流程");
deploymentId = deployProcess(model, bpmnModel); deploymentId = deployProcess(model, bpmnModel);
LOG.debug("3.绑定节点设置"); LOG.debug("2.绑定节点代理人");
LOG.debug("4.绑定流程节点与表单关系"); nodeAssigneeService.updateDeploymentId(modelId, model.getVersion(), deploymentId);
saveNodeField(deploymentId, flowNodes); LOG.debug("3.绑定节点表单字段");
nodeFieldService.updateDeploymentId(modelId, model.getVersion(), deploymentId);
} else { } else {
LOG.debug("不存在自定义表单不是OA流程直接部署"); LOG.debug("不存在自定义表单不是OA流程直接部署");
deploymentId = deployProcess(model, bpmnModel); deploymentId = deployProcess(model, bpmnModel);
@ -153,62 +122,6 @@ public class ActivitiServiceImpl extends DefaultBaseService implements IActiviti
return deployment.getId(); return deployment.getId();
} }
/**
* 保存节点与表单字段
*
* @param deploymentId
*/
private void saveNodeField(String deploymentId, List<FlowNode> flowNodes) {
List<ActivitiFlowNodeDTO> activitiFlowNodeDTOs = activitiModelService.listActivitiFlowNodeByModel(flowNodes);
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.listPOByFormId(formPO.getFormId());
if (formFieldPOs.isEmpty()) {
throw new SystemException("表单字段为空");
}
for (int i = 0; i < activitiFlowNodeDTOs.size(); i++) {
ActivitiFlowNodeDTO activitiFlowNodeDTO = activitiFlowNodeDTOs.get(i);
if (StringUtils.equals(activitiFlowNodeDTO.getType(), EndEvent.class.getSimpleName())) {
return;
}
NodeFieldUpdateVO nodeFieldUpdateVO = new NodeFieldUpdateVO();
nodeFieldUpdateVO.setFlowNodeIndex(i);
nodeFieldUpdateVO.setFlowNodeId(activitiFlowNodeDTO.getId());
nodeFieldUpdateVO.setFlowNodeName(activitiFlowNodeDTO.getName());
nodeFieldUpdateVO.setFormId(formPO.getFormId());
nodeFieldUpdateVO.setDeploymentId(deploymentId);
List<NodeFieldVO> nodeFieldVOs = new ArrayList<>();
for (FormFieldPO formFieldPO : formFieldPOs) {
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 @Override
public void revokeDeploy(String modelId) { public void revokeDeploy(String modelId) {
Model modelData = repositoryService.getModel(modelId); Model modelData = repositoryService.getModel(modelId);

View File

@ -0,0 +1,59 @@
package ink.wgink.module.activiti.service.oa;
import ink.wgink.module.activiti.pojo.vos.oa.nodemanage.config.AssigneeVO;
/**
* @ClassName: INodeAssigneeService
* @Description: 节点代理人
* @Author: wanggeng
* @Date: 2022/4/4 15:08
* @Version: 1.0
*/
public interface INodeAssigneeService {
/**
* 保存
*
* @param modelId
* @param modelVersion
* @param nodeId
* @param nodeIndex
* @param assignee
*/
void save(String modelId, Integer modelVersion, String nodeId, int nodeIndex, AssigneeVO assignee);
/**
* 更新
*
* @param modelId
* @param modelVersion
* @param nodeId
* @param nodeIndex
* @param assignee
*/
void update(String modelId, Integer modelVersion, String nodeId, int nodeIndex, AssigneeVO assignee);
/**
* 更新部署ID
*
* @param modelId
* @param version
* @param deploymentId
*/
void updateDeploymentId(String modelId, Integer version, String deploymentId);
/**
* 删除部署ID
*
* @param deploymentId
*/
void deleteDeploymentId(String deploymentId);
/**
* 删除
*
* @param modelId 模型ID
* @param modelVersion 模型版本
*/
void deleteByModelIdAndModelVersion(String modelId, Integer modelVersion);
}

View File

@ -1,7 +1,7 @@
package ink.wgink.module.activiti.service.oa; package ink.wgink.module.activiti.service.oa;
import ink.wgink.module.activiti.pojo.dtos.oa.NodeFieldDTO; import ink.wgink.module.activiti.pojo.dtos.oa.NodeFieldDTO;
import ink.wgink.module.activiti.pojo.vos.oa.NodeFieldUpdateVO; import ink.wgink.module.activiti.pojo.vos.oa.nodemanage.config.NodeFormFieldVO;
import java.util.List; import java.util.List;
@ -14,11 +14,37 @@ import java.util.List;
public interface INodeFieldService { public interface INodeFieldService {
/** /**
* 新增绑定 * 新增节点绑定
* *
* @param nodeFieldUpdateVO * @param modelId 模型ID
* @param modelVersion 模型版本
* @param nodeId 节点ID
* @param nodeIndex 节点下标
* @param formId 表单ID
* @param formFields 表单字段
*/ */
void save(NodeFieldUpdateVO nodeFieldUpdateVO); void save(String modelId, Integer modelVersion, String nodeId, Integer nodeIndex, String formId, List<NodeFormFieldVO> formFields);
/**
* 更新节点
*
* @param modelId
* @param modelVersion
* @param nodeId
* @param nodeIndex
* @param formId
* @param formFields
*/
void update(String modelId, Integer modelVersion, String nodeId, int nodeIndex, String formId, List<NodeFormFieldVO> formFields);
/**
* 更新部署ID
*
* @param modelId 模型ID
* @param modelVersion 模型版本
* @param deploymentId 部署ID
*/
void updateDeploymentId(String modelId, Integer modelVersion, String deploymentId);
/** /**
* 更新显示状态 * 更新显示状态
@ -36,6 +62,22 @@ public interface INodeFieldService {
*/ */
void updateEditable(String nodeFieldId, Integer isEditable); void updateEditable(String nodeFieldId, Integer isEditable);
/**
* 删除部署ID
*
* @param deploymentId
*/
void deleteDeploymentId(String deploymentId);
/**
* 删除
*
* @param modelId 模型ID
* @param modelVersion 模型版本
*/
void deleteByModelIdAndModelVersion(String modelId, Integer modelVersion);
/** /**
* 节点列表 * 节点列表
* *

View File

@ -0,0 +1,31 @@
package ink.wgink.module.activiti.service.oa;
import ink.wgink.module.activiti.pojo.vos.ActivitiModelVO;
/**
* @ClassName: INodeConfigService
* @Description: 节点配置
* @Author: wanggeng
* @Date: 2022/4/5 20:27
* @Version: 1.0
*/
public interface INodeManageService {
/**
* 保存管理配置
*
* @param activitiModelVO
* @param modelId
* @param modelVersion
* @param deploymentId
*/
void save(ActivitiModelVO activitiModelVO, String modelId, Integer modelVersion, String deploymentId);
/**
* 删除管理配置
*
* @param modelId
* @param modelVersion
*/
void delete(String modelId, Integer modelVersion);
}

View File

@ -0,0 +1,83 @@
package ink.wgink.module.activiti.service.oa.impl;
import ink.wgink.common.base.DefaultBaseService;
import ink.wgink.module.activiti.dao.oa.INodeAssigneeDao;
import ink.wgink.module.activiti.pojo.vos.oa.nodemanage.config.AssigneeVO;
import ink.wgink.module.activiti.service.oa.INodeAssigneeService;
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.Map;
/**
* @ClassName: NodeAssigneeServiceImpl
* @Description: 节点代理人
* @Author: wanggeng
* @Date: 2022/4/4 15:09
* @Version: 1.0
*/
@Service
public class NodeAssigneeServiceImpl extends DefaultBaseService implements INodeAssigneeService {
@Autowired
private INodeAssigneeDao nodeAssigneeDao;
@Override
public void save(String modelId, Integer modelVersion, String nodeId, int nodeIndex, AssigneeVO assignee) {
LOG.debug("新增代理人配置");
Map<String, Object> params = HashMapUtil.beanToMap(assignee);
params.put("nodeFieldId", UUIDUtil.getUUID());
params.put("modelId", modelId);
params.put("modelVersion", modelVersion);
params.put("nodeId", nodeId);
params.put("nodeIndex", nodeIndex);
nodeAssigneeDao.save(params);
}
@Override
public void update(String modelId, Integer modelVersion, String nodeId, int nodeIndex, AssigneeVO assignee) {
delete(modelId, modelVersion, nodeId);
save(modelId, modelVersion, nodeId, nodeIndex, assignee);
}
@Override
public void updateDeploymentId(String modelId, Integer modelVersion, String deploymentId) {
Map<String, Object> params = getHashMap(6);
params.put("modelId", modelId);
params.put("modelVersion", modelVersion);
params.put("deploymentId", deploymentId);
nodeAssigneeDao.updateDeploymentId(params);
}
@Override
public void deleteDeploymentId(String deploymentId) {
nodeAssigneeDao.deleteDeploymentId(deploymentId);
}
@Override
public void deleteByModelIdAndModelVersion(String modelId, Integer modelVersion) {
Map<String, Object> params = getHashMap(4);
params.put("modelId", modelId);
params.put("modelVersion", modelVersion);
nodeAssigneeDao.delete(params);
}
/**
* 删除
*
* @param modelId 模型ID
* @param modelVersion 模型版本
* @param nodeId 节点ID
*/
private void delete(String modelId, Integer modelVersion, String nodeId) {
LOG.debug("删除代理人配置");
Map<String, Object> params = getHashMap(6);
params.put("modelId", modelId);
params.put("modelVersion", modelVersion);
params.put("nodeId", nodeId);
nodeAssigneeDao.delete(params);
}
}

View File

@ -3,8 +3,7 @@ package ink.wgink.module.activiti.service.oa.impl;
import ink.wgink.common.base.DefaultBaseService; import ink.wgink.common.base.DefaultBaseService;
import ink.wgink.module.activiti.dao.oa.INodeFieldDao; import ink.wgink.module.activiti.dao.oa.INodeFieldDao;
import ink.wgink.module.activiti.pojo.dtos.oa.NodeFieldDTO; import ink.wgink.module.activiti.pojo.dtos.oa.NodeFieldDTO;
import ink.wgink.module.activiti.pojo.vos.oa.NodeFieldUpdateVO; import ink.wgink.module.activiti.pojo.vos.oa.nodemanage.config.NodeFormFieldVO;
import ink.wgink.module.activiti.pojo.vos.oa.NodeFieldVO;
import ink.wgink.module.activiti.service.oa.INodeFieldService; import ink.wgink.module.activiti.service.oa.INodeFieldService;
import ink.wgink.util.UUIDUtil; import ink.wgink.util.UUIDUtil;
import ink.wgink.util.map.HashMapUtil; import ink.wgink.util.map.HashMapUtil;
@ -21,22 +20,41 @@ import java.util.Map;
* @Version: 1.0 * @Version: 1.0
**/ **/
@Service @Service
public class NodeFieldFieldServiceImpl extends DefaultBaseService implements INodeFieldService { public class NodeFieldServiceImpl extends DefaultBaseService implements INodeFieldService {
@Autowired @Autowired
private INodeFieldDao nodeFieldDao; private INodeFieldDao nodeFieldDao;
@Override @Override
public void save(NodeFieldUpdateVO nodeFieldUpdateVO) { public void save(String modelId, Integer modelVersion, String nodeId, Integer nodeIndex, String formId, List<NodeFormFieldVO> formFields) {
LOG.debug("删除原有配置"); LOG.debug("新增字段配置");
delete(nodeFieldUpdateVO.getDeploymentId(), nodeFieldUpdateVO.getFormId(), nodeFieldUpdateVO.getFlowNodeId()); formFields.forEach(nodeFormFieldVO -> {
LOG.debug("新增现有配置"); Map<String, Object> params = HashMapUtil.beanToMap(nodeFormFieldVO);
save(nodeFieldUpdateVO.getDeploymentId(), params.put("nodeFieldId", UUIDUtil.getUUID());
nodeFieldUpdateVO.getFormId(), params.put("modelId", modelId);
nodeFieldUpdateVO.getFlowNodeIndex(), params.put("modelVersion", modelVersion);
nodeFieldUpdateVO.getFlowNodeId(), params.put("nodeId", nodeId);
nodeFieldUpdateVO.getFlowNodeName(), params.put("nodeIndex", nodeIndex);
nodeFieldUpdateVO.getFormFields()); params.put("formId", formId);
params.put("isVisible", nodeFormFieldVO.getVisible() ? 1 : 0);
params.put("isEditable", nodeFormFieldVO.getEditable() ? 1 : 0);
nodeFieldDao.save(params);
});
}
@Override
public void update(String modelId, Integer modelVersion, String nodeId, int nodeIndex, String formId, List<NodeFormFieldVO> formFields) {
delete(modelId, modelVersion, nodeId, formId);
save(modelId, modelVersion, nodeId, nodeIndex, formId, formFields);
}
@Override
public void updateDeploymentId(String modelId, Integer modelVersion, String deploymentId) {
Map<String, Object> params = getHashMap(6);
params.put("modelId", modelId);
params.put("modelVersion", modelVersion);
params.put("deploymentId", deploymentId);
nodeFieldDao.updateDeploymentId(params);
} }
@Override @Override
@ -55,6 +73,19 @@ public class NodeFieldFieldServiceImpl extends DefaultBaseService implements INo
nodeFieldDao.update(params); nodeFieldDao.update(params);
} }
@Override
public void deleteDeploymentId(String deploymentId) {
nodeFieldDao.deleteDeploymentId(deploymentId);
}
@Override
public void deleteByModelIdAndModelVersion(String modelId, Integer modelVersion) {
Map<String, Object> params = getHashMap(4);
params.put("modelId", modelId);
params.put("modelVersion", modelVersion);
nodeFieldDao.delete(params);
}
@Override @Override
public List<NodeFieldDTO> listNodeByDeploymentId(String deploymentId) { public List<NodeFieldDTO> listNodeByDeploymentId(String deploymentId) {
Map<String, Object> params = getHashMap(2); Map<String, Object> params = getHashMap(2);
@ -70,40 +101,21 @@ public class NodeFieldFieldServiceImpl extends DefaultBaseService implements INo
return nodeFieldDao.list(params); return nodeFieldDao.list(params);
} }
/**
* 保存
*
* @param deploymentId
* @param formId
* @param flowNodeId
* @param formFields
*/
private void save(String deploymentId, String formId, Integer flowNodeIndex, String flowNodeId, String flowNodeName, 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("flowNodeIndex", flowNodeIndex);
params.put("flowNodeId", flowNodeId);
params.put("flowNodeName", flowNodeName);
nodeFieldDao.save(params);
});
}
/** /**
* 删除 * 删除
* *
* @param deploymentId 部署ID * @param modelId 模型ID
* @param modelVersion 模型版本
* @param nodeId 节点ID
* @param formId 表单ID * @param formId 表单ID
* @param flowNodeId 流程节点ID
*/ */
private void delete(String deploymentId, String formId, String flowNodeId) { private void delete(String modelId, Integer modelVersion, String nodeId, String formId) {
LOG.debug("删除原有字段配置");
Map<String, Object> params = getHashMap(6); Map<String, Object> params = getHashMap(6);
params.put("deploymentId", deploymentId); params.put("modelId", modelId);
params.put("modelVersion", modelVersion);
params.put("nodeId", nodeId);
params.put("formId", formId); params.put("formId", formId);
params.put("flowNodeId", flowNodeId);
nodeFieldDao.delete(params); nodeFieldDao.delete(params);
} }

View File

@ -0,0 +1,74 @@
package ink.wgink.module.activiti.service.oa.impl;
import ink.wgink.common.base.DefaultBaseService;
import ink.wgink.module.activiti.pojo.vos.ActivitiModelVO;
import ink.wgink.module.activiti.pojo.vos.oa.nodemanage.OaNodeManageVO;
import ink.wgink.module.activiti.pojo.vos.oa.nodemanage.config.AssigneeVO;
import ink.wgink.module.activiti.pojo.vos.oa.nodemanage.config.NodeFormFieldVO;
import ink.wgink.module.activiti.service.oa.INodeAssigneeService;
import ink.wgink.module.activiti.service.oa.INodeManageService;
import ink.wgink.module.activiti.service.oa.INodeFieldService;
import org.apache.commons.lang3.StringUtils;
import org.springframework.beans.factory.annotation.Autowired;
import org.springframework.stereotype.Service;
import java.util.List;
/**
* @ClassName: NodeConfigServiceImpl
* @Description: 节点配置
* @Author: wanggeng
* @Date: 2022/4/5 20:28
* @Version: 1.0
*/
@Service
public class NodeManageServiceImpl extends DefaultBaseService implements INodeManageService {
@Autowired
private INodeAssigneeService nodeAssigneeService;
@Autowired
private INodeFieldService nodeFieldService;
@Override
public void save(ActivitiModelVO activitiModelVO, String modelId, Integer modelVersion, String deploymentId) {
if (!activitiModelVO.getOa()) {
return;
}
LOG.debug("保存节点管理");
List<OaNodeManageVO> oaNodeManages = activitiModelVO.getOaNodeManages();
if (!StringUtils.isBlank(deploymentId)) {
for (int i = 0; i < oaNodeManages.size(); i++) {
OaNodeManageVO oaNodeManageVO = oaNodeManages.get(i);
String nodeId = oaNodeManageVO.getNodeId();
AssigneeVO assignee = oaNodeManageVO.getConfig().getAssignee();
String formId = oaNodeManageVO.getConfig().getFormId();
List<NodeFormFieldVO> formFields = oaNodeManageVO.getConfig().getFormFields();
// 保存节点与代理人配置
nodeAssigneeService.save(modelId, modelVersion, nodeId, i, assignee);
// 保存节点与表单字段配置
nodeFieldService.save(modelId, modelVersion, nodeId, i, formId, formFields);
}
} else {
for (int i = 0; i < oaNodeManages.size(); i++) {
OaNodeManageVO oaNodeManageVO = oaNodeManages.get(i);
String nodeId = oaNodeManageVO.getNodeId();
AssigneeVO assignee = oaNodeManageVO.getConfig().getAssignee();
String formId = oaNodeManageVO.getConfig().getFormId();
List<NodeFormFieldVO> formFields = oaNodeManageVO.getConfig().getFormFields();
// 保存节点与代理人配置
nodeAssigneeService.update(modelId, modelVersion, nodeId, i, assignee);
// 保存节点与表单字段配置
nodeFieldService.update(modelId, modelVersion, nodeId, i, formId, formFields);
}
}
}
@Override
public void delete(String modelId, Integer modelVersion) {
LOG.debug("删除代理人配置");
nodeAssigneeService.deleteByModelIdAndModelVersion(modelId, modelVersion);
LOG.debug("删除表单字段配置");
nodeFieldService.deleteByModelIdAndModelVersion(modelId, modelVersion);
}
}

View File

@ -0,0 +1,125 @@
<?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.INodeAssigneeDao">
<update id="createTable">
CREATE TABLE IF NOT EXISTS `oa_node_assignee` (
`id` bigint(20) unsigned NOT NULL AUTO_INCREMENT,
`node_assignee_id` char(36) DEFAULT NULL,
`model_id` char(36) DEFAULT NULL COMMENT '模型ID',
`model_version` int(11) DEFAULT NULL COMMENT '模型版本',
`deployment_id` char(36) DEFAULT NULL COMMENT '部署ID',
`node_id` char(60) DEFAULT NULL COMMENT '节点ID',
`node_index` int(11) DEFAULT NULL COMMENT '节点下标',
`node_type` varchar(255) DEFAULT NULL COMMENT '节点类型',
`assignee_type` varchar(255) DEFAULT NULL COMMENT '代理人类型',
`assignee_count` varchar(255) DEFAULT NULL COMMENT '代理人数量',
`assignee` varchar(255) DEFAULT NULL COMMENT '代理人',
`assignee_names` varchar(255) DEFAULT NULL COMMENT '代理人名称',
`auto_assign_type` varchar(255) DEFAULT NULL COMMENT '自动方式',
`department_type` varchar(255) DEFAULT NULL COMMENT '部门类型',
`departments` varchar(255) DEFAULT NULL COMMENT '部门',
`department_names` varchar(255) DEFAULT NULL COMMENT '部门名称',
`roles` varchar(255) DEFAULT NULL COMMENT '角色',
`role_names` varchar(255) DEFAULT NULL COMMENT '角色名称',
`positions` varchar(255) DEFAULT NULL COMMENT '职位',
`position_names` varchar(255) DEFAULT NULL COMMENT '职位名称',
`quick_assignee` varchar(255) DEFAULT NULL COMMENT '快速代理人',
`sign_type` varchar(255) DEFAULT NULL COMMENT '会签类型',
`sign_users` varchar(255) DEFAULT NULL COMMENT '会签人',
`complete_condition` varchar(255) DEFAULT NULL COMMENT '完成条件',
`complete_count` int(11) DEFAULT NULL COMMENT '完成人数量',
PRIMARY KEY (`id`)
) ENGINE=InnoDB DEFAULT CHARSET=utf8 COMMENT='节点代理人';
</update>
<!-- 新增 -->
<insert id="save" parameterType="map">
INSERT INTO oa_node_assignee(
node_assignee_id,
model_id,
model_version,
node_id,
node_index,
node_type,
assignee_type,
assignee_count,
assignee,
assignee_name,
auto_assign_type,
department_type,
departments,
department_names,
roles,
role_names,
positions,
position_names,
quick_assignee,
sign_type,
sign_users,
complete_condition,
complete_count
) VALUES(
#{nodeFieldId},
#{modelId},
#{modelVersion},
#{nodeId},
#{nodeIndex},
#{nodeType},
#{assigneeType},
#{assigneeCount},
#{assignee},
#{assigneeName},
#{autoAssignType},
#{departmentType},
#{departments},
#{departmentNames},
#{roles},
#{roleNames},
#{positions},
#{positionNames},
#{quickAssignee},
#{signType},
#{signUsers},
#{completeCondition},
#{completeCount}
)
</insert>
<!-- 删除 -->
<delete id="delete" parameterType="map">
DELETE FROM
oa_node_assignee
WHERE
model_id = #{modelId}
AND
model_version = #{modelVersion}
<if test="nodeId != null and nodeId != ''">
AND
node_id = #{nodeId}
</if>
</delete>
<!-- 更新部署ID -->
<update id="updateDeploymentId" parameterType="map">
UPDATE
oa_node_assignee
SET
deployment_id = #{deploymentId}
WHERE
model_id = #{modelId}
AND
model_version = #{modelVersion}
</update>
<!-- 删除部署ID -->
<update id="deleteDeploymentId" parameterType="java.lang.String">
UPDATE
oa_node_assignee
SET
deployment_id = NULL
WHERE
deployment_id = #{_parameter}
</update>
</mapper>

View File

@ -18,12 +18,15 @@
CREATE TABLE IF NOT EXISTS `oa_node_field` ( CREATE TABLE IF NOT EXISTS `oa_node_field` (
`id` bigint(20) unsigned NOT NULL AUTO_INCREMENT, `id` bigint(20) unsigned NOT NULL AUTO_INCREMENT,
`node_field_id` char(36) DEFAULT NULL COMMENT '主键', `node_field_id` char(36) DEFAULT NULL COMMENT '主键',
`deployment_id` char(36) DEFAULT NULL COMMENT '流程部署ID', `model_id` char(36) DEFAULT NULL COMMENT '模型ID',
`model_version` int(11) DEFAULT NULL COMMENT '模型版本',
`deployment_id` char(36) DEFAULT NULL COMMENT '部署ID',
`form_id` char(36) DEFAULT NULL COMMENT '表单ID', `form_id` char(36) DEFAULT NULL COMMENT '表单ID',
`flow_node_index` int(11) DEFAULT '0' COMMENT '流程节点下标', `node_id` char(60) DEFAULT NULL COMMENT '节点ID',
`flow_node_id` char(60) DEFAULT NULL COMMENT '流程节点ID', `node_index` int(11) DEFAULT NULL COMMENT '节点下标',
`flow_node_name` varchar(255) DEFAULT NULL COMMENT '流程节点名称', `field_id` char(36) DEFAULT NULL COMMENT '字段ID',
`field_name` varchar(255) DEFAULT NULL COMMENT '字段名', `field_name` varchar(255) DEFAULT NULL COMMENT '字段名',
`field_explain` varchar(255) DEFAULT NULL COMMENT '字段描述',
`is_visible` int(1) DEFAULT '1' COMMENT '是否可见', `is_visible` int(1) DEFAULT '1' COMMENT '是否可见',
`is_editable` int(1) DEFAULT '1' COMMENT '是否可编辑', `is_editable` int(1) DEFAULT '1' COMMENT '是否可编辑',
PRIMARY KEY (`id`) PRIMARY KEY (`id`)
@ -34,22 +37,26 @@
<insert id="save" parameterType="map"> <insert id="save" parameterType="map">
INSERT INTO oa_node_field( INSERT INTO oa_node_field(
node_field_id, node_field_id,
deployment_id, model_id,
model_version,
form_id, form_id,
flow_node_index, node_id,
flow_node_id, node_index,
flow_node_name, field_id,
field_name, field_name,
field_explain,
is_visible, is_visible,
is_editable is_editable
) VALUES( ) VALUES(
#{nodeFieldId}, #{nodeFieldId},
#{deploymentId}, #{modelId},
#{modelVersion},
#{formId}, #{formId},
#{flowNodeIndex}, #{nodeId},
#{flowNodeId}, #{nodeIndex},
#{flowNodeName}, #{fieldId},
#{fieldName}, #{fieldName},
#{fieldExplain},
#{isVisible}, #{isVisible},
#{isEditable} #{isEditable}
) )
@ -60,14 +67,16 @@
DELETE FROM DELETE FROM
oa_node_field oa_node_field
WHERE WHERE
deployment_id = #{deploymentId} model_id = #{modelId}
AND
model_version = #{modelVersion}
<if test="formId != null and formId != ''"> <if test="formId != null and formId != ''">
AND AND
form_id = #{formId} form_id = #{formId}
</if> </if>
<if test="flowNodeId != null and flowNodeId != ''"> <if test="nodeId != null and nodeId != ''">
AND AND
flow_node_id = #{flowNodeId} node_id = #{nodeId}
</if> </if>
</delete> </delete>
@ -87,6 +96,28 @@
node_field_id = #{nodeFieldId} node_field_id = #{nodeFieldId}
</update> </update>
<!-- 更新部署ID -->
<update id="updateDeploymentId" parameterType="map">
UPDATE
oa_node_field
SET
deployment_id = #{deploymentId}
WHERE
model_id = #{modelId}
AND
model_version = #{modelVersion}
</update>
<!-- 删除部署ID -->
<update id="deleteDeploymentId" parameterType="java.lang.String">
UPDATE
oa_node_field
SET
deployment_id = NULL
WHERE
deployment_id = #{_parameter}
</update>
<!-- 节点列表 --> <!-- 节点列表 -->
<select id="listNode" parameterType="map" resultMap="nodeFieldDTO"> <select id="listNode" parameterType="map" resultMap="nodeFieldDTO">
SELECT SELECT

View File

@ -49,7 +49,7 @@ var KisBpmAssignmentPopupCtrl = ['$scope', function ($scope) {
$scope.assignment.candidateUsers = [{value: ''}]; $scope.assignment.candidateUsers = [{value: ''}];
} }
$scope.selectUserId = function() { $scope.selectUserId = function () {
top.dialog.dialogData.selectedUserIds = $scope.assignment.assignee; top.dialog.dialogData.selectedUserIds = $scope.assignment.assignee;
top.dialog.open({ top.dialog.open({
url: top.restAjax.path('route/department/user/select-user', []), url: top.restAjax.path('route/department/user/select-user', []),
@ -57,11 +57,11 @@ var KisBpmAssignmentPopupCtrl = ['$scope', function ($scope) {
width: '500px', width: '500px',
height: '500px', height: '500px',
closeBtn: 0, closeBtn: 0,
onClose: function() { onClose: function () {
var selectedUsers = top.dialog.dialogData.selectedDepartmentUsers; var selectedUsers = top.dialog.dialogData.selectedDepartmentUsers;
// 这里写处理逻辑 // 这里写处理逻辑
if(selectedUsers && selectedUsers.length > 0) { if (selectedUsers && selectedUsers.length > 0) {
if(selectedUsers.length > 1) { if (selectedUsers.length > 1) {
top.dialog.msg('处理人只能选择一位'); top.dialog.msg('处理人只能选择一位');
return; return;
} }
@ -74,15 +74,15 @@ var KisBpmAssignmentPopupCtrl = ['$scope', function ($scope) {
}) })
} }
$scope.selectCandidateUserId = function() { $scope.selectCandidateUserId = function () {
var userIds = ''; var userIds = '';
var candidateUsers = $scope.assignment.candidateUsers; var candidateUsers = $scope.assignment.candidateUsers;
if(candidateUsers && candidateUsers.length > 0) { if (candidateUsers && candidateUsers.length > 0) {
for(var i = 0, item; item = candidateUsers[i++];) { for (var i = 0, item; item = candidateUsers[i++];) {
if(item == '') { if (item == '') {
continue; continue;
} }
if(userIds.length > 0) { if (userIds.length > 0) {
userIds += '_'; userIds += '_';
} }
userIds += item.value; userIds += item.value;
@ -95,12 +95,12 @@ var KisBpmAssignmentPopupCtrl = ['$scope', function ($scope) {
width: '500px', width: '500px',
height: '500px', height: '500px',
closeBtn: 0, closeBtn: 0,
onClose: function() { onClose: function () {
var selectedUsers = top.dialog.dialogData.selectedDepartmentUsers; var selectedUsers = top.dialog.dialogData.selectedDepartmentUsers;
// 这里写处理逻辑 // 这里写处理逻辑
if(selectedUsers && selectedUsers.length > 0) { if (selectedUsers && selectedUsers.length > 0) {
var candidateUserArray = []; var candidateUserArray = [];
for(var i = 0, item; item = selectedUsers[i++];) { for (var i = 0, item; item = selectedUsers[i++];) {
candidateUserArray.push({ candidateUserArray.push({
value: item.userId value: item.userId
}) })

View File

@ -27,11 +27,15 @@ var OaNodeManagePopupCtrl = ['$scope', '$timeout', '$http', function($scope, $ti
assigneeType: '', assigneeType: '',
assigneeCount: 0, assigneeCount: 0,
assignee: '', assignee: '',
assigneeName: '',
autoAssignType: '', autoAssignType: '',
departmentType: '', departmentType: '',
departments: '', departments: '',
departmentNames: '',
roles: '', roles: '',
roleNames: '',
positions: '', positions: '',
positionNames: '',
quickAssignee: '', quickAssignee: '',
signType: '', signType: '',
signUsers: '', signUsers: '',
@ -131,6 +135,71 @@ var OaNodeManagePopupCtrl = ['$scope', '$timeout', '$http', function($scope, $ti
$scope.oaNodeManage.oaUserTaskListeners.splice(index, 1); $scope.oaNodeManage.oaUserTaskListeners.splice(index, 1);
} }
// 选择用户
$scope.selectUser = function() {
var assignee = $scope.oaNodeManage.assignee;
top.dialog.dialogData.selectedUserIds = assignee.assignee;
top.dialog.open({
url: top.restAjax.path('route/department/user/select-user', []),
title: '选择用户',
width: '500px',
height: '500px',
closeBtn: 0,
onClose: function () {
var selectedUsers = top.dialog.dialogData.selectedDepartmentUsers;
// 这里写处理逻辑
if (selectedUsers && selectedUsers.length > 0) {
if(selectedUsers.length > 1) {
top.dialog.msg('只能选择一位代理人');
return;
}
var userId = selectedUsers[0].userId;
var userName = selectedUsers[0].userName;
assignee.assignee = selectedUsers[0].userId;
assignee.assigneeName = selectedUsers[0].userName;
} else {
assignee.assignee = '';
assignee.assigneeName = '';
}
top.dialog.dialogData.selectedDepartmentUsers = [];
$scope.$apply();
}
})
}
$scope.selectDepartments = function() {
var assignee = $scope.oaNodeManage.assignee;
top.dialog.dialogData.checkedIds = !assignee.departments ? [] : assignee.departments.split(',');
top.dialog.open({
url: top.restAjax.path('route/department/list-tree-check', []),
title: '选择组织部门',
width: '400px',
height: '400px',
onClose: function() {
var checkedNodes = top.dialog.dialogData.checkedNodes;
if(checkedNodes && checkedNodes.length > 0) {
var departments = '';
var departmentNames = '';
for(var i = 0, item; item = checkedNodes[i++];) {
if(departments.length > 0) {
departments += ',';
departmentNames += ',';
}
departments += item.id;
departmentNames += item.name;
}
assignee.departments = departments;
assignee.departmentNames = departmentNames;
} else {
assignee.departments = '';
assignee.departmentNames = '';
}
top.dialog.dialogData.checkedNodes = [];
$scope.$apply();
}
});
}
// Click handler for save button // Click handler for save button
$scope.save = function () { $scope.save = function () {
@ -177,14 +246,33 @@ var OaNodeManagePopupCtrl = ['$scope', '$timeout', '$http', function($scope, $ti
} }
} }
// 初始化oaUserTaskCompleteListener
function initOaUserTaskCompleteListener() {
if($scope.property.value) {
return;
}
var event = 'complete',
className = '',
expression = '',
delegateExpression = '${oaUserTaskCompleteListener}';
if (isListenerExist(event, className)) {
top.dialog.msg('监听器已经存在');
return;
}
addOaUserTaskListener(event, className, expression, delegateExpression);
}
// 初始化form表单ID // 初始化form表单ID
function initFormId() { function initFormId(callback) {
$scope.oaNodeManage.formId = startNode.properties.formkeydefinition; $scope.oaNodeManage.formId = startNode.properties.formkeydefinition;
if(!$scope.oaNodeManage.formId) { if(!$scope.oaNodeManage.formId) {
top.dialog.msg('开始节点未绑定表单无法设置OA节点'); top.dialog.msg('开始节点未绑定表单无法设置OA节点');
$timeout(function() {
$scope.close(); $scope.close();
}, 10)
return; return;
} }
callback();
} }
// 初始化form表单 // 初始化form表单
@ -216,29 +304,14 @@ var OaNodeManagePopupCtrl = ['$scope', '$timeout', '$http', function($scope, $ti
}) })
} }
// 初始化oaUserTaskCompleteListener
function initOaUserTaskCompleteListener() {
if($scope.property.value) {
return;
}
var event = 'complete',
className = '',
expression = '',
delegateExpression = '${oaUserTaskCompleteListener}';
if (isListenerExist(event, className)) {
top.dialog.msg('监听器已经存在');
return;
}
addOaUserTaskListener(event, className, expression, delegateExpression);
}
// 初始化 // 初始化
(function() { (function() {
initOaNodeManage(); initOaNodeManage();
initStartNode(); initStartNode();
initFormId();
initFormField();
initOaUserTaskCompleteListener(); initOaUserTaskCompleteListener();
initFormId(function() {
initFormField();
});
})(); })();
}]; }];

View File

@ -84,8 +84,9 @@
<tr ng-if="oaNodeManage.assignee.nodeType == 'normal' && oaNodeManage.assignee.assigneeType == 'appoint' && oaNodeManage.assignee.assigneeCount == 'single'"> <tr ng-if="oaNodeManage.assignee.nodeType == 'normal' && oaNodeManage.assignee.assigneeType == 'appoint' && oaNodeManage.assignee.assigneeCount == 'single'">
<td> <td>
<input ng-model="oaNodeManage.assignee.assignee" type="hidden" name="assignee"> <input ng-model="oaNodeManage.assignee.assignee" type="hidden" name="assignee">
<button type="button">选择</button> <input ng-model="oaNodeManage.assignee.assigneeName" type="hidden" name="assigneeName">
<span>用户1</span> <button type="button" ng-click="selectUser()">选择</button>
<span>{{oaNodeManage.assignee.assigneeName}}</span>
</td> </td>
</tr> </tr>
<!-- 手动指定代理人 end --> <!-- 手动指定代理人 end -->
@ -134,8 +135,9 @@
<tr ng-if="oaNodeManage.assignee.nodeType == 'normal' && oaNodeManage.assignee.assigneeType == 'auto' && oaNodeManage.assignee.autoAssignType == 'scope' && oaNodeManage.assignee.departmentType == 'appoint'"> <tr ng-if="oaNodeManage.assignee.nodeType == 'normal' && oaNodeManage.assignee.assigneeType == 'auto' && oaNodeManage.assignee.autoAssignType == 'scope' && oaNodeManage.assignee.departmentType == 'appoint'">
<td> <td>
<input ng-model="oaNodeManage.assignee.departments" type="hidden" name="departments"> <input ng-model="oaNodeManage.assignee.departments" type="hidden" name="departments">
<button type="button">选择</button> <input ng-model="oaNodeManage.assignee.departmentNames" type="hidden" name="departmentNames">
<span>部门</span> <button type="button" ng-click="selectDepartments()">选择</button>
<span>{{oaNodeManage.assignee.departmentNames}}</span>
</td> </td>
</tr> </tr>

View File

@ -21,21 +21,7 @@
var KISBPM = KISBPM || {}; var KISBPM = KISBPM || {};
KISBPM.TOOLBAR = { KISBPM.TOOLBAR = {
ACTIONS: { ACTIONS: {
saveModel: function (services) { getSvgDom: function(scope) {
var scope = services.$scope;
top.dialog.confirm('确定保存吗?', function (index) {
top.dialog.close(index);
var json = scope.editor.getJSON();
console.log(json)
if(!json.properties.name) {
top.dialog.msg('流程的 元素名称 不能为空');
return;
}
if(json.childShapes.length == 0) {
top.dialog.msg('流程图节点不能为空');
return;
}
json = JSON.stringify(json);
var selection = scope.editor.getSelection(); var selection = scope.editor.getSelection();
scope.editor.setSelection([]); scope.editor.setSelection([]);
// Get the serialized svg image source // Get the serialized svg image source
@ -53,18 +39,51 @@ KISBPM.TOOLBAR = {
stripOutArray[i].remove(); stripOutArray[i].remove();
} }
// Parse dom to string // Parse dom to string
var svgDOM = DataManager.serialize(svgClone); return DataManager.serialize(svgClone);
},
listOaNodeManage: function(json) {
var nodes = json.childShapes;
var oaNodeManages = [];
for(var i = 0, item; item = nodes[i++];) {
if(item.stencil.id === 'UserTask') {
if(!item.properties.oanodemanage) {
continue;
}
oaNodeManages.push({
nodeId: item.resourceId,
config: item.properties.oanodemanage
})
}
}
return oaNodeManages;
},
saveModel: function (services) {
var scope = services.$scope;
top.dialog.confirm('确定保存吗?', function (index) {
top.dialog.close(index);
var json = scope.editor.getJSON();
if(!json.properties.name) {
top.dialog.msg('流程的 元素名称 不能为空');
return;
}
if(json.childShapes.length == 0) {
top.dialog.msg('流程图节点不能为空');
return;
}
var svgDOM = KISBPM.TOOLBAR.ACTIONS.getSvgDom(scope);
var modelMetaData = scope.editor.getModelMetaData(); var modelMetaData = scope.editor.getModelMetaData();
// 构建oaNodeManages管理列表 // 构建oaNodeManages管理列表
var oaNodeManages = KISBPM.TOOLBAR.ACTIONS.listOaNodeManage(json);
console.log(oaNodeManages)
var params = { var params = {
jsonXml: json, jsonXml: JSON.stringify(json),
svgXml: svgDOM, svgXml: svgDOM,
name: modelMetaData.name, name: modelMetaData.name,
description: modelMetaData.description, description: modelMetaData.description,
oaNodeManages: [] isOa: oaNodeManages.length > 0 ? true : false,
}; oaNodeManages: oaNodeManages
}
var loadLayerIndex; var loadLayerIndex;
top.restAjax.put(KISBPM.URL.putModel(modelMetaData.modelId), params, null, function (code, data) { top.restAjax.put(KISBPM.URL.putModel(modelMetaData.modelId), params, null, function (code, data) {
parent.layer.close(parent.layer.getFrameIndex(window.name)); parent.layer.close(parent.layer.getFrameIndex(window.name));

View File

@ -26,7 +26,7 @@
</div> </div>
<div class="full"> <div class="full">
<div class="row row-no-gutter"> <div class="row row-no-gutter">
<div id="paletteHelpWrapper" class="col-xs-3"> <div id="paletteHelpWrapper" class="col-xs-2">
<div class="stencils" id="paletteSection"> <div class="stencils" id="paletteSection">
<div ng-if="stencilItemGroups.length > 1"> <div ng-if="stencilItemGroups.length > 1">
<div ng-repeat="group in stencilItemGroups"> <div ng-repeat="group in stencilItemGroups">
@ -56,7 +56,7 @@
</div> </div>
</div> </div>
</div> </div>
<div id="canvasHelpWrapper" class="col-xs-9"> <div id="canvasHelpWrapper" class="col-xs-10">
<div class="canvas-wrapper" id="canvasSection" <div class="canvas-wrapper" id="canvasSection"
ng-model="droppedElement" ng-model="droppedElement"
ng-model="droppedElement" ng-model="droppedElement"
@ -92,7 +92,7 @@
</div> </div>
</div> </div>
</div> </div>
<div id="propertiesHelpWrapper" class="col-xs-9"> <div id="propertiesHelpWrapper" class="col-xs-10">
<div class="propertySection" id="propertySection" <div class="propertySection" id="propertySection"
ng-class="{collapsed: propertyWindowState.collapsed}"> ng-class="{collapsed: propertyWindowState.collapsed}">
<div class="selected-item-section"> <div class="selected-item-section">

View File

@ -156,28 +156,6 @@
height: $win.height() - 50, height: $win.height() - 50,
}); });
} }
// 删除
function removeData(ids) {
top.dialog.msg(top.dataMessage.delete, {
time: 0,
btn: [top.dataMessage.button.yes, top.dataMessage.button.no],
shade: 0.3,
yes: function (index) {
top.dialog.close(index);
var layIndex;
top.restAjax.delete(top.restAjax.path('api/activiti/delete/{ids}', [ids]), {}, null, function (code, data) {
top.dialog.msg(top.dataMessage.deleteSuccess, {time: 1000});
reloadTable();
}, function (code, data) {
top.dialog.msg(data.msg);
}, function () {
layIndex = top.dialog.msg(top.dataMessage.deleting, {icon: 16, time: 0, shade: 0.3});
}, function () {
top.dialog.close(layIndex);
});
}
});
}
initTable(); initTable();
// 事件 - 页面变化 // 事件 - 页面变化
$win.on('resize', function() { $win.on('resize', function() {
@ -237,7 +215,25 @@
} }
}); });
} else if(layEvent === 'removeEvent') { } else if(layEvent === 'removeEvent') {
removeData(data.id); top.dialog.msg(top.dataMessage.delete, {
time: 0,
btn: [top.dataMessage.button.yes, top.dataMessage.button.no],
shade: 0.3,
yes: function (index) {
top.dialog.close(index);
var layIndex;
top.restAjax.delete(top.restAjax.path('api/activiti/model/delete/{id}', [data.id]), {}, null, function (code, data) {
top.dialog.msg(top.dataMessage.deleteSuccess, {time: 1000});
reloadTable();
}, function (code, data) {
top.dialog.msg(data.msg);
}, function () {
layIndex = top.dialog.msg(top.dataMessage.deleting, {icon: 16, time: 0, shade: 0.3});
}, function () {
top.dialog.close(layIndex);
});
}
});
} }
}); });
}); });

View File

@ -132,10 +132,9 @@
return flowChatImg; return flowChatImg;
} }
}, },
{field: 'form', width: 140, title: '操作', align:'center', fixed: 'right', {field: 'form', width: 70, title: '操作', align:'center', fixed: 'right',
templet: function(row) { templet: function(row) {
return '<div class="layui-btn-group">' + return '<div class="layui-btn-group">' +
'<button class="layui-btn layui-btn-xs" lay-event="nodeEvent">节点管理</button>'+
'<button class="layui-btn layui-btn-xs layui-btn-danger" lay-event="deleteEvent">删除</button>'+ '<button class="layui-btn layui-btn-xs layui-btn-danger" lay-event="deleteEvent">删除</button>'+
'</div>'; '</div>';
} }
@ -189,14 +188,6 @@
height: '95%', height: '95%',
onClose: function() {} onClose: function() {}
}); });
} else if(layEvent === 'nodeEvent') {
top.dialog.open({
url: top.restAjax.path('route/oa/node-field/list-node?deploymentId={deploymentId}', [data.deploymentId]),
title: '节点字段管理',
width: '800px',
height: '500px',
onClose: function() {}
});
} else if(layEvent === 'deleteEvent') { } else if(layEvent === 'deleteEvent') {
top.dialog.msg('删除流程会删除与流程有关的所有数据,确定删除吗?', { top.dialog.msg('删除流程会删除与流程有关的所有数据,确定删除吗?', {
time: 0, time: 0,