首页 新闻 搜索 专区 学院

求大神,一个业务逻辑,用什么方法能解决的、

0
悬赏园豆:120 [已解决问题] 解决于 2013-04-23 16:53

有表一,商品消费表。  表二,付款方式表。    表一中,买了苹果,梨子,香蕉,分别话了100,200,300元。 表二中付款方式 人民币,刷卡,其他方式分别为150,300,150。(其中钱数有可能是小数,不一定为整数)。求得一张新表,分别记录各种水果的各种付款方式分别付了多少钱,只要结果能满足各种水果总费就行,比如:苹果100元,人民币,刷卡,其他三种付款方式分别为,30,40,30元。

问题补充:

问题是有存在意义的,在我们实际操作用一般只有一种付款方式,这个时候很容易。但是是存在多种付款方式的,而付款方式只有在我们付款的时候才知道,如果是多付款方式的话,只能用某个逻辑算法来拼出数据,客户知道这样的数据不准,但大多数是一种付款方式,所以还是要求有第三张表来记录。

 

现在客户就是要这种不准的拼凑数据,小弟现在要做的就是写出这种拼凑的规则,它的合理性咱就不讨论了,问题就是这样,希望大神能提点一二。

HAT Coder的主页 HAT Coder | 初学一级 | 园豆:7
提问于:2013-04-18 14:04
< >
分享
最佳答案
1

提一个很直接的想法思路:假如你有3种付款方式:现金,刷卡,代金券5元。买了苹果100元和梨200元。

你先用5元的代金券去减掉苹果的100,还剩95;

再用现金部分去减,

      够的话,继续用现金去减梨;剩余的卡补上;

      不够的话,用卡去补。

相关的变量涉及到,单品,单品价格,付款方式,付款方式对应的金额,在一个函数里面实现上述算法应该不难,具体的规则可以在算法里面处理。返回的值可以是一个类似List<obj>,obj{单品id,付款方式,付款金额}的结构,然后遍历整个列表放入数据库表。

收获园豆:100
Tim Lee | 菜鸟二级 |园豆:350 | 2013-04-20 11:14

完成了,我们思路基本一样。

HAT Coder | 园豆:7 (初学一级) | 2013-04-23 16:52
其他回答(4)
0

你这样的表结果没有意义的,只是拼凑出了一个结果,别人也看不懂。

清海扬波 | 园豆:823 (小虾三级) | 2013-04-18 14:11
0

额,感觉你的这个表建的怪怪的,看了好几遍才理解,一个商品表和一个付款方式表?一个商品有可能有多个付款方式是么?你求的那张新表的就有可能是:1 苹果        现金         30元

                                     2 苹果        刷卡         40元

                                     3 苹果        折扣         30元

                                     4 其他水果  消费方式    消费金额

     是这样的吗?  如果是的话,你直接把这两张表建个主从关系多好呢,使付款方式是商品的从表,一对多的关系 ,查询的时候连表查询就可以了啊

W宁宁 | 园豆:522 (小虾三级) | 2013-04-18 14:31

实际中大都只有一种付款方式,但是存在多种付款方式,就一个账单表,和付款方式表,账单表中不可能存在一个字段是记录某条数据的付款方式的,我们实际中只有在结账的时候有付款方式,总付款就是总消费,不会拆开的,现在的问题就是要能写一个逻辑满足以上要求。

支持(0) 反对(0) HAT Coder | 园豆:7 (初学一级) | 2013-04-18 14:39

@刀拓: 额,那你记得超市的那个结账时的消费小票么?刚刚找出来看了一下上面是你买的东西的列表,比如:

商品名     码号      单价   计量单位   价钱

康师傅水  25227   1.80   1.00       1.80

红苹果     68162   5.50   1.56       8.58

……………………

下面是总计:

         实收:

         现金:

         卡消费:

          还有会员卡内扣的零头之类的。

这时你要的不就是总的消费和付款方式了么,付款方式是可以罗列出来的啊

