ofbiz数据库表结构设计(4)- 订单支付ORDER_PAYMENT_PREFERENCE
2015-07-23 10:26
831 查看
订单的支付主要集中在ORDER_PAYMENT_PREFERENCE,PAYMENT_METHOD_TYPE,PAYMENT_METHOD和PAYMENT。它们的关系相对比较复杂,具体见下图:
ORDER_PAYMENT_PREFERENCE存储了一个订单的支付信息,当然,一个订单可以有多个支付,比如一个100元的订单,其中20元客户用现金支付,30元用银行卡支付,剩下50元用信用卡支付(现实生活中这种情况不太可能发生,但是ofbiz支持这种情况)。
PAYMENT_METHOD_TYPE是支付类型,比如信用卡支付、现金支付、支票支付等。
PAYMENT_METHOD支付方法,这个对象很多开发人员将它与PAYMENT_METHOD_TYPE搞混。PAYMENT_METHOD是PAYMENT_METHOD_TYPE的具体形式。看字段,其中PARTY_ID代表支付的人(或公司),GL_ACCOUNT_ID代表该支付方法对应COMPANY(在ofbiz中COMPANY指的就是拥有这个ofbiz的企业)的财务哪个科目,FIN_ACCOUNT_ID代表具体的财务账户(如某个银行的账户)。
PAYMENT支付指的是具体的一次支付行为。
再看一下这些对象之间的联系。ORDER_PAYMENT_PREFERENCE有两个外键分别指向PAYMENT_METHOD_TYPE和PAYMENT_METHOD。而我们已经看到,PAYMENT_METHOD已经有外键指向PAYMENT_METHOD_TYPE了,那ORDER_PAYMENT_PREFERENCE为什么还要同时指向PAYMENT_METHOD和PAYMENT_METHOD_TYPE?原因是,对于一次订单的支付,最理想情况是,我们知道支付的具体信息(知道支付者的银行信息等),这样我们就能够设置ORDER_PAYMENT_PREFERENCE里的PAYMENT_METHOD_ID了。但是在某些零售情况下,我们对客户的支付具体信息是不知道的,比如对方用现金支付,或者是通过其它第三方支付,我们不知道具体的支付信息,这样,在ORDER_PAYMENT_PREFERENCE里,我们就得依赖PAYMENT_METHOD_TYPE_ID这个字段了。也许有人问,如果在ORDER_PAYMENT_PREFERENCE里,PAYMENT_METHOD_TYPE_ID指向的信息和PAYMENT_METHOD_ID指向的信息矛盾怎么办?这点我也不清楚,让我们尽量避免这种麻烦吧。
PAYMENT这个对象同时又三个外键指向ORDER_PAYMENT_PREFERENCE、PAYMENT_METHOD_TYPE和PAYMENT_METHOD。在ofbiz中,PAYMENT代表了一次支付行为,所以,可以是一次订单的支付(所以要有外键指向ORDER_PAYMENT_PREFERENCE),也可能是其它的支付,所以,它也需要有外键指向PAYMENT_METHOD_TYPE和PAYMENT_METHOD。
ORDER_PAYMENT_PREFERENCE存储了一个订单的支付信息,当然,一个订单可以有多个支付,比如一个100元的订单,其中20元客户用现金支付,30元用银行卡支付,剩下50元用信用卡支付(现实生活中这种情况不太可能发生,但是ofbiz支持这种情况)。
PAYMENT_METHOD_TYPE是支付类型,比如信用卡支付、现金支付、支票支付等。
PAYMENT_METHOD支付方法,这个对象很多开发人员将它与PAYMENT_METHOD_TYPE搞混。PAYMENT_METHOD是PAYMENT_METHOD_TYPE的具体形式。看字段,其中PARTY_ID代表支付的人(或公司),GL_ACCOUNT_ID代表该支付方法对应COMPANY(在ofbiz中COMPANY指的就是拥有这个ofbiz的企业)的财务哪个科目,FIN_ACCOUNT_ID代表具体的财务账户(如某个银行的账户)。
PAYMENT支付指的是具体的一次支付行为。
再看一下这些对象之间的联系。ORDER_PAYMENT_PREFERENCE有两个外键分别指向PAYMENT_METHOD_TYPE和PAYMENT_METHOD。而我们已经看到,PAYMENT_METHOD已经有外键指向PAYMENT_METHOD_TYPE了,那ORDER_PAYMENT_PREFERENCE为什么还要同时指向PAYMENT_METHOD和PAYMENT_METHOD_TYPE?原因是,对于一次订单的支付,最理想情况是,我们知道支付的具体信息(知道支付者的银行信息等),这样我们就能够设置ORDER_PAYMENT_PREFERENCE里的PAYMENT_METHOD_ID了。但是在某些零售情况下,我们对客户的支付具体信息是不知道的,比如对方用现金支付,或者是通过其它第三方支付,我们不知道具体的支付信息,这样,在ORDER_PAYMENT_PREFERENCE里,我们就得依赖PAYMENT_METHOD_TYPE_ID这个字段了。也许有人问,如果在ORDER_PAYMENT_PREFERENCE里,PAYMENT_METHOD_TYPE_ID指向的信息和PAYMENT_METHOD_ID指向的信息矛盾怎么办?这点我也不清楚,让我们尽量避免这种麻烦吧。
PAYMENT这个对象同时又三个外键指向ORDER_PAYMENT_PREFERENCE、PAYMENT_METHOD_TYPE和PAYMENT_METHOD。在ofbiz中,PAYMENT代表了一次支付行为,所以,可以是一次订单的支付(所以要有外键指向ORDER_PAYMENT_PREFERENCE),也可能是其它的支付,所以,它也需要有外键指向PAYMENT_METHOD_TYPE和PAYMENT_METHOD。
相关文章推荐
- jQuery 标签后加提示信息
- 【jQuery】使用JQ要准备的主要淡入淡出效果
- cuda7.0+ caffe 小白安装手记
- jQuery静态方法isFunction,isArray,isWindow,isNumeric使用和源码分析
- jQuery选择器
- J - A Bug's Life - poj2492
- 如何克服 JavaScript 框架疲劳?
- ko.js+bootstrap+HibernateBaseDAO 分页——(1)基础分页
- 利用Java反射机制改变SharedPreferences存储路径
- JavaScript js无间断滚动效果 scrollLeft方法 使用模板
- jsp怎样实现动态表格
- 实用简洁的TAB切换函数
- bootstrap轮播(carousel)图片竖着显示不能轮播的问题解决办法
- Angular作用域
- 理解JS面向对象
- 高性能JavaScript 循环语句和流程控制
- 常用正则表达式
- javascript添加/删除 对象属性和方法
- Extjs4中up()和down()的用法
- Jquery 获取table中的td元素的值