Ecshop后台的订单数据计算不正确,问题出在order_status.php文件function get_orderinfo($start_date, $end_date)的界说,其间一切的sql都用了下面的代码:

functionget_orderinfo($start_date,$end_date){$order_info=array();/*未承认订单数*/$sql='SELECTCOUNT(*)ASunconfirmed_numFROM'.$GLOBALS['ecs']->table('order_info')."WHEREorder_status='".OS_UNCONFIRMED."'ANDadd_time>='$start_date'".
"ANDadd_time<'".($end_date+86400)."'";

很显然,这儿有个很明显的逻辑过错,即$end_date+86400,除非这儿用户挑选的开端时刻和完毕时刻是同一天,不然没有必要加上86400(86400秒等于1天),这个过错成果会导致最终的订单计算数量现已不是在指定时刻段内的数据,而是指定的时刻后再加上一天。
别的Ecshop自己自身订单承认功用,导致的默许订单计算页面,只显示未承认,已承认,已成交,无效这四个信息。这四个信息都不包含最最重要的已付款的订单数的信息
只要将无用的已承认订单计算代码改成已付出的计算代码:

/*已承认订单数*/
$sql='SELECTCOUNT(*)ASconfirmed_numFROM'.$GLOBALS['ecs']->table('order_info').
"WHEREorder_status='".OS_CONFIRMED."'ANDshipping_statusNOT".db_create_in(array(SS_SHIPPED,SS_RECEIVED))."ANDpay_statusNOT".db_create_in(array(PS_PAYED,PS_PAYING))."ANDadd_time>='$start_date'".
"ANDadd_time<'".($end_date+86400)."'";
$order_info['confirmed_num']=$GLOBALS['db']->getOne($sql);

改成:

/*bytiandi已付出订单数*/
$sql='SELECTCOUNT(*)ASconfirmed_numFROM'.$GLOBALS['ecs']->table('order_info').
"WHEREpay_status=".PS_PAYED."ANDshipping_statusNOT".db_create_in(array(SS_SHIPPED,SS_RECEIVED))."ANDadd_time>='$start_date'".
"ANDadd_time<$end_date";
$order_info['confirmed_num']=$GLOBALS['db']->getOne($sql);

即可修正ecshop计算不准备问题。

声明:有的资源均来自网络转载,版权归原作者所有,如有侵犯到您的权益 请联系邮箱:123456@qq.com 我们将配合处理!

原文地址:修正Ecshop后台订单统计数据不准确BUG发布于2022-05-25 07:43:30

相关推荐