ecshop后台订单自动确认开发详解

CREATE TABLE `order_auto_confirm` (

`id` INT(10) UNSIGNED NOT NULL AUTO_INCREMENT,

`order_id` INT(10) UNSIGNED NOT NULL DEFAULT '0',

`order_sn` VARCHAR(20) NOT NULL,

`execute_time` INT(10) UNSIGNED NOT NULL DEFAULT '0',

`order_status` TINYINT(3) UNSIGNED NOT NULL DEFAULT '0' COMMENT '0未确定,1已经确定',

`addtime` INT(10) UNSIGNED NOT NULL DEFAULT '0',

`update_time` INT(10) UNSIGNED NOT NULL DEFAULT '0',

PRIMARY KEY (`id`),

UNIQUE INDEX `order_id` (`order_id`),

INDEX `execute_time` (`execute_time`)

)

COMMENT='订单定期自动确定'

COLLATE='utf8_general_ci'

ENGINE=MyISAM;

一、

/admin/order.php加入以下代码:

elseif($_REQUEST['act'] == 'order_cron')

{

$act1 = empty($_POST['act1']) ? 0 : $_POST['act1'];

if(empty($act1) || !in_array($act1, array('add', 'cancel'))) make_json_response('', -1, '未知请求act1');    $order_id = intval($_POST['order_id']);

$order = order_info($order_id);

if(empty($order)) make_json_response('', -2, '没有此订单ID');    if($order['order_status']) make_json_response('', -3, '此订单已经确认,不用自动确认');    if($order['pay_status']) make_json_response('', -4, '此订单支付状态已经变动,无法添加任务');    if($act1 == 'add'){

$order_cron_time = empty($_POST['order_cron_time']) ? 0 : $_POST['order_cron_time'];        if(empty($order_cron_time)) make_json_response('', -10, '请求的时间错误');        $sql = 'select order_id from '.$ecs->table('order_auto_confirm').' where order_id='.$order_id;

$rs  = $db->getRow($sql);

if($rs['order_id'] == $order_id){

make_json_response('', -30, '此订单任务已经存在,不能重复添加');

}

$execute_time = local_strtotime($order_cron_time);

$sql    = "insert into ".$ecs->table('order_auto_confirm')."(order_id, order_sn, execute_time, order_status, addtime) values(".$order_id.",'".$order['order_sn']."',".$execute_time.", 0, ".local_gettime().")";

$result = $db->query($sql);

if($result){

make_json_response('', 0, '');

}

make_json_response('', -9, '添加任务计划失败');

}elseif($act1 == 'cancel'){

$sql = 'delete  from '.$ecs->table('order_auto_confirm').' where order_id='.$order_id.' and order_status=0 ';

$db->query($sql);

make_json_response('', 0, '');

}

}


二、

在elseif($_REQUEST['act'] == 'info')里加入:

//取自动确定订单信息

$sql = 'select order_status, execute_time, addtime, update_time from '.$ecs->table('order_auto_confirm').' where order_id='.$order['order_id'];

$cron= $db->getRow($sql);

if(!empty($cron)){

if($cron['order_status'] == 1)

$cron['update_time'] = sprintf($_LANG['order_auto_croned'], local_date('Y-m-d H:i:s', $cron['update_time']));

else

$cron['execute_time']= sprintf($_LANG['order_auto_cron'], local_date('Y-m-d H:i:s', $cron['execute_time']));

}

$smarty->assign('cron', $cron);


三、

/includes/modules/cron/order_auto_confirm.php


if (!defined('IN_ECS'))

{

die('Hacking attempt');

}

require_once(ROOT_PATH . 'includes/lib_order.php');

$cron_lang = ROOT_PATH . 'languages/' .$GLOBALS['_CFG']['lang']. '/cron/order_auto_confirm.php';

if (file_exists($cron_lang))

{

global $_LANG;    include_once($cron_lang);

}/* 模块的基本信息 */

if (isset($set_modules) && $set_modules == TRUE)

