异构系统业务单据传入星瀚后自动拆行微服务

栏目:云星瀚知识作者:金蝶来源:金蝶云社区发布:2024-09-22浏览:1

异构系统业务单据传入星瀚后自动拆行微服务

一、案例需求描述

     作为库存管理人员,我希望星瀚下发至异构系统中的库存单据,在异构系统中通过某个维度进行分录明细行拆分后再次回传至星翰中时,星翰中对应的单据能依据回传单据自动拆行并对数量、金额等字段自动重算。

    所以需要参照系统标准的拆行功能,提供一个二开拆行处理微服务接口。能解决星瀚下发异构系统业务单据回传拆行的痛点。

   本案例以采购入库单为例说明。

   关联实践案例如下:

   实践案例 | 医药零售行业库存管理与WMS集成应用案例:

   https://vip.kingdee.com/link/s/lQDbv


二、解决方案

    【温馨提示:因企业业务场景存在不同程度的差异,此案例仅供参考,请根据现场实际业务情况探讨最优解决方案,并在上线前进行充分验证。】

     异构系统根据拆分行服务接口构建拆分行数据参数,通过集成云调用拆分行微服务

     拆分行微服务接受拆分行数据,使用多叉树的数据结构存储和检索数据,根据分录行的行序号进行拆分,根据所传的明细行数量字段值进行金额及价税合计等字段的重算。

    拆分行微服务会返回拆分是否成功的布尔值,如若拆分失败可在monitor日志中查看错误信息。


三、实现步骤

     步骤1

    根据拆分行微服务接口参数封装数据,封装的每个SpiltRowEntity实体对应着异构系统每行数据。


  /**
 * 拆分行单据实体
 */
public class SpiltRowEntity implements Serializable{
 
    // 单据id
    private final long billId;
    // 行号
    private final String lineSeq;
    // 分录字段集合:Map<字段标识, 字段值>
    private final Map<String, Object> fieldMap;
 
    public SpiltRowEntity(long billId, String lineSeq, Map<String, Object> fieldMap) {
        this.billId = billId;
        this.lineSeq = lineSeq;
        this.fieldMap = fieldMap;
    }
 
    public String getLineSeq() {
        return lineSeq;
    }
 
    public long getBillId() {
        return billId;
    }
 
    public Map<String, Object> getFieldMap() {
        return fieldMap;
    }
}


    步骤2

    现场二开可以根据现场拆分行需求在服务接口中添加额外的字段处理逻辑以及金额类字段的重算逻辑。(源代码可在附件中下载)。


  特殊逻辑字段处理:
Map<String, Object> faFieldMap = fatherNode.getValue().getFieldMap();
     for (Map.Entry<String, Object> entry : faFieldMap.entrySet()) {
           String fieldKey = entry.getKey();
           Object fieldValue = entry.getValue();
           //TODO: 单据体所有字段统一处理,特殊字段需二开处理
           row.set(fieldKey, fieldValue);
}
 
金额类字段重算:
// TODO: 对amount字段进行重算,存在其他金额字段可自行进行重算
        if (billSpFields.contains("amount")) {
            BigDecimal qty = newRow.getBigDecimal("qty");
            BigDecimal price = newRow.getBigDecimal("price");
            BigDecimal amount = BigDecimal.ZERO;
            if (qty != null && price != null && qty.compareTo(BigDecimal.ZERO) > 0 && price.compareTo(BigDecimal.ZERO) > 0) {
                amount = qty.multiply(price);
            }
            newRow.set("amount", amount);
            // TODO:这里对单据所有其他金额字段都统一赋值amount,二开可根据字段进行修改
            for (String billSpField : billSpFields) {
                if (billSpField.endsWith("amount")) {
                    newRow.set(billSpField, amount);
                }
            }
        }


    步骤3

    模拟测试:在采购入库单列表上增加【拆分行服务调用】按钮,点击按钮调用自动拆分行的服务进行测试。如下图:

上传图片


四、用户操作效果演示    

上传图片


五、开发环境及版本

     苍穹版本号:V5.0.011

     星瀚版本号:V5.0.011


六、附件

代码包.zip

如果你也有开发需求或已写的开发案例,可以点击以下直达通道:http://survey.kingdee.com/vm/PN6zrBH.aspx,你的反馈,将在3个工作日内得到回复。

异构系统业务单据传入星瀚后自动拆行微服务

一、案例需求描述 作为库存管理人员,我希望星瀚下发至异构系统中的库存单据,在异构系统中通过某个维度进行分录明细行拆分后再次回...
点击下载文档
确认删除?
回到顶部
客服QQ
  • 客服QQ点击这里给我发消息