接口定时执行(包括:定时执行一次、服务器中断使用main.js执行)
常用实例:由于服务器重启或者其他事件导致定时执行中断(服务器中断),未能正常对(相对应数据)状态等修改操作,此时就需要使用main.js执行将由于服务器中断未能正常执行(定时执行)的数据状态等信息的修改
1.1根据传入的订单id(_id)用“唯一性代码段”查询订单表, 值来自于:传入的订单id(输入参数以get方式获取)
1.2通过“变量采集器”采集订单表数据。
1.3通过“自定义代码段”在订单的确认时间的基础上加上要求确认订单后多少时间内未改变状态就走定时执行一次的时间
1.4插入“定时执行一次代码段”,时间(a):1.3得到的时间,时区(b):UTC.(见图三)
1.5在“定时执行一次代码段”里插入所需的逻辑
a.根据传入的参数订单id(_id)用“唯一性代码段”查询订单表,拿到订单状态。
b. 根据“为真实执行”代码段判断(见图五), 如果a拿到的订单状态没有改变,则通过“标准新建代码段”修改订单的状态,node对应的唯一标识字段参数的来源是传入的参数“订单id(_id)”
c.添加数据库刷新代码段。
2.1在文档的培训---技术经理培训---4.2加入缓冲表同步处理中下载main.js模板
2.2在下载的main.js模板里把“启动计划任务(schedule(req) )”对应的取消注释
2.3找到“schedule ”对应的区块,把对应逻辑的源代码写到里面。
写入main.js中的具体逻辑:
a.通过标准查询代码段查订单表,条件是:订单状态=要求的订单状态。
b.把超过指定时间的订单和未超过指定时间的订单区分开。(见图十,指定时间= 订单的确认时间+要求确认订单后多少时间内未改变状态就走定时执行一次的时间 )
c. 根据“为真实执行”代码段判断超过指定时间的订单不为空,则通过“批量更新代码段”修改订单表的状态。
d. 根据“为真实执行”代码段判断未超过指定时间的订单不为空,则通过"调用第三方代接口代码段"调用定时执行一次的接口
调用第三方接口代码段不直接插入,直接复制下方源码黏贴即可。
/*INSBEGIN:RESTAPI*/
function() {
var requestlib = global.reqsys("request");
var urllib = global.reqsys("url");
function send(url) {
var urlObj = urllib.parse(url.url);
var option = {
"url": urlObj,
"method": "GET"
};
option.headers = {
"host": req.wwdomain(),
"Content-Type": "application/json"
};
return when.promise(function(resolve, reject, notify) {
requestlib(option, function(e, r, b) {
if (e) {
reject(e);
} else {
url.data = b;
resolve(url);
}
});
});
}
var urls = tmp_data.a;
var tasks = [];
_.each(urls, function(v, k) {
var u = {
url: v
};
tasks.push(function() {
return send(u);
});
});
return when.parallel(tasks);
},
//@wweditorinfo:{"id":"5426511f4d83cc3e09ef48e0d5f579d2","editor":{"step1":{"url":{"from":"tmp_data","value":"a"},"method":"GET","multiUrl":true},"step2":{"bodytype":"application/x-www-form-urlencoded","auth":{"empty":""},"parameters":[],"signature":"no"},"step3":{"xml2json":false,"selfcert":false,"headers":[],"customeHeaders":[{"customekey":"host","customevalue":"aaa"}]}}}
/*INSEND:RESTAPI*/
2.4在对应项目的svn---lib中新建一个文件夹,命名为“order”,把写好的main.js放在"order"文件下