[旗舰版]缺料分析二开插件指导原创
金蝶云社区-曾钊成
曾钊成
0人赞赏了该文章 74次浏览 未经作者许可,禁止转载编辑于2024年07月26日 14:25:52

一、插件基类说明:

public class AbstractSMAProcessorExt implements ISMAProcessorExt {
    // 缺料分析上下文
    public SMAContext smaContext;
    @Override
    public void registerContext(SMAContext smaContext) {
        this.smaContext = smaContext;
    }
    /**
     * 预处理数据
     * @param srcBillData 选择订单行
     */
    @Override
    public void preProccessData(List<DynamicObject> srcBillData) { }
    /**
     * 设置需求单据过滤条件
     * @param srcBillData 选中的订单数据行
     * @param billFilters 单据默认的过滤条件
     */
    @Override
    public void setDemandBillFilter(List<DynamicObject> srcBillData, Map<String, List<QFilter>> billFilters) {}
    /**
     * 子项明细生成后事件(自定义单据可在此插入自定义数据)
     * @param srcBillData 选中的订单数据行
     */
    @Override
    public void afterBuildSubItem(List<DynamicObject> srcBillData) {}
    /**
     * 设置供应单据过滤条件
     * @param billFilters 供应单据默认过滤条件
     */
    @Override
    public void setSupplyBillFilter(Map<String, List<QFilter>> billFilters) { }
    /**
     * 生成供应后事件,可在此处插入自定义的供应数据
     */
    @Override
    public void afterBuildSupply() {}
    /**
     * 设置 统计缺料清单的维度映射关系
     * @param defaultDimension
     */
    @Override
    public void setSMASummationDimension(List<SMASummationDimensionInfo> defaultDimension) {}
    /**
     * 需要供应匹配后事件,此处可调整需求供应的关系,供应的优先级和供应权重
     * @param curDemandMatchData
     */
    @Override
    public void afterMatching(Map<DynamicObject, List<DynamicObject>> curDemandMatchData) { }
    /**
     * 设置物料预留数量
     * 需要先更新匹配需求单据的basereservedqty表示当前需求单据对应的预留数量,再返回物料的总量预留
     * @param materialReserveQty 物料总量预留
     * @param demandMatchData 需求匹配关系,可设置需求对应供应单据的预留量
     * @return
     */
    @Override
    public void setReserveQty(Map<Long, BigDecimal> materialReserveQty, Map<DynamicObject, List<DynamicObject>> demandMatchData) {    }
    /**
     * 计算完成设置子项明细数量后事件,可更新自定义字段的值
     * @param curDemandObtains 当前批次需求行数据
     */
    @Override
    public void afterSetSubItemQty(DynamicObjectCollection curDemandObtains) { }

    /**
     * 缺料清单生成完成事件
     * @param curDemandObtains 当前批次需求行数据
     */
    @Override
    public void afterBuildSMAEntry(DynamicObjectCollection curDemandObtains) {}
}

二、插件配置说明:

1、继承基类编写好自己的插件后,将插件部署到MMC容器

2、扩展缺料分析单mrp_smabill

3、新增操作smaparamset类型为mmcparamset,增加sma_plugin参数,参数值为插件的类全称

image.png


三、常见场景开发问答

问题1、缺料怎么增加新的单据作为需求

回答:

  1. 新的单据配置下推规则将数据下推至缺料分析单

  2. 新增自定义插件(此处又两种实现方式,使用资源注册模型、不使用资源注册模型)

     使用资源注册模型:

               新增实体映射关系,将新单据映射为缺料需求单据,可参考SMA-REQ-MFORDER

               修改资源注册模型SMA-APROVIDER,新增资源配置

               增加缺料自定义插件,并通过setDemandBillFilter设置新单的过滤条件

    不使用资源注册模型:

              增加缺料自定义插件,并通过afterBuildSubItem方法将需求数据保存到缺料需求单据

问题2、缺料怎么增加新的单据作为供应

回答:资源注册模型SMA-SUPPLY增加对应单据的配置即可,如果有特殊逻辑可通过插件setSupplyBillFilter、afterBuildSupply实现


问题3、汇总缺料清单怎么实现自定义汇总

回答:新增插件,可以通过setSMASummationDimension方法修改默认的统计维度

统计维度对象说明:

    /**
     * 需求字段标识
     */
    private String srcName;
    /**
     * 对应的缺料清单字段标识
     * 如果目标字段为空或不存在,那表示以srcName维度统计但是这个字段不展示在缺料清单
     */
    private String targetName;
    /**
     * 是否统计维度
     */
    private boolean isSumDimension;
    /**
     * 是否数量字段,只有isSumDimension为false才会作为数量计算
     */
    private boolean isQty;
    /**
     * 数量字段计算方式 add:合计 min:最小值 max:最大值 function:使用自定义的valueFunction
     */
    private String calcType = "";
    /**
     * 自定义方式,当是统计维度是可以通过自己方法返回某个字段的值,当是数量时可以按自己的方式合计
    */
    private BiFunction<SMASummationDimensionInfo,List<DynamicObject>, Object> valueFunction;


赞 0