2018年04月6日网站服务器迁移完成……

ecshop 订单自动确认

ecshop 苏 demo 2077℃ 0评论

操作步骤

1.创建对应的数据库表

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);

新建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 . "\r\n", 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);
}

?>

新建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';
?>

在/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']   = '自动确认时间:';

./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; width: 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" 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" 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;
}

需保证在themes\default\library\page_footer.lbi文件中存在

{insert name='query_info'}

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

 

 

 

 

 

 

 

 

打赏

转载请注明:苏demo的别样人生 » ecshop 订单自动确认

   如果本篇文章对您有帮助,欢迎向博主进行赞助,赞助时请写上您的用户名。
支付宝直接捐助帐号oracle_lee@qq.com 感谢支持!
喜欢 (0)or分享 (0)
发表我的评论
取消评论
表情