支持(0) 反对(0) W宁宁 | 园豆:522 (小虾三级) | 2013-04-18 14:55

@刀拓: 苹果,梨子,香蕉,分别花了100,200,300元,现金100,刷卡500,问苹果收了刷卡方式多少钱。这是一个纠结的问题,你可以拼凑出一个结果,客户也能看到,但是其实结果也就只是一个结果而已。没有规律的东西,程序是做不出来的。

支持(0) 反对(0) 清海扬波 | 园豆:823 (小虾三级) | 2013-04-18 14:58

@W宁宁:客户现在一个比较bt的要求是康师傅水,其中现金付了多少,卡付了多少,红苹果,现金支付了多少,卡付了多少,这个是很难罗列的,客户就是要这个不准的拼凑结果,难啊。

支持(0) 反对(0) HAT Coder | 园豆:7 (初学一级) | 2013-04-18 15:07

@刀拓: 就像上面清海扬波说的, 你知道苹果花了100元,梨子花了200元,香蕉花了300元,但是你结账的时候不是一个一个结的,是付的全部消费的总数600,分成现金100和刷卡500结算的,没有指定某个商品就是某种消费方式中的那些价钱,所以没有指定怎么计算出来呢...这客户也太变态了,那你让他一个商品一个商品的结算吧

支持(0) 反对(0) W宁宁 | 园豆:522 (小虾三级) | 2013-04-18 15:13

@清海扬波: 赞同

支持(0) 反对(0) W宁宁 | 园豆:522 (小虾三级) | 2013-04-18 15:13

@清海扬波: 是啊,现在客户就是要拼一个结果,但是这个拼要有个规则,因为消费项和付款方式到底有多少种,是未知的,这就是难中之难啊。

支持(0) 反对(0) HAT Coder | 园豆:7 (初学一级) | 2013-04-18 15:15

@刀拓: 如果一定要个结果的话,大家商量一个规则,你按照这个规则分摊,至少满足他们的要求了。

支持(0) 反对(0) 清海扬波 | 园豆:823 (小虾三级) | 2013-04-18 15:24
0

现金/总付款金额 = 现金的占比,某水果的单项金额(单价X数量)/ 总应付金额 = 应付占比,  就使用这两个比率啊。

比如 苹果 100 总付款现金是 150 ,那么150/600 = 0.25     100/600 = 0.17  

那么支付苹果的现金就是 150X0.17  =25.5 和 100X 0.25 = 25  两个结果你再取平均就是 25.25,就取这个值!

 

或者你请客户来定夺!使用哪一个比率。

收获园豆:20
数据酷软件 | 园豆:130 (初学一级) | 2013-04-18 15:51

这个需求不算变态,做收银系统,迟早都会遇到。

支持(0) 反对(0) 数据酷软件 | 园豆:130 (初学一级) | 2013-04-18 15:53

写错了,应该是 150X0.25,100X0.17,取平均值:27.25。

支持(0) 反对(0) 数据酷软件 | 园豆:130 (初学一级) | 2013-04-18 15:56

好像这个方法很不错,谢谢啊,不过有个问题是实际消费项以及其费用是存在datatable中,这个循环好像不是很好取。

支持(0) 反对(0) HAT Coder | 园豆:7 (初学一级) | 2013-04-18 16:01
0
商品消费表 (aid,商品id,金额)
商品消费付款明细表 (id,aid,bid,金额)
付款方式表 (bid,方式)

--下面写一下付款方式例子吧,比如你买了100元的苹果,其实楼应该还有一张订单表,商品消费表是订单的明细
那么记录为

123,苹果id,100

12341,123,1,30
12341,123,2,40
12341,123,3,30


1 现金
2 信用卡
3 应付账款

--楼主结贴给分吧,我穷啊。
gw2010 | 园豆:1480 (小虾三级) | 2013-04-19 10:07
清除回答草稿
   您需要登录以后才能回答,未注册用户请先注册