修正Ecshop后台订单统计数据不准确
2016-09-07 22:02 来源:www.chinab4c.com 作者:ecshop专家
Ecshop本身源码写得就有问题。打开order_status.php文件,翻到最下方,看function get_orderinfo($start_date, $end_date)的定义,其中所有的sql都用了下面的代码:
function get_orderinfo($start_date, $end_date)
{
$order_info = array();
/* 未确认订单数 */
$sql = 'SELECT COUNT(*) AS unconfirmed_num FROM ' .$GLOBALS['ecs']->table('order_info').
" WHERE order_status = '" .OS_UNCONFIRMED. "' AND add_time >= '$start_date'".
" AND add_time < '" . ($end_date + 86400) . "'";
很显然,这里有个很明显的逻辑错误,即$end_date+86400,除非这里用户选择的开始时间和结束时间是同一天,否则没有必要加上86400(86400秒等于1天),这个错误结果会导致最后的订单统计数量已经不是在指定时间段内的数据,而是指定的时间后再加上一天。
将无用的已确认订单统计代码改成已支付的统计代码:
/* 已确认订单数 */
$sql = 'SELECT COUNT(*) AS confirmed_num FROM ' .$GLOBALS['ecs']->table('order_info').
" WHERE order_status = '" .OS_CONFIRMED. "' AND shipping_status NOT ". db_create_in(array(SS_SHIPPED, SS_RECEIVED)) . " AND pay_status NOT" . db_create_in(array(PS_PAYED, PS_PAYING)) ." AND add_time >= '$start_date'".
" AND add_time < '" . ($end_date + 86400) . "'";
$order_info['confirmed_num'] = $GLOBALS['db']->getOne($sql);
改成:
/* by zuimoban.com 已支付订单数 */
$sql = 'SELECT COUNT(*) AS confirmed_num FROM ' .$GLOBALS['ecs']->table('order_info').
" WHERE pay_status =" . PS_PAYED ." AND shipping_status NOT" . db_create_in(array(SS_SHIPPED, SS_RECEIVED)) ." AND add_time >= '$start_date'".
" AND add_time < $end_date";
$order_info['confirmed_num'] = $GLOBALS['db']->getOne($sql);
|
最近更新
常用插件
- ecshop2.7.1邮件发送插件
ecshop2.7.1邮件发送插件:该插件主要的开发思想是源于ecshop短信发送系统...
- ecshop没登陆情况下订单查
ecshop没登陆情况下订单查询插件,主要是针对ecshop在没有登陆的情况下...
- ecshop最小购买数量控制插
ecshop最小购买数量控制插件,这个插件主要是为我们提供一个十分方便...
- ecshop二次开发商品购买增
图片1香...
- ecshop2.7.2生成虚拟订单2.
以前我们开发过ecshop下的虚拟订单,就是客户在访问的时候,会自动生...
ecshop热门问答
ecshop热门资料
ecshop产品模板
ecshop直接
ecshop最新动态
ecshoplazyload
ecshop确认
ecshopashx
ecshop武汉
ecshop优惠
ecshop上传后显示没有IPDATA
ecshop注册新用户
ecshop折扣价
ecshopsnsai
ecshop乐客
ecshop联系电话
ecshop条数
ecshop宽屏
ecshop商品点击数
ecshop对位
ecshop帅哥
ecshop网卡
ecshop网通线路
ecshopCMS
ecshop费用
ecshop韩都衣舍
ecshop没值
ecshop一步购物
ecshop添加到购物车
ecshop数据字典
ecshop录取
ecmall邮件