修复Ecshop后台订单统计数据不准确的BUG
修正Ecshop后台订单统计数据不准确BUG的方法如下: 1. 首先,登录Ecshop后台管理系统。 2. 然后,找到“订单管理”模块,点击进入。 3. 在订单列表页面,点击右上角的“导出订单”按钮,选择需要导出的订单类型和时间范围。 4. 下载并打开导出的订单数据文件,检查数据是否准确。 5. 如果发现数据不准确,可以尝试重新导出订单数据,或者联系Ecshop官方客服寻求帮助。
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统计不准备问题。