{

$i = isset($modules) ? count($modules) : 0;    /* 代码 */

$modules[$i]['code']    = basename(__FILE__, '.php');    /* 描述对应的语言项 */

$modules[$i]['desc']    = 'order_auto_confirm_desc';    /* 作者 */

$modules[$i]['author']  = 'wjzhhr';    /* 网址 */

$modules[$i]['website'] = 'http://www.wodeqingchun.com';    /* 版本号 */

$modules[$i]['version'] = '1.0.0';    /* 配置信息 */

$modules[$i]['config']  = array(

array('name' => 'order_auto_confirm_count', 'type' => 'select', 'value' => '10'),

);    return;

}

$time  = gmtime();

//$time  = local_gettime();

$limit = empty($cron['order_auto_confirm_count']) ? 5 : $cron['order_auto_confirm_count'];

$sql   = "SELECT * FROM " . $GLOBALS['ecs']->table('order_auto_confirm') . " WHERE execute_time <= ".$time." and order_status=0 LIMIT $limit";

$autodb= $db->getAll($sql);

$i     = 0;

foreach ($autodb as $key => $val)

{

$order_id = $val['order_id'];

$order_sn = $val['order_sn'];

/* 标记订单为已确认 */

$update_status = update_order($order_id, array('order_status' => OS_CONFIRMED, 'confirm_time' => gmtime()));

update_order_amount($order_id);        /* 记录log */

$action_note = "计划任务:定期自动确定订单,订单号:".$order_sn.",执行状态:".($update_status ? '成功' : '失败');

order_action($order_sn, OS_CONFIRMED, SS_UNSHIPPED, PS_UNPAYED, $action_note, 'system_cron');        /* 如果原来状态不是“未确认”,且使用库存,且下订单时减库存,则减少库存 */

if ($val['order_status'] != OS_UNCONFIRMED && $_CFG['use_storage'] == '1' && $_CFG['stock_dec_time'] == SDT_PLACE)

{

change_order_goods_storage($order_id, true, SDT_PLACE);

}        if($update_status)

{

$i  += 1;

$sql = "update " . $GLOBALS['ecs']->table('order_auto_confirm') . " set order_status=1, update_time=".$time." where order_id=".$order_id;

$db->query($sql);

}

}$string = '此次共更新:'.$i.'条数据';

echo $string;file_put_contents('./a.txt',  $time . '----' . date('Y-m-d H:i:s').$string."\r\n", FILE_APPEND);

/**

* 更新订单总金额

* @param   int     $order_id   订单id

* @return  bool

//zuimoban.com

*/

function update_order_amount($order_id)

{

include_once(ROOT_PATH . 'includes/lib_order.php');

//更新订单总金额

$sql = "UPDATE " . $GLOBALS['ecs']->table('order_info') .

" SET order_amount = " . order_due_field() .

" WHERE order_id = '$order_id' LIMIT 1";    return $GLOBALS['db']->query($sql);

}

?>


四、

/languages/zh_cn/admin/order.php里加入:

//

$_LANG['order_auto_croned'] = '此订单于 %s 已被确认';

$_LANG['order_auto_cron']   = '此订单于 %s 进行定时确认';

$_LANG['order_auto']        = '将此订单加入自动定时确认';

$_LANG['order_auto_time']   = '自动确认时间:';


五、

/admin/themes/order_info.htm在:{$lang.base_info}后面加入:  

在此页面的JS里面加入:function order_cron(order_id, act){    var order_cron_time = 0;    if(act == 'add'){        order_cron_time = document.getElementById('order_cron_time').value;        if(!order_cron_time){            alert('无法获取时间');            return false;        }    }    Ajax.call('order.php?act=order_cron', 'order_id=' + order_id + '&act1=' + act + '&order_cron_time=' + order_cron_time, order_cron_response, 'POST', 'JSON');}function order_cron_response(res){  if (res.error == 0)  {      alert('保存成功');  }  else  {      alert(res.message);  }  return false;}还有/themes/default/footer.dwt里是否含有:{insert name='query_info'}这一句,比较重要,前人把这句去掉了,害最模板到处找原因。共涉及5个文件,两个新添加的

我只是个搬运工。侵删。原文:httpwww.ktshou.comportal.phpmod=view&aid=121

