zoukankan      html  css  js  c++  java
  • ECSHOP订单自动确认

    1.运行sql代码,生成数据库

    CREATE TABLE `ecs_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;

    2./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 '.$GLOBALS['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 ".$GLOBALS['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 '.$GLOBALS['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 '.$GLOBALS['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);

    2.新建php文件/includes/modules/cron/order_auto_confirm.php

    <?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']  = '超神学院';                        /* 网址 */
        $modules[$i]['website'] = 'http://www.jk191.com';        /* 版本号 */
        $modules[$i]['version'] = '1.0.0';                        /* 配置信息 */
        $modules[$i]['config']  = array(
        array('name' => 'order_auto_confirm_count', 'type' => 'select', 'value' => '10'),
        );
        return;
    }
    $time  = gmtime();
    $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."
    ", FILE_APPEND);
    
    /**
     * 更新订单总金额
     * @param   int     $order_id   订单id
     * @return  bool
     */
    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);
    }
    ?>

    3.新建php文件/languages/zh_cn/cron/order_auto_confirm.php

    <?php
    global $_LANG;$_LANG['order_auto_confirm']		= '订单定期自动确定';
    $_LANG['order_auto_confirm_desc']				= '定期自动确定订单';
    $_LANG['order_auto_confirm_count']				= '每次处理记录个数';
    $_LANG['order_auto_confirm_count_range']['5']	= '5';
    $_LANG['order_auto_confirm_count_range']['10']	= '10';
    $_LANG['order_auto_confirm_count_range']['15']	= '15';
    $_LANG['order_auto_confirm_count_range']['20']	= '20';
    ?>

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

    /* 订单自动确认 */
    $_LANG['order_auto_croned'] = '此订单于 %s 已被确认';
    $_LANG['order_auto_cron']   = '此订单于 %s 进行定时确认';
    $_LANG['order_auto']        = '<font color=red>将此订单加入自动定时确认</font>';
    $_LANG['order_auto_time']   = '自动确认时间:';

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

        <!--{if $order.status == 0 && $order.pay_status == 0 }-->
        <script type="text/javascript" src="../js/calendar.php?lang={$cfg_lang}"></script>
            <link href="../js/calendar/calendar.css" rel="stylesheet" type="text/css" />
            <div id="order_auto_cron" style="display: inline-block;  300px;">
            <!--{if !$cron}-->
            <a href="javascript:;" id="ccd" onclick="document.getElementById('select_time').style.display=''; this.style.display='none';">{$lang.order_auto}</a>
            <span id="select_time" style="display: none;">{$lang.order_auto_time}
                <input type="text" class="button" id="order_cron_time" value=""  onclick="return showCalendar('order_cron_time', '%Y-%m-%d %H:%M:%S', '24', false, 'order_cron_time');"   name="order_cron_time">
                <input type="button" value="保存" id="ccd_save"  class="button" onclick="order_cron({$order.order_id}, 'add');">
                <a href="javascript:;" onclick="document.getElementById('select_time').style.display='none'; document.getElementById('ccd').style.display='';">{$lang.op_cancel}</a>
            </span>
            <!--{elseif $cron.order_status == 0}-->
                {$cron.execute_time}
                <a href="javascript:;" onclick="if(confirm('确定要删除定时执行任务吗?')){order_cron({$order.order_id}, 'cancel');}else{return false;}">{$lang.op_cancel}</a>
            <!--{else $cron.order_status == 1}-->
                {$cron.update_time}
            <!--{/if}-->
            </div>
        <!--{/if}-->

    在此页面的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;
    }

    6.需保证在themesdefaultlibrarypage_footer.lbi文件中存在

    {insert name='query_info'}

    7.到后台"系统设置"->"计划任务"点击安装

    转载自http://hazy.voovq.com/html/show-94-1-1.html

  • 相关阅读:
    sql中的并、交、差
    白水的sql需求:每个病人的对应最小诊断类别|partition|
    |转|oracle行转列点评oracle11g sql新功能pivot/unpivot
    oracle wm_concat(column)函数的使用不同公司支付同一客商(行转列)|转|
    记录那些删除的伴我成长的触发器
    PL/SQL Developer使用技巧|F=Forwarding|
    手工创建数据库 ocp课程 wait for
    Oracle数据库监听配置|转|
    最新解决的sql:病人相邻两次看病小于3天
    tns的一些常见错误分析实例 |转|
  • 原文地址:https://www.cnblogs.com/wawahaha/p/4621589.html
Copyright © 2011-2022 走看看