调整了代码结构,增加了节点管理后台逻辑,增加了人员选择,部门选择
This commit is contained in:
parent
774afc6fa6
commit
538f85eeb4
@ -53,17 +53,6 @@ public class ActivitiController extends DefaultBaseController {
|
||||
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 = "发布模型接口")
|
||||
@ApiImplicitParams({
|
||||
@ApiImplicitParam(name = "modelId", value = "模型ID", paramType = "path")
|
||||
|
@ -53,7 +53,18 @@ public class ActivitiModelController extends DefaultBaseController {
|
||||
if (RegexUtil.isChinese(activitiModelVO.getName())) {
|
||||
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();
|
||||
}
|
||||
|
||||
|
@ -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;
|
||||
}
|
@ -44,6 +44,22 @@ public interface INodeFieldDao extends IInitBaseTable {
|
||||
*/
|
||||
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;
|
||||
|
||||
|
||||
}
|
||||
|
@ -1,5 +1,9 @@
|
||||
package ink.wgink.module.activiti.pojo.vos;
|
||||
|
||||
import ink.wgink.module.activiti.pojo.vos.oa.nodemanage.OaNodeManageVO;
|
||||
|
||||
import java.util.List;
|
||||
|
||||
/**
|
||||
* @ClassName: ActivitiModelVO
|
||||
* @Description: 模型
|
||||
@ -14,6 +18,8 @@ public class ActivitiModelVO {
|
||||
private String description;
|
||||
private String jsonXml;
|
||||
private String svgXml;
|
||||
private Boolean isOa;
|
||||
private List<OaNodeManageVO> oaNodeManages;
|
||||
|
||||
public String getName() {
|
||||
return name == null ? "" : name.trim();
|
||||
@ -46,4 +52,20 @@ public class ActivitiModelVO {
|
||||
public void setSvgXml(String 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;
|
||||
}
|
||||
}
|
||||
|
@ -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();
|
||||
}
|
||||
}
|
@ -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();
|
||||
}
|
||||
}
|
@ -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();
|
||||
}
|
||||
}
|
@ -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();
|
||||
}
|
||||
}
|
@ -2,6 +2,7 @@ package ink.wgink.module.activiti.service.activiti;
|
||||
|
||||
import com.alibaba.fastjson.JSONObject;
|
||||
import ink.wgink.module.activiti.pojo.dtos.ActivitiFlowNodeDTO;
|
||||
import ink.wgink.module.activiti.pojo.vos.ActivitiModelVO;
|
||||
import org.activiti.bpmn.model.*;
|
||||
|
||||
import javax.servlet.http.HttpServletResponse;
|
||||
@ -36,13 +37,17 @@ public interface IActivitiModelService {
|
||||
* 保存模型
|
||||
*
|
||||
* @param modelId
|
||||
* @param name
|
||||
* @param description
|
||||
* @param json_xml
|
||||
* @param svg_xml
|
||||
* @param activitiModelVO
|
||||
* @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);
|
||||
|
||||
/**
|
||||
* 获取原生流程节点列表
|
||||
|
@ -29,13 +29,6 @@ public interface IActivitiService {
|
||||
*/
|
||||
String create(ActivitiVO activitiVO) throws UnsupportedEncodingException;
|
||||
|
||||
/**
|
||||
* 删除模型
|
||||
*
|
||||
* @param modelId 模型ID
|
||||
*/
|
||||
void delete(String modelId);
|
||||
|
||||
|
||||
/**
|
||||
* 发布模型
|
||||
|
@ -3,11 +3,14 @@ package ink.wgink.module.activiti.service.activiti.impl;
|
||||
import com.alibaba.fastjson.JSONArray;
|
||||
import com.alibaba.fastjson.JSONObject;
|
||||
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.ActivitiModelVO;
|
||||
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.xml.XMLUtil;
|
||||
import org.activiti.bpmn.model.*;
|
||||
@ -51,24 +54,35 @@ public class ActivitiModelServiceImpl extends DefaultBaseService implements IAct
|
||||
private RuntimeService runtimeService;
|
||||
@Autowired
|
||||
private HistoryService historyService;
|
||||
@Autowired
|
||||
private INodeManageService nodeManageService;
|
||||
|
||||
@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);
|
||||
if (model == null) {
|
||||
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());
|
||||
modelObject.put(MODEL_NAME, name);
|
||||
modelObject.put(MODEL_DESCRIPTION, description);
|
||||
modelObject.put(MODEL_NAME, activitiModelVO.getName());
|
||||
modelObject.put(MODEL_DESCRIPTION, activitiModelVO.getDescription());
|
||||
model.setMetaInfo(modelObject.toString());
|
||||
model.setName(name);
|
||||
model.setVersion(model.getVersion() + 1);
|
||||
model.setName(activitiModelVO.getName());
|
||||
model.setVersion(modelVersion);
|
||||
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);
|
||||
|
||||
PNGTranscoder transcoder = new PNGTranscoder();
|
||||
@ -82,6 +96,22 @@ public class ActivitiModelServiceImpl extends DefaultBaseService implements IAct
|
||||
repositoryService.addModelEditorSourceExtra(model.getId(), result);
|
||||
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
|
||||
|
@ -4,6 +4,8 @@ import ink.wgink.common.base.DefaultBaseService;
|
||||
import ink.wgink.module.activiti.pojo.dtos.ActivitiProcdefDTO;
|
||||
import ink.wgink.module.activiti.service.activiti.IActivitiModelService;
|
||||
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 org.activiti.engine.RepositoryService;
|
||||
import org.activiti.engine.RuntimeService;
|
||||
@ -29,13 +31,17 @@ public class ActivitiProcdefServiceImpl extends DefaultBaseService implements IA
|
||||
@Autowired
|
||||
private RepositoryService repositoryService;
|
||||
@Autowired
|
||||
private RuntimeService runtimeService;
|
||||
private INodeAssigneeService nodeAssigneeService;
|
||||
@Autowired
|
||||
private IActivitiModelService activitiModelService;
|
||||
private INodeFieldService nodeFieldService;
|
||||
|
||||
@Override
|
||||
public void delete(String deploymentId) {
|
||||
repositoryService.deleteDeployment(deploymentId, true);
|
||||
LOG.debug("删除代理人配置部署ID");
|
||||
nodeAssigneeService.deleteDeploymentId(deploymentId);
|
||||
LOG.debug("删除表单配置部署ID");
|
||||
nodeFieldService.deleteDeploymentId(deploymentId);
|
||||
}
|
||||
|
||||
@Override
|
||||
|
@ -4,29 +4,20 @@ import com.alibaba.fastjson.JSONObject;
|
||||
import com.fasterxml.jackson.databind.JsonNode;
|
||||
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.IActivitiModelService;
|
||||
import ink.wgink.module.activiti.service.activiti.IActivitiProcdefService;
|
||||
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.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.*;
|
||||
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.language.json.converter.BpmnJsonConverter;
|
||||
import org.activiti.engine.HistoryService;
|
||||
import org.activiti.engine.RepositoryService;
|
||||
import org.activiti.engine.RuntimeService;
|
||||
import org.activiti.engine.repository.Deployment;
|
||||
import org.activiti.engine.repository.Model;
|
||||
import org.activiti.engine.repository.ModelQuery;
|
||||
@ -36,7 +27,6 @@ import org.springframework.stereotype.Service;
|
||||
|
||||
import java.io.IOException;
|
||||
import java.io.UnsupportedEncodingException;
|
||||
import java.util.ArrayList;
|
||||
import java.util.List;
|
||||
|
||||
/**
|
||||
@ -55,19 +45,11 @@ public class ActivitiServiceImpl extends DefaultBaseService implements IActiviti
|
||||
@Autowired
|
||||
private RepositoryService repositoryService;
|
||||
@Autowired
|
||||
private HistoryService historyService;
|
||||
@Autowired
|
||||
private RuntimeService runtimeService;
|
||||
@Autowired
|
||||
private IActivitiModelService activitiModelService;
|
||||
@Autowired
|
||||
private IActivitiProcdefService activitiProcdefService;
|
||||
private INodeAssigneeService nodeAssigneeService;
|
||||
@Autowired
|
||||
private INodeFieldService nodeFieldService;
|
||||
@Autowired
|
||||
private IFormService formService;
|
||||
@Autowired
|
||||
private IFormFieldService formFieldService;
|
||||
|
||||
@Override
|
||||
public String create(ActivitiVO activitiVO) throws UnsupportedEncodingException {
|
||||
@ -86,18 +68,6 @@ public class ActivitiServiceImpl extends DefaultBaseService implements IActiviti
|
||||
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
|
||||
public void saveDeploy(String modelId) throws IOException {
|
||||
Model model = repositoryService.getModel(modelId);
|
||||
@ -112,7 +82,6 @@ public class ActivitiServiceImpl extends DefaultBaseService implements IActiviti
|
||||
JsonNode modelNode = new ObjectMapper().readTree(modelEditorSource);
|
||||
BpmnModel bpmnModel = new BpmnJsonConverter().convertToBpmnModel(modelNode);
|
||||
|
||||
|
||||
LOG.debug("获取流程节点列表");
|
||||
List<FlowNode> flowNodes = activitiModelService.listFlowNode(bpmnModel);
|
||||
LOG.debug("获得开始节点");
|
||||
@ -122,12 +91,12 @@ public class ActivitiServiceImpl extends DefaultBaseService implements IActiviti
|
||||
String deploymentId;
|
||||
if (!StringUtils.isBlank(formKey)) {
|
||||
LOG.debug("存在自定义表单,是OA流程,执行初始化操作");
|
||||
LOG.debug("1.初始化");
|
||||
LOG.debug("2.部署流程");
|
||||
LOG.debug("1.部署流程");
|
||||
deploymentId = deployProcess(model, bpmnModel);
|
||||
LOG.debug("3.绑定节点设置");
|
||||
LOG.debug("4.绑定流程节点与表单关系");
|
||||
saveNodeField(deploymentId, flowNodes);
|
||||
LOG.debug("2.绑定节点代理人");
|
||||
nodeAssigneeService.updateDeploymentId(modelId, model.getVersion(), deploymentId);
|
||||
LOG.debug("3.绑定节点表单字段");
|
||||
nodeFieldService.updateDeploymentId(modelId, model.getVersion(), deploymentId);
|
||||
} else {
|
||||
LOG.debug("不存在自定义表单,不是OA流程,直接部署");
|
||||
deploymentId = deployProcess(model, bpmnModel);
|
||||
@ -153,62 +122,6 @@ public class ActivitiServiceImpl extends DefaultBaseService implements IActiviti
|
||||
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
|
||||
public void revokeDeploy(String modelId) {
|
||||
Model modelData = repositoryService.getModel(modelId);
|
||||
|
@ -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);
|
||||
}
|
@ -1,7 +1,7 @@
|
||||
package ink.wgink.module.activiti.service.oa;
|
||||
|
||||
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;
|
||||
|
||||
@ -14,11 +14,37 @@ import java.util.List;
|
||||
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);
|
||||
|
||||
|
||||
/**
|
||||
* 删除部署ID
|
||||
*
|
||||
* @param deploymentId
|
||||
*/
|
||||
void deleteDeploymentId(String deploymentId);
|
||||
|
||||
/**
|
||||
* 删除
|
||||
*
|
||||
* @param modelId 模型ID
|
||||
* @param modelVersion 模型版本
|
||||
*/
|
||||
void deleteByModelIdAndModelVersion(String modelId, Integer modelVersion);
|
||||
|
||||
/**
|
||||
* 节点列表
|
||||
*
|
||||
|
@ -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);
|
||||
}
|
@ -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);
|
||||
}
|
||||
|
||||
}
|
@ -3,8 +3,7 @@ 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.dtos.oa.NodeFieldDTO;
|
||||
import ink.wgink.module.activiti.pojo.vos.oa.NodeFieldUpdateVO;
|
||||
import ink.wgink.module.activiti.pojo.vos.oa.NodeFieldVO;
|
||||
import ink.wgink.module.activiti.pojo.vos.oa.nodemanage.config.NodeFormFieldVO;
|
||||
import ink.wgink.module.activiti.service.oa.INodeFieldService;
|
||||
import ink.wgink.util.UUIDUtil;
|
||||
import ink.wgink.util.map.HashMapUtil;
|
||||
@ -21,22 +20,41 @@ import java.util.Map;
|
||||
* @Version: 1.0
|
||||
**/
|
||||
@Service
|
||||
public class NodeFieldFieldServiceImpl extends DefaultBaseService implements INodeFieldService {
|
||||
public class NodeFieldServiceImpl 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.getFlowNodeIndex(),
|
||||
nodeFieldUpdateVO.getFlowNodeId(),
|
||||
nodeFieldUpdateVO.getFlowNodeName(),
|
||||
nodeFieldUpdateVO.getFormFields());
|
||||
public void save(String modelId, Integer modelVersion, String nodeId, Integer nodeIndex, String formId, List<NodeFormFieldVO> formFields) {
|
||||
LOG.debug("新增字段配置");
|
||||
formFields.forEach(nodeFormFieldVO -> {
|
||||
Map<String, Object> params = HashMapUtil.beanToMap(nodeFormFieldVO);
|
||||
params.put("nodeFieldId", UUIDUtil.getUUID());
|
||||
params.put("modelId", modelId);
|
||||
params.put("modelVersion", modelVersion);
|
||||
params.put("nodeId", nodeId);
|
||||
params.put("nodeIndex", nodeIndex);
|
||||
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
|
||||
@ -55,6 +73,19 @@ public class NodeFieldFieldServiceImpl extends DefaultBaseService implements INo
|
||||
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
|
||||
public List<NodeFieldDTO> listNodeByDeploymentId(String deploymentId) {
|
||||
Map<String, Object> params = getHashMap(2);
|
||||
@ -70,40 +101,21 @@ public class NodeFieldFieldServiceImpl extends DefaultBaseService implements INo
|
||||
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 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);
|
||||
params.put("deploymentId", deploymentId);
|
||||
params.put("modelId", modelId);
|
||||
params.put("modelVersion", modelVersion);
|
||||
params.put("nodeId", nodeId);
|
||||
params.put("formId", formId);
|
||||
params.put("flowNodeId", flowNodeId);
|
||||
|
||||
nodeFieldDao.delete(params);
|
||||
}
|
||||
|
@ -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);
|
||||
}
|
||||
|
||||
}
|
@ -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>
|
@ -18,12 +18,15 @@
|
||||
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',
|
||||
`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',
|
||||
`flow_node_index` int(11) DEFAULT '0' COMMENT '流程节点下标',
|
||||
`flow_node_id` char(60) DEFAULT NULL COMMENT '流程节点ID',
|
||||
`flow_node_name` varchar(255) DEFAULT NULL COMMENT '流程节点名称',
|
||||
`node_id` char(60) DEFAULT NULL COMMENT '节点ID',
|
||||
`node_index` int(11) DEFAULT NULL COMMENT '节点下标',
|
||||
`field_id` char(36) DEFAULT NULL COMMENT '字段ID',
|
||||
`field_name` varchar(255) DEFAULT NULL COMMENT '字段名',
|
||||
`field_explain` varchar(255) DEFAULT NULL COMMENT '字段描述',
|
||||
`is_visible` int(1) DEFAULT '1' COMMENT '是否可见',
|
||||
`is_editable` int(1) DEFAULT '1' COMMENT '是否可编辑',
|
||||
PRIMARY KEY (`id`)
|
||||
@ -34,22 +37,26 @@
|
||||
<insert id="save" parameterType="map">
|
||||
INSERT INTO oa_node_field(
|
||||
node_field_id,
|
||||
deployment_id,
|
||||
model_id,
|
||||
model_version,
|
||||
form_id,
|
||||
flow_node_index,
|
||||
flow_node_id,
|
||||
flow_node_name,
|
||||
node_id,
|
||||
node_index,
|
||||
field_id,
|
||||
field_name,
|
||||
field_explain,
|
||||
is_visible,
|
||||
is_editable
|
||||
) VALUES(
|
||||
#{nodeFieldId},
|
||||
#{deploymentId},
|
||||
#{modelId},
|
||||
#{modelVersion},
|
||||
#{formId},
|
||||
#{flowNodeIndex},
|
||||
#{flowNodeId},
|
||||
#{flowNodeName},
|
||||
#{nodeId},
|
||||
#{nodeIndex},
|
||||
#{fieldId},
|
||||
#{fieldName},
|
||||
#{fieldExplain},
|
||||
#{isVisible},
|
||||
#{isEditable}
|
||||
)
|
||||
@ -60,14 +67,16 @@
|
||||
DELETE FROM
|
||||
oa_node_field
|
||||
WHERE
|
||||
deployment_id = #{deploymentId}
|
||||
model_id = #{modelId}
|
||||
AND
|
||||
model_version = #{modelVersion}
|
||||
<if test="formId != null and formId != ''">
|
||||
AND
|
||||
form_id = #{formId}
|
||||
</if>
|
||||
<if test="flowNodeId != null and flowNodeId != ''">
|
||||
<if test="nodeId != null and nodeId != ''">
|
||||
AND
|
||||
flow_node_id = #{flowNodeId}
|
||||
node_id = #{nodeId}
|
||||
</if>
|
||||
</delete>
|
||||
|
||||
@ -87,6 +96,28 @@
|
||||
node_field_id = #{nodeFieldId}
|
||||
</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
|
||||
|
@ -49,7 +49,7 @@ var KisBpmAssignmentPopupCtrl = ['$scope', function ($scope) {
|
||||
$scope.assignment.candidateUsers = [{value: ''}];
|
||||
}
|
||||
|
||||
$scope.selectUserId = function() {
|
||||
$scope.selectUserId = function () {
|
||||
top.dialog.dialogData.selectedUserIds = $scope.assignment.assignee;
|
||||
top.dialog.open({
|
||||
url: top.restAjax.path('route/department/user/select-user', []),
|
||||
@ -57,11 +57,11 @@ var KisBpmAssignmentPopupCtrl = ['$scope', function ($scope) {
|
||||
width: '500px',
|
||||
height: '500px',
|
||||
closeBtn: 0,
|
||||
onClose: function() {
|
||||
onClose: function () {
|
||||
var selectedUsers = top.dialog.dialogData.selectedDepartmentUsers;
|
||||
// 这里写处理逻辑
|
||||
if(selectedUsers && selectedUsers.length > 0) {
|
||||
if(selectedUsers.length > 1) {
|
||||
if (selectedUsers && selectedUsers.length > 0) {
|
||||
if (selectedUsers.length > 1) {
|
||||
top.dialog.msg('处理人只能选择一位');
|
||||
return;
|
||||
}
|
||||
@ -74,15 +74,15 @@ var KisBpmAssignmentPopupCtrl = ['$scope', function ($scope) {
|
||||
})
|
||||
}
|
||||
|
||||
$scope.selectCandidateUserId = function() {
|
||||
$scope.selectCandidateUserId = function () {
|
||||
var userIds = '';
|
||||
var candidateUsers = $scope.assignment.candidateUsers;
|
||||
if(candidateUsers && candidateUsers.length > 0) {
|
||||
for(var i = 0, item; item = candidateUsers[i++];) {
|
||||
if(item == '') {
|
||||
if (candidateUsers && candidateUsers.length > 0) {
|
||||
for (var i = 0, item; item = candidateUsers[i++];) {
|
||||
if (item == '') {
|
||||
continue;
|
||||
}
|
||||
if(userIds.length > 0) {
|
||||
if (userIds.length > 0) {
|
||||
userIds += '_';
|
||||
}
|
||||
userIds += item.value;
|
||||
@ -95,12 +95,12 @@ var KisBpmAssignmentPopupCtrl = ['$scope', function ($scope) {
|
||||
width: '500px',
|
||||
height: '500px',
|
||||
closeBtn: 0,
|
||||
onClose: function() {
|
||||
onClose: function () {
|
||||
var selectedUsers = top.dialog.dialogData.selectedDepartmentUsers;
|
||||
// 这里写处理逻辑
|
||||
if(selectedUsers && selectedUsers.length > 0) {
|
||||
if (selectedUsers && selectedUsers.length > 0) {
|
||||
var candidateUserArray = [];
|
||||
for(var i = 0, item; item = selectedUsers[i++];) {
|
||||
for (var i = 0, item; item = selectedUsers[i++];) {
|
||||
candidateUserArray.push({
|
||||
value: item.userId
|
||||
})
|
||||
|
@ -27,11 +27,15 @@ var OaNodeManagePopupCtrl = ['$scope', '$timeout', '$http', function($scope, $ti
|
||||
assigneeType: '',
|
||||
assigneeCount: 0,
|
||||
assignee: '',
|
||||
assigneeName: '',
|
||||
autoAssignType: '',
|
||||
departmentType: '',
|
||||
departments: '',
|
||||
departmentNames: '',
|
||||
roles: '',
|
||||
roleNames: '',
|
||||
positions: '',
|
||||
positionNames: '',
|
||||
quickAssignee: '',
|
||||
signType: '',
|
||||
signUsers: '',
|
||||
@ -131,6 +135,71 @@ var OaNodeManagePopupCtrl = ['$scope', '$timeout', '$http', function($scope, $ti
|
||||
$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
|
||||
$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
|
||||
function initFormId() {
|
||||
function initFormId(callback) {
|
||||
$scope.oaNodeManage.formId = startNode.properties.formkeydefinition;
|
||||
if(!$scope.oaNodeManage.formId) {
|
||||
top.dialog.msg('开始节点未绑定表单,无法设置OA节点');
|
||||
$scope.close();
|
||||
$timeout(function() {
|
||||
$scope.close();
|
||||
}, 10)
|
||||
return;
|
||||
}
|
||||
callback();
|
||||
}
|
||||
|
||||
// 初始化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() {
|
||||
initOaNodeManage();
|
||||
initStartNode();
|
||||
initFormId();
|
||||
initFormField();
|
||||
initOaUserTaskCompleteListener();
|
||||
initFormId(function() {
|
||||
initFormField();
|
||||
});
|
||||
})();
|
||||
|
||||
}];
|
@ -84,8 +84,9 @@
|
||||
<tr ng-if="oaNodeManage.assignee.nodeType == 'normal' && oaNodeManage.assignee.assigneeType == 'appoint' && oaNodeManage.assignee.assigneeCount == 'single'">
|
||||
<td>
|
||||
<input ng-model="oaNodeManage.assignee.assignee" type="hidden" name="assignee">
|
||||
<button type="button">选择</button>
|
||||
<span>用户1</span>
|
||||
<input ng-model="oaNodeManage.assignee.assigneeName" type="hidden" name="assigneeName">
|
||||
<button type="button" ng-click="selectUser()">选择</button>
|
||||
<span>{{oaNodeManage.assignee.assigneeName}}</span>
|
||||
</td>
|
||||
</tr>
|
||||
<!-- 手动指定代理人 end -->
|
||||
@ -134,8 +135,9 @@
|
||||
<tr ng-if="oaNodeManage.assignee.nodeType == 'normal' && oaNodeManage.assignee.assigneeType == 'auto' && oaNodeManage.assignee.autoAssignType == 'scope' && oaNodeManage.assignee.departmentType == 'appoint'">
|
||||
<td>
|
||||
<input ng-model="oaNodeManage.assignee.departments" type="hidden" name="departments">
|
||||
<button type="button">选择</button>
|
||||
<span>部门</span>
|
||||
<input ng-model="oaNodeManage.assignee.departmentNames" type="hidden" name="departmentNames">
|
||||
<button type="button" ng-click="selectDepartments()">选择</button>
|
||||
<span>{{oaNodeManage.assignee.departmentNames}}</span>
|
||||
</td>
|
||||
</tr>
|
||||
|
||||
|
@ -21,12 +21,48 @@
|
||||
var KISBPM = KISBPM || {};
|
||||
KISBPM.TOOLBAR = {
|
||||
ACTIONS: {
|
||||
getSvgDom: function(scope) {
|
||||
var selection = scope.editor.getSelection();
|
||||
scope.editor.setSelection([]);
|
||||
// Get the serialized svg image source
|
||||
var svgClone = scope.editor.getCanvas().getSVGRepresentation(true);
|
||||
scope.editor.setSelection(selection);
|
||||
if (scope.editor.getCanvas().properties["oryx-showstripableelements"] === false) {
|
||||
var stripOutArray = jQuery(svgClone).find(".stripable-element");
|
||||
for (var i = stripOutArray.length - 1; i >= 0; i--) {
|
||||
stripOutArray[i].remove();
|
||||
}
|
||||
}
|
||||
// Remove all forced stripable elements
|
||||
var stripOutArray = jQuery(svgClone).find(".stripable-element-force");
|
||||
for (var i = stripOutArray.length - 1; i >= 0; i--) {
|
||||
stripOutArray[i].remove();
|
||||
}
|
||||
// Parse dom to string
|
||||
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();
|
||||
console.log(json)
|
||||
if(!json.properties.name) {
|
||||
top.dialog.msg('流程的 元素名称 不能为空');
|
||||
return;
|
||||
@ -35,36 +71,19 @@ KISBPM.TOOLBAR = {
|
||||
top.dialog.msg('流程图节点不能为空');
|
||||
return;
|
||||
}
|
||||
json = JSON.stringify(json);
|
||||
var selection = scope.editor.getSelection();
|
||||
scope.editor.setSelection([]);
|
||||
// Get the serialized svg image source
|
||||
var svgClone = scope.editor.getCanvas().getSVGRepresentation(true);
|
||||
scope.editor.setSelection(selection);
|
||||
if (scope.editor.getCanvas().properties["oryx-showstripableelements"] === false) {
|
||||
var stripOutArray = jQuery(svgClone).find(".stripable-element");
|
||||
for (var i = stripOutArray.length - 1; i >= 0; i--) {
|
||||
stripOutArray[i].remove();
|
||||
}
|
||||
}
|
||||
// Remove all forced stripable elements
|
||||
var stripOutArray = jQuery(svgClone).find(".stripable-element-force");
|
||||
for (var i = stripOutArray.length - 1; i >= 0; i--) {
|
||||
stripOutArray[i].remove();
|
||||
}
|
||||
// Parse dom to string
|
||||
var svgDOM = DataManager.serialize(svgClone);
|
||||
var svgDOM = KISBPM.TOOLBAR.ACTIONS.getSvgDom(scope);
|
||||
var modelMetaData = scope.editor.getModelMetaData();
|
||||
|
||||
// 构建oaNodeManages管理列表
|
||||
|
||||
var oaNodeManages = KISBPM.TOOLBAR.ACTIONS.listOaNodeManage(json);
|
||||
console.log(oaNodeManages)
|
||||
var params = {
|
||||
jsonXml: json,
|
||||
jsonXml: JSON.stringify(json),
|
||||
svgXml: svgDOM,
|
||||
name: modelMetaData.name,
|
||||
description: modelMetaData.description,
|
||||
oaNodeManages: []
|
||||
};
|
||||
isOa: oaNodeManages.length > 0 ? true : false,
|
||||
oaNodeManages: oaNodeManages
|
||||
}
|
||||
var loadLayerIndex;
|
||||
top.restAjax.put(KISBPM.URL.putModel(modelMetaData.modelId), params, null, function (code, data) {
|
||||
parent.layer.close(parent.layer.getFrameIndex(window.name));
|
||||
|
@ -26,7 +26,7 @@
|
||||
</div>
|
||||
<div class="full">
|
||||
<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 ng-if="stencilItemGroups.length > 1">
|
||||
<div ng-repeat="group in stencilItemGroups">
|
||||
@ -56,7 +56,7 @@
|
||||
</div>
|
||||
</div>
|
||||
</div>
|
||||
<div id="canvasHelpWrapper" class="col-xs-9">
|
||||
<div id="canvasHelpWrapper" class="col-xs-10">
|
||||
<div class="canvas-wrapper" id="canvasSection"
|
||||
ng-model="droppedElement"
|
||||
ng-model="droppedElement"
|
||||
@ -92,7 +92,7 @@
|
||||
</div>
|
||||
</div>
|
||||
</div>
|
||||
<div id="propertiesHelpWrapper" class="col-xs-9">
|
||||
<div id="propertiesHelpWrapper" class="col-xs-10">
|
||||
<div class="propertySection" id="propertySection"
|
||||
ng-class="{collapsed: propertyWindowState.collapsed}">
|
||||
<div class="selected-item-section">
|
||||
@ -130,6 +130,6 @@
|
||||
</div>
|
||||
</div>
|
||||
</div>
|
||||
</div>
|
||||
</div>
|
||||
</div>
|
||||
</div>
|
||||
|
@ -156,28 +156,6 @@
|
||||
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();
|
||||
// 事件 - 页面变化
|
||||
$win.on('resize', function() {
|
||||
@ -237,7 +215,25 @@
|
||||
}
|
||||
});
|
||||
} 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);
|
||||
});
|
||||
}
|
||||
});
|
||||
}
|
||||
});
|
||||
});
|
||||
|
@ -132,10 +132,9 @@
|
||||
return flowChatImg;
|
||||
}
|
||||
},
|
||||
{field: 'form', width: 140, title: '操作', align:'center', fixed: 'right',
|
||||
{field: 'form', width: 70, title: '操作', align:'center', fixed: 'right',
|
||||
templet: function(row) {
|
||||
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>'+
|
||||
'</div>';
|
||||
}
|
||||
@ -189,14 +188,6 @@
|
||||
height: '95%',
|
||||
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') {
|
||||
top.dialog.msg('删除流程会删除与流程有关的所有数据,确定删除吗?', {
|
||||
time: 0,
|
||||
|
Loading…
Reference in New Issue
Block a user