diff --git a/main/java/shkd/repc/iwork/IWorkParticipantPlugin.java b/main/java/shkd/repc/iwork/IWorkParticipantPlugin.java new file mode 100644 index 0000000..f845d94 --- /dev/null +++ b/main/java/shkd/repc/iwork/IWorkParticipantPlugin.java @@ -0,0 +1,118 @@ +package shkd.repc.iwork; + +import kd.bos.dataentity.entity.DynamicObject; +import kd.bos.dataentity.entity.DynamicObjectCollection; +import kd.bos.orm.query.QCP; +import kd.bos.orm.query.QFilter; +import kd.bos.servicehelper.BusinessDataServiceHelper; +import kd.bos.workflow.api.AgentExecution; +import kd.bos.workflow.api.WorkflowElement; +import kd.bos.workflow.engine.extitf.IWorkflowPlugin; + +import java.util.List; + +public class IWorkParticipantPlugin implements IWorkflowPlugin { + + @Override + public List calcUserIds(AgentExecution execution) { + List currentApprover = execution.getCurrentApprover(); // 获取当前节点的审批人 + + String businessKey = execution.getBusinessKey(); // 单据的BusinessKey(业务ID) + String entityNumber = execution.getEntityNumber(); // 单据实体编码 + DynamicObject entity = BusinessDataServiceHelper.loadSingle(businessKey, entityNumber); + + + //recon_designchgbill(涉及变更) 供应商:designunit(设计单位) + //recon_chgauditorderbill(工程指令) 供应商:construnit(施工单位) + //recon_rewarddeductbill(奖励扣款) 供应商存在分录:rewarddeductentry(奖惩单分录) 供应商:entry_supplier(供应商) + + if (entity != null) { + switch (entityNumber) { + case "recon_designchgbill": + getApprover(entity, currentApprover, "designunit"); + break; + case "recon_chgauditorderbill": + getApprover(entity, currentApprover, "construnit"); + break; + case "recon_rewarddeductbill": + getApprovers(entity, currentApprover, "rewarddeductentry", "entry_supplier"); + break; + default: + // 处理未定义的实体编码的情况(可选) + break; + } + } + + return currentApprover; + } + + /** + * 根据供应商名称获取联系人,并添加到传阅人中 + * @param entity 当前单据 + * @param currentApprover 当前审批人 + * @param supplierTitle 供应商标识 + * @return + */ + public static List getApprover(DynamicObject entity, List currentApprover, String supplierTitle) { + if (entity != null) { + DynamicObject preSupplier = entity.getDynamicObject(supplierTitle); + if (preSupplier != null) { + preSupplier = BusinessDataServiceHelper.loadSingle(preSupplier.getPkValue(), "resm_official_supplier"); // 正式供应商 + DynamicObjectCollection entryLinkmans = preSupplier.getDynamicObjectCollection("entry_linkman"); // 联系人 + + for (DynamicObject entryLinkman : entryLinkmans) { + if (entryLinkman.getBoolean("isopenaccount")) { + String contactPerson = entryLinkman.getString("contactperson"); // 名字 + addUserToApprover(contactPerson, currentApprover); + } + } + } + } + return currentApprover; + } + + /** + * 根据供应商名称获取联系人,并添加到传阅人中 + * @param entity 当前单据 + * @param currentApprover 当前审批人 + * @param supplierEntry 供应商分录标识 + * @param supplierTitle 供应商标识 + * @return + */ + public static List getApprovers(DynamicObject entity, List currentApprover, String supplierEntry, String supplierTitle) { + if (entity != null) { + DynamicObjectCollection collections = entity.getDynamicObjectCollection(supplierEntry); + for (DynamicObject collection : collections) { + DynamicObject preSupplier = collection.getDynamicObject(supplierTitle); + if (preSupplier != null) { + preSupplier = BusinessDataServiceHelper.loadSingle(preSupplier.getPkValue(), "resm_official_supplier"); // 正式供应商 + DynamicObjectCollection entryLinkmans = preSupplier.getDynamicObjectCollection("entry_linkman"); // 联系人 + + for (DynamicObject entryLinkman : entryLinkmans) { + if (entryLinkman.getBoolean("isopenaccount")) { + String contactPerson = entryLinkman.getString("contactperson"); // 名字 + addUserToApprover(contactPerson, currentApprover); + } + } + } + } + } + return currentApprover; + } + + /** + * 将用户添加到当前审批人列表中 + * @param contactPerson 联系人姓名 + * @param currentApprover 当前审批人列表 + */ + private static void addUserToApprover(String contactPerson, List currentApprover) { + if (contactPerson != null && !contactPerson.isEmpty()) { + QFilter qFilter = new QFilter("name", QCP.equals, contactPerson); + DynamicObject bosUser = BusinessDataServiceHelper.loadSingle("bos_user", new QFilter[]{qFilter}); + if (bosUser != null) { + currentApprover.add(bosUser.getLong("id")); + } + } + } + +}