From 979b2d274a7c2eb606a810e11d73c4379935d82e Mon Sep 17 00:00:00 2001 From: zhangzhiguo Date: Thu, 24 Apr 2025 16:57:28 +0800 Subject: [PATCH] =?UTF-8?q?1.=E5=85=B1=E4=BA=AB=E5=AE=A1=E6=89=B9=E4=BA=BA?= =?UTF-8?q?=E5=91=98=E5=88=86=E9=85=8D=E9=97=AE=E9=A2=98=E5=A4=84=E7=90=86?= MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit --- .../plugin/operate/ApprovalCheckFlowOp.java | 34 +++---- .../zcdev/zcdev/fs/plugin/task/WorkTask.java | 1 - .../zcdev/fs/plugin/workflow/WorkLoadExt.java | 93 +++++-------------- 3 files changed, 36 insertions(+), 92 deletions(-) diff --git a/code/zcdev/zcgj-zcdev-zcdev-fs/src/main/java/zcgj/zcdev/zcdev/fs/plugin/operate/ApprovalCheckFlowOp.java b/code/zcdev/zcgj-zcdev-zcdev-fs/src/main/java/zcgj/zcdev/zcdev/fs/plugin/operate/ApprovalCheckFlowOp.java index 69ff2ea..70881ea 100644 --- a/code/zcdev/zcgj-zcdev-zcdev-fs/src/main/java/zcgj/zcdev/zcdev/fs/plugin/operate/ApprovalCheckFlowOp.java +++ b/code/zcdev/zcgj-zcdev-zcdev-fs/src/main/java/zcgj/zcdev/zcdev/fs/plugin/operate/ApprovalCheckFlowOp.java @@ -1,41 +1,32 @@ package zcgj.zcdev.zcdev.fs.plugin.operate; -import kd.bos.algo.DataSet; -import kd.bos.algo.Row; import kd.bos.dataentity.entity.DynamicObject; import kd.bos.entity.ExtendedDataEntity; import kd.bos.entity.plugin.AbstractOperationServicePlugIn; import kd.bos.entity.plugin.AddValidatorsEventArgs; import kd.bos.entity.plugin.PreparePropertysEventArgs; import kd.bos.entity.validate.AbstractValidator; -import kd.bos.orm.query.QCP; -import kd.bos.orm.query.QFilter; -import kd.bos.servicehelper.BusinessDataServiceHelper; -import kd.bos.servicehelper.QueryServiceHelper; -import kd.bos.servicehelper.org.OrgUnitServiceHelper; +import kd.bos.logging.Log; +import kd.bos.logging.LogFactory; import kd.bos.servicehelper.user.UserServiceHelper; import kd.bos.servicehelper.workflow.WorkflowServiceHelper; -import kd.bos.workflow.api.AgentExecution; import kd.bos.workflow.component.approvalrecord.IApprovalRecordGroup; -import kd.bos.workflow.engine.extitf.IWorkflowPlugin; -import java.text.SimpleDateFormat; -import java.time.LocalDate; -import java.util.*; -import java.util.stream.Collectors; +import java.util.List; /** * 判断当前审批人是否为提交人 * 综合岗和项目经理发起的报销,本人点提交提示必须执行转交 */ public class ApprovalCheckFlowOp extends AbstractOperationServicePlugIn { - + private static final Log log = LogFactory.getLog(ApprovalCheckFlowOp.class); @Override public void onPreparePropertys(PreparePropertysEventArgs e) { super.onPreparePropertys(e); e.getFieldKeys().add("formid"); e.getFieldKeys().add("id"); e.getFieldKeys().add("applier"); + //e.getFieldKeys().add("creator"); } @Override @@ -49,13 +40,14 @@ public class ApprovalCheckFlowOp extends AbstractOperationServicePlugIn { public void validate() { ExtendedDataEntity[] extendedDataEntities = this.getDataEntities(); Long currentUserId = UserServiceHelper.getCurrentUserId(); - for (ExtendedDataEntity extendedDataEntity : extendedDataEntities) { DynamicObject dataEntity = extendedDataEntity.getDataEntity(); String billId = dataEntity.getString("id"); String formid = dataEntity.getString("formid"); + //String formid = "zcgj_test_01"; //获取报销人 DynamicObject applier = dataEntity.getDynamicObject("applier"); + //DynamicObject applier = dataEntity.getDynamicObject("creator"); Long applierId = applier.getLong("id"); boolean isOk = true; //所有审批记录,从审批记录中获取已经审批过的人 @@ -64,15 +56,19 @@ public class ApprovalCheckFlowOp extends AbstractOperationServicePlugIn { for (IApprovalRecordGroup allApprovalRecord : allApprovalRecords) { String groupDecisionType = allApprovalRecord.getGroupDecisionType(); //过滤提交的和待分配的任务 - if("submit".equals(groupDecisionType)){ //获取每个节点的审批类型 提交:submit - Long userId = allApprovalRecord.getChildren().get(0).getUserId();//获取每个节点的审批人 - if(applierId.equals(userId) ){//如果审批不是申请人,则可以进行审批操作 + log.info("ApprovalCheckFlowOp: 操作节点编码:"+groupDecisionType); + if("submit".equals(groupDecisionType) + ||"approve".equals(groupDecisionType)){ //获取每个节点的审批类型 提交:submit + log.info("ApprovalCheckFlowOp: approve 申请人:"+applierId); + //Long userId = allApprovalRecord.getChildren().get(0).getUserId();//获取每个节点的审批人 + log.info("ApprovalCheckFlowOp: approve 审批人:"+currentUserId); + if(applierId.equals(currentUserId) ){//如果审批不是申请人,则可以进行审批操作 isOk = false; } } } if(!isOk){ - this.addFatalErrorMessage(extendedDataEntity, "当前操作人为单据申请人,无法进行审批操作,请转给他人进行审批!"); + this.addFatalErrorMessage(extendedDataEntity, "当前审批人为单据申请人,无法进行审批操作,请转给他人进行审批!"); return; } } diff --git a/code/zcdev/zcgj-zcdev-zcdev-fs/src/main/java/zcgj/zcdev/zcdev/fs/plugin/task/WorkTask.java b/code/zcdev/zcgj-zcdev-zcdev-fs/src/main/java/zcgj/zcdev/zcdev/fs/plugin/task/WorkTask.java index 7a72585..a1af16c 100644 --- a/code/zcdev/zcgj-zcdev-zcdev-fs/src/main/java/zcgj/zcdev/zcdev/fs/plugin/task/WorkTask.java +++ b/code/zcdev/zcgj-zcdev-zcdev-fs/src/main/java/zcgj/zcdev/zcdev/fs/plugin/task/WorkTask.java @@ -25,7 +25,6 @@ public class WorkTask extends AbstractTask { private static final Log log = LogFactory.getLog(WorkTask.class); - //发送物料库存至消息平台 @Override public void execute(RequestContext requestContext, Map map) throws KDException { long currUserId = requestContext.getCurrUserId(); diff --git a/code/zcdev/zcgj-zcdev-zcdev-fs/src/main/java/zcgj/zcdev/zcdev/fs/plugin/workflow/WorkLoadExt.java b/code/zcdev/zcgj-zcdev-zcdev-fs/src/main/java/zcgj/zcdev/zcdev/fs/plugin/workflow/WorkLoadExt.java index 0bd342a..593afa4 100644 --- a/code/zcdev/zcgj-zcdev-zcdev-fs/src/main/java/zcgj/zcdev/zcdev/fs/plugin/workflow/WorkLoadExt.java +++ b/code/zcdev/zcgj-zcdev-zcdev-fs/src/main/java/zcgj/zcdev/zcdev/fs/plugin/workflow/WorkLoadExt.java @@ -1,15 +1,10 @@ package zcgj.zcdev.zcdev.fs.plugin.workflow; import kd.bos.dataentity.entity.DynamicObject; -import kd.bos.orm.query.QCP; -import kd.bos.orm.query.QFilter; -import kd.bos.servicehelper.BusinessDataServiceHelper; -import kd.bos.servicehelper.operation.SaveServiceHelper; +import kd.bos.logging.Log; +import kd.bos.logging.LogFactory; import kd.bos.servicehelper.workflow.WorkflowServiceHelper; import kd.bos.workflow.component.approvalrecord.IApprovalRecordGroup; -import kd.bos.workflow.engine.dynprocess.freeflow.WFAuditTask; -import kd.bos.workflow.engine.dynprocess.freeflow.WFCustomParam; -import kd.bos.workflow.engine.dynprocess.freeflow.WFFlowElement; import kd.ssc.task.dis.WorkLoad; import kd.ssc.task.dis.WorkerStatusPojo; @@ -20,16 +15,12 @@ import java.util.stream.Collectors; * 共享任务人员重分配 */ public class WorkLoadExt extends WorkLoad { - + private static final Log log = LogFactory.getLog(WorkLoadExt.class); @Override public Set deletePerson4Return(Long groupId, DynamicObject task) { + log.info("WorkLoadExt: deletePerson4Return -- start"); Set longs = super.deletePerson4Return(groupId, task); - //开发商标识 - String prefix ="zcgj"; - //是否自动审批通过 - boolean isAutoPass = false; - boolean isVoucher = false; // 组->人映射,<组ID,组中人员工作状态信息> //获取所有的共享审批组 Map> groupPersonMap = getGroupPersonMap(); @@ -71,93 +62,51 @@ public class WorkLoadExt extends WorkLoad { } } - //通过billid获取流程实例id - Long processInstanceIdByBusinessKey = WorkflowServiceHelper.getProcessInstanceIdByBusinessKey(billid); - //通过流程实例id获取wf_task数据,用于获取和过滤共享节点的配置参数 - QFilter taskFilter1 = new QFilter("processinstanceid", QCP.equals, processInstanceIdByBusinessKey); - DynamicObject[] taskDynamicObjects = BusinessDataServiceHelper.load("wf_task", "taskdefinitionkey", new QFilter[]{taskFilter1}); - //构建单据对象,用于查询单据的工作流流程元素数据 - DynamicObject billDynamicObject = BusinessDataServiceHelper.newDynamicObject(entityName); - billDynamicObject.set("id",billid); - List processElements = WorkflowServiceHelper.getProcessElements(billDynamicObject, null); - //查询流程元素数据 - List sscApprove = processElements.stream().filter(e -> e.getId().equals(taskDynamicObjects[0].get("taskdefinitionkey"))).collect(Collectors.toList()); - WFFlowElement wfFlowElement = sscApprove.get(0); - //获取流程配置参数 - List customParams = ((WFAuditTask) wfFlowElement).getCustomParams(); - //遍历流程配置的参数,获取isVoucher用来判断当前节点是否要生成凭证 - for (WFCustomParam customParam : customParams) { - String number = customParam.getNumber(); - String value = customParam.getValue(); - //如果当前节点需要生成凭证 - if(number.equals("isVoucher") && value.equals("true")){ - isVoucher= true; - } - } //当前共享组所有审批人员ID集合 List sharedApprovers = workLoadList.stream().map(WorkerStatusPojo::getUserId).collect(Collectors.toList()); + //如果当前共享审批组里只有他一个人,则只分配给他,不移除审批人 + if(sharedApprovers.size() ==1){ + return longs; + } //当前流程已经审批过的所有人员ID集合 - List localApprovers = approvalUserIds.stream().sorted().collect(Collectors.toList()); + Set localApprovers = approvalUserIds.stream().sorted().collect(Collectors.toSet()); //localApprovers.add(crtUserId);//测试 //获取需要移除的审批人和是否自动审批 - Map stringObjectMap = handleApproval(localApprovers, sharedApprovers); + //Map stringObjectMap = handleApproval(localApprovers, sharedApprovers); - //是否自动审批 - isAutoPass = (boolean)stringObjectMap.get("isAutoPass"); //需要移除的人员id集合 - Set userIdSet = (Set)stringObjectMap.get("removedApprovers"); - - //记录审批日期,如果需要自动审批则isapprovals设置为A - String approvalsLogsEntityName = "zcgj_auto_approvals_logs"; - DynamicObject dynamicObject = BusinessDataServiceHelper.newDynamicObject(approvalsLogsEntityName); - //日志编码 - dynamicObject.set("number",System.currentTimeMillis()); - //审批节点名称 - dynamicObject.set("name", string); - //业务单据名称 - //dynamicObject.set(prefix+"_bill_name", billname); - //业务单据id - dynamicObject.set(prefix+"_billid", billid); - //业务单据编码 - dynamicObject.set(prefix+"_bill_number", billnumber); - //业务单据标识 - dynamicObject.set(prefix+"_bill_entityname", entityName); - //业务单据共享中心id - dynamicObject.set(prefix+"_bill_sscid",sscid); - - //自动审批且不需要生成凭证则可以执行自动审批 - if(isAutoPass && !isVoucher){ - dynamicObject.set(prefix+"_isapprovals","A");//自动审批 - dynamicObject.set(prefix+"_remark","机器人自动审批且不需要生成凭证"); - }else{ - dynamicObject.set(prefix+"_isapprovals","B");//不自动审批 - dynamicObject.set(prefix+"_remark","需要审核人手动审批或需要生成凭证"); - } - - Object[] save = SaveServiceHelper.save(new DynamicObject[]{dynamicObject}); + //Set userIdSet = (Set)stringObjectMap.get("removedApprovers"); //循环判断当前单据的共享审批节点是否有本地已经审批过的人,如果有则进行移除 //如果本地没有审批人,则不移除审批人 - if(userIdSet == null || userIdSet.isEmpty()||localApprovers.isEmpty()){ + if(localApprovers == null || localApprovers.isEmpty()){ return longs; } //迭代审批人集合 while (it.hasNext()) { WorkerStatusPojo person = it.next(); Long userId = person.getUserId(); - if (userIdSet.contains(userId)) { + if (localApprovers.contains(userId)) { // 记录删除的处理人 longs.add(userId); + log.info("WorkLoadExt: removeUserId :"+userId); //记录需要删除的审批人,返回后系统会自动移除该共享组的审批人 delPersonsList.add(person); //迭代移除操作 it.remove(); } + //移除全部-测试用 //it.remove(); } + + log.info("WorkLoadExt: 返回出来的用户Id"); + for (Long aLong : longs) { + log.info("WorkLoadExt: returnUserId(移除分配的审批人Id) :"+aLong); + } + log.info("WorkLoadExt: deletePerson4Return -- end"); return longs; }