调整了代码结构,增加了节点管理后台逻辑,增加了人员选择,部门选择
This commit is contained in:
parent
774afc6fa6
commit
538f85eeb4
@ -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")
|
||||||
|
@ -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();
|
||||||
}
|
}
|
||||||
|
|
||||||
|
@ -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;
|
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;
|
||||||
|
|
||||||
|
|
||||||
}
|
}
|
||||||
|
@ -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;
|
||||||
|
}
|
||||||
}
|
}
|
||||||
|
@ -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 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);
|
||||||
|
|
||||||
/**
|
/**
|
||||||
* 获取原生流程节点列表
|
* 获取原生流程节点列表
|
||||||
|
@ -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);
|
|
||||||
|
|
||||||
|
|
||||||
/**
|
/**
|
||||||
* 发布模型
|
* 发布模型
|
||||||
|
@ -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
|
||||||
|
@ -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
|
||||||
|
@ -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);
|
||||||
|
@ -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;
|
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);
|
||||||
|
|
||||||
/**
|
/**
|
||||||
* 节点列表
|
* 节点列表
|
||||||
*
|
*
|
||||||
|
@ -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.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);
|
||||||
}
|
}
|
||||||
|
|
@ -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` (
|
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
|
||||||
|
@ -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
|
||||||
})
|
})
|
||||||
|
@ -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();
|
||||||
|
});
|
||||||
})();
|
})();
|
||||||
|
|
||||||
}];
|
}];
|
@ -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>
|
||||||
|
|
||||||
|
@ -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));
|
||||||
|
@ -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">
|
||||||
|
@ -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);
|
||||||
|
});
|
||||||
|
}
|
||||||
|
});
|
||||||
}
|
}
|
||||||
});
|
});
|
||||||
});
|
});
|
||||||
|
@ -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,
|
||||||
|
Loading…
Reference in New Issue
Block a user