履约是一个过程,是一个有多个角色共同实施完成的一个过程。

履约的过程主要针对销售方而言,销售方进行履约的过程,履约就是依托于仓储、物流、发票、售后等服务,将商品、服务、发票送到客户手中,完成商品的安装、调试等。

对于履约的上游数据一般是订单单据,履约过程中一般会有履约单、出库单、运输单、开票单、服务单等单据。下游将对接结算单据,并且将回写履约情况到上有订单单据。

各服务可以是单独的系统,系统间可以通过异步发送单据的方式,完成流程的在各系统间的运转。类似于响应式编程,不是通过直接调用的方式进行,而是通过事件或者消息的方式进行运转。

当然有单据的发送,就需要有单据的回写。

比如创建了一个订单,那么订单单据通过MQ,传递给履约系统。履约系统根据订单单据,创建履约单据。履约将创建的履约单据通过MQ回写给订单系统,买家在买家管理端通过订单可以查看到履约单信息。这种方式可以避免订单系统通过RPC服务或者Restful服务接口同步查询履约单。尽量将订单系统与履约系统解耦。

对于异构系统,或者不同网络环境的系统,可能得采用异构系统的消息系统或者webService,openAPI的方式进行单据同步。

订单系统与履约系统、履约系统与仓库系统、履约系统与运输系统等之间同样可以通过此种方式进行系统间解耦。

目的:当这些系统都是公司内部系统,且都是相同网络环境情况下,相同的开发语言环境下,通过同步调用可以尽量少的冗余数据,但系统间的耦合程度(指代码间的耦合和业务耦合)更高,却不便于对接其他公司的系统。其他公司的系统可能部署在同一 个环境,也可能部署在不同的环境;可能是同构系统,也可能是异构系统。因此我们需要做的是定义出自己系统内部运转需要的单据及单据的数据格式。其他系统入口的单据,只要转换为内部的格式,就可完成在内部的运转。出口单据保持一种完成的格式,如果需要增加字段,首选需要满足内部运转,然后在添加相关字段到出口单据中。

这样做的目的是,内部运转不受外部单据影响。一个渠道系统的单据有问题,不影响其他系统单据的运转。

代码耦合:A系统引用了B系统的jar包,会直接调用B系统的接口服务。代码耦合一定会存在业务耦合。

业务耦合:A系统直接使用了B系统的单据。业务耦合时代码不一定有耦合。

对于单据的格式:需要由单据的产生方进行定义维护,并且保持向下兼容性。

不好的地方:冗余的单据过多,需要做更多的同步操作。

Java物流履约项目_Java物流履约项目

Java物流履约项目_订单系统_02