关于订单发货不全后,多个发货产生积分重复累加的BUG

2016-07-07 15:11 来源:www.chinab4c.com 作者:ecshop专家

订单里头有A,B,C三种商品。
在配货时把其中一种商品数量修改成0时,会出现两个发货单。
每点一个发货单确认发货时,发现用户积分会按订单所给的积分进行累计。
例如刚才的订单送出积分为10,同一订单第一次发货时用户积分加10,第二次又加10。。。

最终会发现该订单有几个发货单就会累加几次积分。。。

错误原因:

是由于order.php中的 function get_all_delivery_finish 以及判断是否全部发货引起。
。。。。。。。。。。。
/* 标记订单为已确认 “已发货” */
/* 更新发货时间 */
$order_finish = get_all_delivery_finish($order_id);
.........
/* 如果当前订单已经全部发货 */
if ($order_finish)
。。。。。。。。。。。

function get_all_delivery_finish($order_id)
{
$return_res = 0;

if (empty($order_id))
{
return $return_res;
}

/* 未全部分单 */
if (!get_order_finish($order_id))
{
return $return_res;
}
/* 已全部分单 */
else
{
// 是否全部发货
$sql = "SELECT COUNT(delivery_id)
FROM " . $GLOBALS['ecs']->table('delivery_order') . "
WHERE order_id = '$order_id'
AND status = 2 ";
$sum = $GLOBALS['db']->getOne($sql);
// 全部发货
if (empty($sum))
{
$return_res = 1;
}
// 未全部发货
else
{
/* 订单全部发货中时:当前发货单总数 */
$sql = "SELECT COUNT(delivery_id)
FROM " . $GLOBALS['ecs']->table('delivery_order') . "
WHERE order_id = '$order_id'
AND status <> 1 ";
$_sum = $GLOBALS['db']->getOne($sql);
if ($_sum == $sum)
{
//就是这里了。。。
$return_res = -2; // 完全没发货
}
else
{
//这里还有。。。
$return_res = -1; // 部分发货
}
}
}

return $return_res;
}

当返还-1时,if ($order_finish)这个判断为true。。。于是BUG出现了。。。

解决方法:
if ($order_finish) 更改成 if ($order_finish && $order_finish>0)

希望Ecshop团队多多改进,毕竟是那么多程序员的心血。。。

回答:
貌似是一个严重的bug

谢谢斑竹分享。

的确是个BUG 支持下顶起来