ECSHOP商品订单自动确认二次开发教程
通过本教程可以实现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
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
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'
] =
'将此订单加入自动定时确认'
;
$_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" 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.需保证在themes\default\library\page_footer.lbi文件中存在
{insert name=
'query_info'
}
7.到后台"系统设置"->"计划任务"点击安装
大功告成,以后订单按时自动确认了
赞 (0)