ecshop教程栏目介绍实现后台订单自动确认开发方法
推荐(免费):ecshop教程
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
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加入以下代码:
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
39
40
41
42
43
44
45
46
47
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)里加入:
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
//取自动确定订单信息
$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
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
39
40
41
42
43
44
45
46
47
48
49
50
51
52
53
54
55
56
57
58
59
60
61
62
63
64
65
66
67
68
69
70
71
72
73
74
75
76
77
78
79
80
81
82
83
84
85
86
87
88
89
90
91
92
93
94
95
96
97
98
99
100
101
102
103
104
105
106
107
108
109
110
111
112
113
114
115
116
117
118
119
120
121
122
123
124
125
126
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."
", 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里加入:
1
2
3
4
5
6
7
8
9
//
$_LANG[order_auto_croned] = 此订单于 %s 已被确认;
$_LANG[order_auto_cron] = 此订单于 %s 进行定时确认;
$_LANG[order_auto] = 将此订单加入自动定时确认;
$_LANG[order_auto_time] = 自动确认时间:;
五、
在此页面的JS里面加入:
1
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个文件,两个新添加的以上就是ecshop实现后台订单自动确认开发方法的详细内容,更多请关注php中文网其它相关文章!