From b16e720feb7474f312159173c336c419fe4a5221 Mon Sep 17 00:00:00 2001 From: WenG <450292408@qq.com> Date: Wed, 6 Apr 2022 22:34:16 +0800 Subject: [PATCH] =?UTF-8?q?=E5=AE=8C=E5=96=84=E6=B5=81=E7=A8=8B=E5=BC=95?= =?UTF-8?q?=E6=93=8E=E5=89=8D=E7=AB=AFOA=E8=8A=82=E7=82=B9=E7=AE=A1?= =?UTF-8?q?=E7=90=86=E5=8A=9F=E8=83=BD?= MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit --- .../activiti/dao/oa/INodeAssigneeDao.java | 3 +- .../vos/oa/nodemanage/config/AssigneeVO.java | 79 +++++------- .../mapper/oa/node-assignee-mapper.xml | 6 +- .../properties-oa-node-manage-controller.js | 122 ++++++++++++++++-- .../properties/oa-node-manage-popup.html | 12 +- 5 files changed, 160 insertions(+), 62 deletions(-) diff --git a/module-activiti/src/main/java/ink/wgink/module/activiti/dao/oa/INodeAssigneeDao.java b/module-activiti/src/main/java/ink/wgink/module/activiti/dao/oa/INodeAssigneeDao.java index 7fdf326f..0a8349d3 100644 --- a/module-activiti/src/main/java/ink/wgink/module/activiti/dao/oa/INodeAssigneeDao.java +++ b/module-activiti/src/main/java/ink/wgink/module/activiti/dao/oa/INodeAssigneeDao.java @@ -3,6 +3,7 @@ package ink.wgink.module.activiti.dao.oa; import ink.wgink.exceptions.RemoveException; import ink.wgink.exceptions.SaveException; import ink.wgink.exceptions.UpdateException; +import ink.wgink.interfaces.init.IInitBaseTable; import org.springframework.stereotype.Repository; import java.util.Map; @@ -15,7 +16,7 @@ import java.util.Map; * @Version: 1.0 */ @Repository -public interface INodeAssigneeDao { +public interface INodeAssigneeDao extends IInitBaseTable { /** * 新增 diff --git a/module-activiti/src/main/java/ink/wgink/module/activiti/pojo/vos/oa/nodemanage/config/AssigneeVO.java b/module-activiti/src/main/java/ink/wgink/module/activiti/pojo/vos/oa/nodemanage/config/AssigneeVO.java index ce271cb1..0f76e0f3 100644 --- a/module-activiti/src/main/java/ink/wgink/module/activiti/pojo/vos/oa/nodemanage/config/AssigneeVO.java +++ b/module-activiti/src/main/java/ink/wgink/module/activiti/pojo/vos/oa/nodemanage/config/AssigneeVO.java @@ -55,6 +55,8 @@ public class AssigneeVO { private String positionNames; @ApiModelProperty(name = "quickAssignee", value = "快速代理人") private String quickAssignee; + @ApiModelProperty(name = "previousNStep", value = "前N步") + private Integer previousNStep; public String getNodeType() { return nodeType == null ? "" : nodeType.trim(); @@ -224,52 +226,39 @@ public class AssigneeVO { this.quickAssignee = quickAssignee; } + public Integer getPreviousNStep() { + return previousNStep; + } + + public void setPreviousNStep(Integer previousNStep) { + this.previousNStep = previousNStep; + } + @Override public String toString() { - final StringBuilder sb = new StringBuilder("{"); - sb.append("\"nodeType\":\"") - .append(nodeType).append('\"'); - sb.append(",\"assigneeCount\":\"") - .append(assigneeCount).append('\"'); - sb.append(",\"assignee\":\"") - .append(assignee).append('\"'); - sb.append(",\"assigneeName\":\"") - .append(assigneeName).append('\"'); - sb.append(",\"candidates\":\"") - .append(candidates).append('\"'); - sb.append(",\"candidateNames\":\"") - .append(candidateNames).append('\"'); - sb.append(",\"multipleType\":\"") - .append(multipleType).append('\"'); - sb.append(",\"completeCondition\":\"") - .append(completeCondition).append('\"'); - sb.append(",\"completeCount\":") - .append(completeCount); - sb.append(",\"multipleAssignees\":\"") - .append(multipleAssignees).append('\"'); - sb.append(",\"multipleAssigneeNames\":\"") - .append(multipleAssigneeNames).append('\"'); - sb.append(",\"assigneeType\":\"") - .append(assigneeType).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('}'); - return sb.toString(); + return "AssigneeVO{" + + "nodeType='" + nodeType + '\'' + + ", assigneeCount='" + assigneeCount + '\'' + + ", assignee='" + assignee + '\'' + + ", assigneeName='" + assigneeName + '\'' + + ", candidates='" + candidates + '\'' + + ", candidateNames='" + candidateNames + '\'' + + ", multipleType='" + multipleType + '\'' + + ", completeCondition='" + completeCondition + '\'' + + ", completeCount=" + completeCount + + ", multipleAssignees='" + multipleAssignees + '\'' + + ", multipleAssigneeNames='" + multipleAssigneeNames + '\'' + + ", assigneeType='" + assigneeType + '\'' + + ", autoAssignType='" + autoAssignType + '\'' + + ", departmentType='" + departmentType + '\'' + + ", departments='" + departments + '\'' + + ", departmentNames='" + departmentNames + '\'' + + ", roles='" + roles + '\'' + + ", roleNames='" + roleNames + '\'' + + ", positions='" + positions + '\'' + + ", positionNames='" + positionNames + '\'' + + ", quickAssignee='" + quickAssignee + '\'' + + ", previousNStep=" + previousNStep + + '}'; } } diff --git a/module-activiti/src/main/resources/mybatis/mapper/oa/node-assignee-mapper.xml b/module-activiti/src/main/resources/mybatis/mapper/oa/node-assignee-mapper.xml index a5351820..cd6c2f23 100644 --- a/module-activiti/src/main/resources/mybatis/mapper/oa/node-assignee-mapper.xml +++ b/module-activiti/src/main/resources/mybatis/mapper/oa/node-assignee-mapper.xml @@ -64,7 +64,8 @@ role_names, positions, position_names, - quick_assignee + quick_assignee, + previous_n_step ) VALUES( #{nodeFieldId}, #{modelId}, @@ -91,7 +92,8 @@ #{roleNames}, #{positions}, #{positionNames}, - #{quickAssignee} + #{quickAssignee}, + #{previousNStep} ) diff --git a/module-activiti/src/main/resources/static/editor-app/configuration/properties-oa-node-manage-controller.js b/module-activiti/src/main/resources/static/editor-app/configuration/properties-oa-node-manage-controller.js index 8cc9d5c5..5e557a99 100644 --- a/module-activiti/src/main/resources/static/editor-app/configuration/properties-oa-node-manage-controller.js +++ b/module-activiti/src/main/resources/static/editor-app/configuration/properties-oa-node-manage-controller.js @@ -17,6 +17,10 @@ var OaNodeManagePopupCtrl = ['$scope', '$timeout', '$http', function ($scope, $t var model = $scope.editor.modelMetaData.model; var childShapes = model.childShapes; // 关联到的属性 + var multiInstanceType = $scope.selectedItem.properties[7]; + var multiInstanceCollection = $scope.selectedItem.properties[9]; + var multiInstanceVariable = $scope.selectedItem.properties[10]; + var multiInstanceCondition = $scope.selectedItem.properties[11]; var assigneeProperty = $scope.selectedItem.properties[13]; var taskListenerProperty = $scope.selectedItem.properties[16]; @@ -25,26 +29,27 @@ var OaNodeManagePopupCtrl = ['$scope', '$timeout', '$http', function ($scope, $t $scope.oaNodeManage = { assignee: { nodeType: 'normal', - assigneeCount: '', + assigneeCount: 'single', assignee: '', assigneeName: '', candidates: '', candidateNames: '', multipleType: 'parallel', completeCondition: 'allPass', - completeCount: 0, + completeCount: 1, multipleAssignees: '', multipleAssigneeNames: '', - assigneeType: '', - autoAssignType: '', - departmentType: '', + assigneeType: 'appoint', + autoAssignType: 'scope', + departmentType: 'appoint', departments: '', departmentNames: '', roles: '', roleNames: '', positions: '', positionNames: '', - quickAssignee: '', + quickAssignee: 'starter', + previousNStep: 1 }, formId: '', formFields: [], @@ -140,6 +145,28 @@ var OaNodeManagePopupCtrl = ['$scope', '$timeout', '$http', function ($scope, $t $scope.oaNodeManage.oaUserTaskListeners.splice(index, 1); } + $scope.checkCompleteCount = function() { + var assignee = $scope.oaNodeManage.assignee; + if(!assignee.completeCount) { + assignee.completeCount = 1; + return; + } + if(assignee.completeCount < 1) { + assignee.completeCount = 1; + } + } + + $scope.checkPreviousNStep = function() { + var assignee = $scope.oaNodeManage.assignee; + if(!assignee.previousNStep) { + assignee.previousNStep = 1; + return; + } + if(assignee.previousNStep < 1) { + assignee.previousNStep = 1; + } + } + // 选择用户 $scope.selectAssignee = function () { var assignee = $scope.oaNodeManage.assignee; @@ -366,6 +393,7 @@ var OaNodeManagePopupCtrl = ['$scope', '$timeout', '$http', function ($scope, $t value: item }) } + $scope.updatePropertyInModel(assigneeProperty); } // 更新手动指定多个候选人 @@ -376,9 +404,75 @@ var OaNodeManagePopupCtrl = ['$scope', '$timeout', '$http', function ($scope, $t }; } + /** + * 更新多实例 + */ + function updateMultipleInstance() { + $scope.updatePropertyInModel(multiInstanceType); + $scope.updatePropertyInModel(multiInstanceCollection); + $scope.updatePropertyInModel(multiInstanceVariable); + $scope.updatePropertyInModel(multiInstanceCondition); + } + + /** + * 更新并行 + */ + function updateParallel() { + multiInstanceType.value = $scope.oaNodeManage.assignee.multipleType; + multiInstanceCollection.value = '${multipleAssignees}'; + multiInstanceVariable.value = 'multipleAssignees'; + if (assignee.completeCondition === 'allPass') { + // 全部通过 + multiInstanceCondition.value = '${nrOfCompletedInstances == nrOfInstances}' + } else if (assignee.completeCondition === 'singlePass') { + // 单人通过 + multiInstanceCondition.value = '${nrOfCompletedInstances == 1}' + } else if (assignee.completeCondition === 'customPass') { + // 通过多少人 + multiInstanceCondition.value = '${nrOfCompletedInstances == '+ assignee.completeCount +'}' + } else { + top.dialog.msg('多实例(完成)通过条件错误'); + return; + } + updateMultipleInstance(); + } + + /** + * 更新串行 + */ + function updateSequential() { + multiInstanceType.value = $scope.oaNodeManage.assignee.multipleType; + multiInstanceCollection.value = '${assigneeList}'; + multiInstanceVariable.value = 'assignee'; + multiInstanceCondition.value = ''; + updateMultipleInstance(); + } + + + /** + * 清空代理人候选人 + */ + function clearAssigneeAndCandidate() { + assigneeProperty.value = {}; + $scope.updatePropertyInModel(assigneeProperty); + } + + /** + * 清空多实例配置 + */ + function clearMultipleInstance() { + multiInstanceType.value = ''; + multiInstanceCollection.value = ''; + multiInstanceVariable.value = ''; + multiInstanceCondition.value = ''; + updateMultipleInstance(); + } + var assignee = $scope.oaNodeManage.assignee; // 普通节点 if (assignee.nodeType === 'normal') { + // 清空多实例选项 + clearMultipleInstance(); // 手动指定 if (assignee.assigneeType === 'appoint') { // 单选 @@ -401,6 +495,20 @@ var OaNodeManagePopupCtrl = ['$scope', '$timeout', '$http', function ($scope, $t return; } + if (assignee.nodeType === 'multiple') { + // 清空代理人选项 + clearAssigneeAndCandidate(); + // 并行 + if (assignee.multipleType === 'parallel') { + updateParallel(); + return; + } + if(assignee.multipleType === 'sequential') { + updateSequential(); + return; + } + } + } /** @@ -417,8 +525,6 @@ var OaNodeManagePopupCtrl = ['$scope', '$timeout', '$http', function ($scope, $t $scope.property.value = {}; $scope.property.value = $scope.oaNodeManage; $scope.updatePropertyInModel($scope.property); - console.log($scope.property) - updateAssignment(); updateTaskListener(); diff --git a/module-activiti/src/main/resources/static/editor-app/configuration/properties/oa-node-manage-popup.html b/module-activiti/src/main/resources/static/editor-app/configuration/properties/oa-node-manage-popup.html index a68765c2..29c72a3d 100644 --- a/module-activiti/src/main/resources/static/editor-app/configuration/properties/oa-node-manage-popup.html +++ b/module-activiti/src/main/resources/static/editor-app/configuration/properties/oa-node-manage-popup.html @@ -11,9 +11,9 @@