通过本教程可以实现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
.
"\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
);
}
?>
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; 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;
}
6.需保证在themes\default\library\page_footer.lbi文件中存在
{insert name=
'query_info'
}
7.到后台"系统设置"->"计划任务"点击安装
大功告成,以后订单按时自动确认了