好久没有来更新文章了,主要是最近一直实在是太忙了,而且也没碰到过什么大的难题,所以感觉没什么要分享的东西。正好最近有一个destoon的二次开发项目,终于碰到了难题。
不知道destoon的程序员怎么想的,dt的商城系统的库存逻辑感觉有点奇怪,是卖出去的商品,要等到客户确认后,才会在库存中减去客户购买的数量。因为从客户购买下单到商家发货,货物运到客户那边,再到客户确认收货,是需要很长时间的,但是实际上,在客户下单付款后,这个订单就正式的形成了,就该在库存中减去购买数量了,因为客户付款了,这个货是必须要发的。因为从客户付款到商家发货,也是有时间的,如果一个商品就剩下了1件,一个客户购买付款后,库存没有减去,在而是有第二个客户又购买了,其实这个商品已经没有货了,这也是采用客户付款减库存而不是商家发货减库存的原因。
当然,还有问为什么不是客户下单减库存的,这个就好解释了,肯定有很多人恶意或是随意下单。
当碰见这个问题后,我习惯的去百度搜索结果没有人提出过问题,destoon论坛上2013年有人提出,但是没有人能解决,看来dt对这个商城还是不重视啊。
所以,没办法,只能自己修改了,下面上修改方法。
1、打开文件\module\member\trade.inc.php
搜索:买家付款 找到 case ‘pay’://买家付款 在 $db->query(“UPDATE {$table} SET status=2,updatetime=$DT_TIME WHERE itemid=$itemid”); 下面添加 大约104行
//更新商品数据
if($td[‘mid’] == 16) {
$db->query(“UPDATE {$DT_PRE}mall SET orders=orders+1,sales=sales+$td[number],amount=amount-$td[number] WHERE itemid=$mallid”);
} else {
$db->query(“UPDATE “.get_table($td[‘mid’]).” SET amount=amount-$td[number] WHERE itemid=$mallid”);
}
大体解释一下:$td[‘mid’] == 16 就是确定是不是商城模块,简单的if else语句。
orders=orders+1 就是成交量+1;
sales=sales+$td[number] 就是销量加上客户购买的数量;
amount=amount-$td[number] 就是库存减去客户购买的数量。
如果不想客户付款,就计算成交次数跟销量的话,想等到客户确认付款的时候,在统计,就去掉orders=orders+1,sales=sales+$td[number],这一句。
这样的话,当客户付款的时候,商品的库存就减去购买数量了。
2、这边修改之后,还没完,因为 当货到付款 交易成功、客户确认收货、买家确认超时 卖家申请直接付款付款的时候,代码没修改,就容易造成统计两次成交、库存,所以只要搜索
//货到付款,确认完成
//确认收货
//买家确认超时 卖家申请直接付款
然后把下面的更新商品数据的代码
//更新商品数据
if($td[‘mid’] == 16) {
$db->query(“UPDATE {$DT_PRE}mall SET orders=orders+1,sales=sales+$td[number],amount=amount-$td[number] WHERE itemid=$mallid”);
} else {
$db->query(“UPDATE “.get_table($td[‘mid’]).” SET amount=amount-$td[number] WHERE itemid=$mallid”);
}
删除掉就可以了。