寻源服务中台二开指南--扩展插件管理

1. 扩展插件管理
1.1 业务场景简介
在寻源管理中,大部分的核心业务逻辑,都被抽象为扩展插件。通过“扩展插件管理”进行启用/禁用,以实现不同客户的个性化需求。同一插件编码下的扩展插件,将作为一个动态责任链,依次执行,以实现一组相关功能。
系统预置了大部分常用的扩展插件,例如:

…
二开可以增加新的扩展插件,以实现客户个性化需求。
1.2 简要实现方案
步骤 | 开发内容 | 备注 |
1 | 扩展插件 禁用 | 系统配置 |
2 | 扩展插件 启用 | 系统配置 |
3 | 增加 扩展插件 | 代码开发 |
4 | 注册 扩展插件 | 应用注册 |
5 | 替换 扩展插件 | 系统配置 |
1.3 详细开发步骤及示例代码
下面以 “竞价完成处理--报价明细的状态” 为例。该扩展插件在竞价结束后,处理报价明细的分录状态,插件注册界面如下:

1.3.1 禁用 扩展插件
注意:系统预置的扩展插件,一般不允许禁用,如果需要禁用,请与标准产品研发团队确认后再禁用。
1 直接点击禁用,系统提示:

2 将该扩展插件设置为允许禁用,并保存:

保存后,该插件才可以禁用。

1.3.2 启用 扩展插件
扩展插件启用没有限制,直接点“启用”即可。

1.3.3 新增 新的扩展插件
竞价完成处理--报价明细的状态:该编辑插件用于在竞价完成时,更新报价明细的状态
需要实现接口:ISrcVieFinish,代码如下:
/** * 竞价完成处理--报价明细的状态 public class SrcVieFinishDetail implements ISrcVieFinish { @Override public void process(PdsVieContext context) { // 源单分录id Set<Long> srcEntryIds = new HashSet<>(16); // 报价明细id(有效的) Set<Long> validDetailIds = new HashSet<>(16); // 获取本轮次报价明细的相关信息 getQuoteDetails(context, srcEntryIds, validDetailIds); if (srcEntryIds.size() == 0) { return; } // 更新报价明细的状态 updateQuoteDetail(context, srcEntryIds, validDetailIds); }
/** * 获取本轮次报价明细的相关信息 * * @param context * @param srcEntryIds * @param validDetailIds */ protected void getQuoteDetails(PdsVieContext context, Set<Long> srcEntryIds, Set<Long> validDetailIds) { // 查询条件:寻源项目+议价轮次+竞价轮次 QFilter qfilter = new QFilter(SrcCommonConstant.PROJECT, QCP.equals, context.getProjectId()).and(SrcCommonConstant.TURNS, QCP.equals, context.getTurns()).and(SrcCommonConstant.VIETURNS, QCP.equals, context.getVieturns()); // 获取 报价明细并排序:源单分录id+报价时间(倒序) DynamicObjectCollection quoteDetails = QueryServiceHelper.query(SrcMetadataConstant.SRC_VIE_DETAILF7, SrcCommonConstant.ID + "," + SrcCommonConstant.SRCENTRYID, qfilter.toArray(), SrcCommonConstant.SRCENTRYID + "," + SrcCommonConstant.QUOTEDATE + " " + SrcCommonConstant.DESC); if (quoteDetails == null || quoteDetails.size() == 0) { return; } // 按 源单分录id分组,并取第一条 Map<String, DynamicObject> srcEntryMap = quoteDetails.stream().collect(Collectors.groupingBy(e -> e.getString(SrcCommonConstant.SRCENTRYID), Collectors.collectingAndThen(Collectors.toList(), value -> value.get(0)))); // 获取 源单分录id集合 srcEntryIds.addAll(srcEntryMap.keySet().stream().map(e -> Long.valueOf(e)).collect(Collectors.toSet())); // 获取 报价明细id集合(有效的) validDetailIds.addAll(srcEntryMap.entrySet().stream().map(e -> e.getValue().getLong(SrcCommonConstant.ID)).collect(Collectors.toSet())); } /** * 更新报价明细的状态 * @param context * @param srcEntryIds * @param validDetailIds |
寻源服务中台二开指南--扩展插件管理
声明:除非特别标注,否则均为本站原创文章,转载时请以链接形式注明文章出处。如若本站内容侵犯了原著者的合法权益,可联系本站删除。