最后编辑于
©著作权归作者所有,转载或内容合作请联系作者
  • 序言:七十年代末,一起剥皮案震惊了整个滨河市,随后出现的几起案子,更是在滨河造成了极大的恐慌,老刑警刘岩,带你破解...
    沈念sama阅读 204,921评论 6 478
  • 序言:滨河连续发生了三起死亡事件,死亡现场离奇诡异,居然都是意外死亡,警方通过查阅死者的电脑和手机,发现死者居然都...
    沈念sama阅读 87,635评论 2 381
  • 文/潘晓璐 我一进店门,熙熙楼的掌柜王于贵愁眉苦脸地迎上来,“玉大人,你说我怎么就摊上这事。” “怎么了?”我有些...
    开封第一讲书人阅读 151,393评论 0 338
  • 文/不坏的土叔 我叫张陵,是天一观的道长。 经常有香客问我,道长,这世上最难降的妖魔是什么? 我笑而不...
    开封第一讲书人阅读 54,836评论 1 277
  • 正文 为了忘掉前任,我火速办了婚礼,结果婚礼上,老公的妹妹穿的比我还像新娘。我一直安慰自己,他们只是感情好,可当我...
    茶点故事阅读 63,833评论 5 368
  • 文/花漫 我一把揭开白布。 她就那样静静地躺着,像睡着了一般。 火红的嫁衣衬着肌肤如雪。 梳的纹丝不乱的头发上,一...
    开封第一讲书人阅读 48,685评论 1 281
  • 那天,我揣着相机与录音,去河边找鬼。 笑死,一个胖子当着我的面吹牛,可吹牛的内容都是我干的。 我是一名探鬼主播,决...
    沈念sama阅读 38,043评论 3 399
  • 文/苍兰香墨 我猛地睁开眼,长吁一口气:“原来是场噩梦啊……” “哼!你这毒妇竟也来了?” 一声冷哼从身侧响起,我...
    开封第一讲书人阅读 36,694评论 0 258
  • 序言:老挝万荣一对情侣失踪,失踪者是张志新(化名)和其女友刘颖,没想到半个月后,有当地人在树林里发现了一具尸体,经...
    沈念sama阅读 42,671评论 1 300
  • 正文 独居荒郊野岭守林人离奇死亡,尸身上长有42处带血的脓包…… 初始之章·张勋 以下内容为张勋视角 年9月15日...
    茶点故事阅读 35,670评论 2 321
  • 正文 我和宋清朗相恋三年,在试婚纱的时候发现自己被绿了。 大学时的朋友给我发了我未婚夫和他白月光在一起吃饭的照片。...
    茶点故事阅读 37,779评论 1 332
  • 序言:一个原本活蹦乱跳的男人离奇死亡,死状恐怖,灵堂内的尸体忽然破棺而出,到底是诈尸还是另有隐情,我是刑警宁泽,带...
    沈念sama阅读 33,424评论 4 321
  • 正文 年R本政府宣布,位于F岛的核电站,受9级特大地震影响,放射性物质发生泄漏。R本人自食恶果不足惜,却给世界环境...
    茶点故事阅读 39,027评论 3 307
  • 文/蒙蒙 一、第九天 我趴在偏房一处隐蔽的房顶上张望。 院中可真热闹,春花似锦、人声如沸。这庄子的主人今日做“春日...
    开封第一讲书人阅读 29,984评论 0 19
  • 文/苍兰香墨 我抬头看了看天上的太阳。三九已至,却和暖如春,着一层夹袄步出监牢的瞬间,已是汗流浃背。 一阵脚步声响...
    开封第一讲书人阅读 31,214评论 1 260
  • 我被黑心中介骗来泰国打工, 没想到刚下飞机就差点儿被人妖公主榨干…… 1. 我叫王不留,地道东北人。 一个月前我还...
    沈念sama阅读 45,108评论 2 351
  • 正文 我出身青楼,却偏偏与公主长得像,于是被迫代替她去往敌国和亲。 传闻我的和亲对象是个残疾皇子,可洞房花烛夜当晚...
    茶点故事阅读 42,517评论 2 343

推荐阅读更多精彩内容