有表一,商品消费表。 表二,付款方式表。 表一中,买了苹果,梨子,香蕉,分别话了100,200,300元。 表二中付款方式 人民币,刷卡,其他方式分别为150,300,150。(其中钱数有可能是小数,不一定为整数)。求得一张新表,分别记录各种水果的各种付款方式分别付了多少钱,只要结果能满足各种水果总费就行,比如:苹果100元,人民币,刷卡,其他三种付款方式分别为,30,40,30元。
问题是有存在意义的,在我们实际操作用一般只有一种付款方式,这个时候很容易。但是是存在多种付款方式的,而付款方式只有在我们付款的时候才知道,如果是多付款方式的话,只能用某个逻辑算法来拼出数据,客户知道这样的数据不准,但大多数是一种付款方式,所以还是要求有第三张表来记录。
现在客户就是要这种不准的拼凑数据,小弟现在要做的就是写出这种拼凑的规则,它的合理性咱就不讨论了,问题就是这样,希望大神能提点一二。
提一个很直接的想法思路:假如你有3种付款方式:现金,刷卡,代金券5元。买了苹果100元和梨200元。
你先用5元的代金券去减掉苹果的100,还剩95;
再用现金部分去减,
够的话,继续用现金去减梨;剩余的卡补上;
不够的话,用卡去补。
相关的变量涉及到,单品,单品价格,付款方式,付款方式对应的金额,在一个函数里面实现上述算法应该不难,具体的规则可以在算法里面处理。返回的值可以是一个类似List<obj>,obj{单品id,付款方式,付款金额}的结构,然后遍历整个列表放入数据库表。
完成了,我们思路基本一样。
你这样的表结果没有意义的,只是拼凑出了一个结果,别人也看不懂。
额,感觉你的这个表建的怪怪的,看了好几遍才理解,一个商品表和一个付款方式表?一个商品有可能有多个付款方式是么?你求的那张新表的就有可能是:1 苹果 现金 30元
2 苹果 刷卡 40元
3 苹果 折扣 30元
4 其他水果 消费方式 消费金额
是这样的吗? 如果是的话,你直接把这两张表建个主从关系多好呢,使付款方式是商品的从表,一对多的关系 ,查询的时候连表查询就可以了啊
实际中大都只有一种付款方式,但是存在多种付款方式,就一个账单表,和付款方式表,账单表中不可能存在一个字段是记录某条数据的付款方式的,我们实际中只有在结账的时候有付款方式,总付款就是总消费,不会拆开的,现在的问题就是要能写一个逻辑满足以上要求。
@刀拓: 额,那你记得超市的那个结账时的消费小票么?刚刚找出来看了一下上面是你买的东西的列表,比如:
商品名 码号 单价 计量单位 价钱
康师傅水 25227 1.80 1.00 1.80
红苹果 68162 5.50 1.56 8.58
……………………
下面是总计:
实收:
现金:
卡消费:
还有会员卡内扣的零头之类的。
这时你要的不就是总的消费和付款方式了么,付款方式是可以罗列出来的啊
@刀拓: 苹果,梨子,香蕉,分别花了100,200,300元,现金100,刷卡500,问苹果收了刷卡方式多少钱。这是一个纠结的问题,你可以拼凑出一个结果,客户也能看到,但是其实结果也就只是一个结果而已。没有规律的东西,程序是做不出来的。
@W宁宁:客户现在一个比较bt的要求是康师傅水,其中现金付了多少,卡付了多少,红苹果,现金支付了多少,卡付了多少,这个是很难罗列的,客户就是要这个不准的拼凑结果,难啊。
@刀拓: 就像上面清海扬波说的, 你知道苹果花了100元,梨子花了200元,香蕉花了300元,但是你结账的时候不是一个一个结的,是付的全部消费的总数600,分成现金100和刷卡500结算的,没有指定某个商品就是某种消费方式中的那些价钱,所以没有指定怎么计算出来呢...这客户也太变态了,那你让他一个商品一个商品的结算吧
@清海扬波: 赞同
@清海扬波: 是啊,现在客户就是要拼一个结果,但是这个拼要有个规则,因为消费项和付款方式到底有多少种,是未知的,这就是难中之难啊。
@刀拓: 如果一定要个结果的话,大家商量一个规则,你按照这个规则分摊,至少满足他们的要求了。
现金/总付款金额 = 现金的占比,某水果的单项金额(单价X数量)/ 总应付金额 = 应付占比, 就使用这两个比率啊。
比如 苹果 100 总付款现金是 150 ,那么150/600 = 0.25 100/600 = 0.17
那么支付苹果的现金就是 150X0.17 =25.5 和 100X 0.25 = 25 两个结果你再取平均就是 25.25,就取这个值!
或者你请客户来定夺!使用哪一个比率。
这个需求不算变态,做收银系统,迟早都会遇到。
写错了,应该是 150X0.25,100X0.17,取平均值:27.25。
好像这个方法很不错,谢谢啊,不过有个问题是实际消费项以及其费用是存在datatable中,这个循环好像不是很好取。
商品消费表 (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 应付账款
--楼主结贴给分吧,我穷啊。