昨天写了个javaScript方法,是按查询条件从硬件设备(税控盘)中读取发票信息,查询条件有发票代码(FPDM)、发票号码起(FPHM_Q)、发票号码止(FPHM_Z)、发票状态(FPZT)、开票日期起(RQQ)、开票日期止(RQZ)。硬件设备提供的查询条件有查询方式(CXFS)、发票代码(FPDM)、发票号码起(FPHM_Q)、发票号码止(FPHM_Z)、开票日期起(RQQ)、开票日期止(RQZ),查询规则如下:
CXFS为0时:
12位发票代码+8位起始号码+8位终止号码
CXFS为1是:
8位起始日期+8位终止日期(YYYYMMDD)
按照上面的查询条件,我们只能是按照两种方式(按照发票代码、发票号码查询;按照开票日期查询)查询,例如按照开票日期查询,可是这样查询满足不了需求呀,经过思考发现,我们可以对按照开票日期查询返回的json对象进行二次查询。这是出现了一个效率低的方法和一个效率高的方法:
方法一:
var v_jsonCx = {
CXFS:'1', //按照日期段查询
RQQ:getVal('RQQ'), //getVal()为封装的获取值的方法
RQZ:getVal("RQZ")
};
var v_rtnJson = skpOcx.readFpmx(v_jsonCx); //从设备中读取发票信息
if(v_rtnJson != null){
var v_fpdm = getVal('FPDM');
var v_fphm_q = getVal('FPHM_Q');
var v_fphm_z = getVal('FPHM_Z');
var v_fpzt = getVal('FPZT_DM');
var v_array = new Array();
if(v_fpdm != ''){ //发票代码不为空
for(var i in v_rtnJson){
if(v_fpdm == v_rtnJson.FPDM){
v_array.push(v_rtnJson[i]);
}
}
v_rtnJson = v_array;
v_array.clear();
}
if(v_fphm_q != ''){ //发票日期起不为空
for(var i in v_rtnJson){
if(v_fpdm <= v_rtnJson.FPRQ){
v_array.push(v_rtnJson[i]);
}
}
v_rtnJson = v_array;
v_array.clear();
}
if(v_fphm_q != ''){ //发票日期起不为空
for(var i in v_rtnJson){
if(v_fpdm <= v_rtnJson.FPRQ){
v_array.push(v_rtnJson[i]);
}
}
v_rtnJson = v_array;
v_array.clear();
}
if(v_fphm_z != ''){ //发票日期止不为空
for(var i in v_rtnJson){
if(v_fphm_z >= v_rtnJson.FPRQ){
v_array.push(v_rtnJson[i]);
}
}
v_rtnJson = v_array;
v_array.clear();
}
......需要写6个for循环
}
方法二:(一个for循环搞定)
var v_jsonCx = {
CXFS:'1', //按照日期段查询
RQQ:getVal('RQQ'), //getVal()为封装的获取值的方法
RQZ:getVal("RQZ")
};
var v_rtnJson = skpOcx.readFpmx(v_jsonCx); //从设备中读取发票信息
if(v_rtnJson != null){
var v_fpdm = getVal('FPDM');
var v_fphm_q = getVal('FPHM_Q');
var v_fphm_z = getVal('FPHM_Z');
var v_fpzt = getVal('FPZT_DM');
var v_array = new Array();
for(var i in v_rtnJson){
var fpJson = v_rtnJson[i];
if((v_fpdm == ''? true :v_fpdm == fpJson.FPDM)
&& (v_fphm_q == ''? true :parseFloat(v_fphm_q) <= parseFloat(fpJson.FPHM))
&& (v_fphm_z == ''? true :parseFloat(v_fphm_z) >= parseFloat(fpJson.FPHM))
&& (v_fpzt == ''? true :v_fpzt == fpJson.FPZT)){
v_array.push(rtnJson[i]);
}
}
rtnJson = v_array;
}
以上的js代码调优,是不是和查询数据库里面的查询条件一样呢?希望各位大虾来评论!
2243

被折叠的 条评论
为什么被折叠?



