NC数据加工做语义模型DOCdoc.docx
《NC数据加工做语义模型DOCdoc.docx》由会员分享,可在线阅读,更多相关《NC数据加工做语义模型DOCdoc.docx(23页珍藏版)》请在冰豆网上搜索。
![NC数据加工做语义模型DOCdoc.docx](https://file1.bdocx.com/fileroot1/2023-4/21/a3840bda-5a36-4dd4-9d8c-898d6bd7a66f/a3840bda-5a36-4dd4-9d8c-898d6bd7a66f1.gif)
NC数据加工做语义模型DOCdoc
NC数据加工做语义模型(DOC)
报表语义模型(数据加工:
返回结果集方式)
数据加工方式:
1.返回查询SQL;2.返回结果集DataSet;3.返回数据表。
实现方式基本一致,可以参照系统原有报表语义模型
一、新建报表查询入口类,初始化报表字段
1.数据加工查询业务处理接口的定义:
packagenc.itf.fbm.paperbill.query;
importnc.pub.smart.data.DataSet;
importnc.vo.pub.BusinessException;
importcom.ufida.dataset.IContext;
/**票据信息查询/票据池额度查询接口
*
*@author温燕荣WYR
*@date2014-04-15
*/
publicinterfaceIFbmQueryPaperBillService{
}
2.数据加工入口类,初始化报表字段
packagenc.itf.fbm.paperbill.query;
importjava.util.ArrayList;
importjava.util.List;
importmon.NCLocator;
importnc.pub.smart.data.DataSet;
importnc.pub.smart.metadata.DataTypeConstant;
importnc.pub.smart.metadata.Field;
importnc.pub.smart.metadata.MetaData;
importnc.vo.obm.paperbill.query.PaperBillPoolVO;
importcom.ufida.dataset.IContext;
/**票据池额度查询入口类
*
*@author温燕荣WYR
*@date2014-04-15
*/
publicclassQueryPaperPoolLimitService{
privatestaticfinalMetaDatametaData;
publicQueryPaperPoolLimitService(){
super();
}
/**
*获得结果集
*
*@paramcontext报表界面查询传进来的参数(查询条件=值,系统一些默认参数等)
*@return
*/
publicstaticDataSetqueryPJCAmt(IContextcontext)throwsException{
//调用报表查询业务处理接口,
IFbmQueryPaperBillServicegatherservice=(IFbmQueryPaperBillService)NCLocator.getInstance().lookup(IFbmQueryPaperBillService.class.getName());
DataSetresultDataSet=gatherservice.queryPaperBillPoolLimit(context);
setPrecision(resultDataSet);
returnresultDataSet;
}
//初始化报表要显示的字段,包括查询条件字段也在内
static{
metaData=newMetaData();
Listfields=makeList();
//报表显示字段
Fieldf=newField();
f.setFldname(PaperBillPoolVO.ORGNAME);
f.setCaption("财务组织名称");
f.setPrecision(200);
f.setDataType(DataTypeConstant.STRING);
fields.add(f);
f=newField();
f.setFldname(PaperBillPoolVO.ACCTNAME);
f.setCaption("机构名称");
f.setPrecision(200);
f.setDataType(DataTypeConstant.STRING);
fields.add(f);
f=newField();
f.setFldname(PaperBillPoolVO.ACCTNO);
f.setCaption("账号");
f.setPrecision(200);
f.setDataType(DataTypeConstant.STRING);
fields.add(f);
f=newField();
f.setFldname(PaperBillPoolVO.PJCNO);
f.setCaption("票据池编号");
f.setPrecision(200);
f.setDataType(DataTypeConstant.STRING);
fields.add(f);
f=newField();
f.setFldname(PaperBillPoolVO.PJCKAMT);
f.setCaption("票据池可开票额度");
f.setPrecision(17);
f.setDataType(DataTypeConstant.BIGDECIMAL);
f.setScale(4);
fields.add(f);
f=newField();
f.setFldname(PaperBillPoolVO.CUSKAMT);
f.setCaption("客户剩余可开票额度");
f.setPrecision(17);
f.setDataType(DataTypeConstant.BIGDECIMAL);
f.setScale(4);
fields.add(f);
f=newField();
f.setFldname(PaperBillPoolVO.CUSEAMT);
f.setCaption("客户有效开票额度");
f.setPrecision(17);
f.setDataType(DataTypeConstant.BIGDECIMAL);
f.setScale(4);
fields.add(f);
f=newField();
f.setFldname(PaperBillPoolVO.CORNAME);
f.setCaption("分支机构名称");
f.setPrecision(200);
f.setDataType(DataTypeConstant.STRING);
fields.add(f);
f=newField();
f.setFldname(PaperBillPoolVO.CORKAMT);
f.setCaption("分支机构剩余可开票额度");
f.setPrecision(17);
f.setDataType(DataTypeConstant.BIGDECIMAL);
f.setScale(4);
fields.add(f);
f=newField();
f.setFldname(PaperBillPoolVO.REQRESERVED1);
f.setCaption("请求备用字段1");
f.setPrecision(200);
f.setDataType(DataTypeConstant.STRING);
fields.add(f);
f=newField();
f.setFldname(PaperBillPoolVO.REQRESERVED2);
f.setCaption("请求备用字段2");
f.setPrecision(200);
f.setDataType(DataTypeConstant.STRING);
fields.add(f);
f=newField();
f.setFldname(PaperBillPoolVO.REPRESERVED3);
f.setCaption("响应备用字段3");
f.setPrecision(200);
f.setDataType(DataTypeConstant.STRING);
fields.add(f);
f=newField();
f.setFldname(PaperBillPoolVO.REPRESERVED4);
f.setCaption("响应备用字段4");
f.setPrecision(200);
f.setDataType(DataTypeConstant.STRING);
fields.add(f);
//查询字段
f=newField();
f.setFldname(PaperBillPoolVO.PK_ORG);
f.setCaption("财务组织PK");
f.setPrecision(200);
f.setDataType(DataTypeConstant.STRING);
fields.add(f);
f=newField();
f.setFldname(PaperBillPoolVO.QUERY_ACCTNO);
f.setCaption("账号-查询");
f.setPrecision(200);
f.setDataType(DataTypeConstant.STRING);
fields.add(f);
f=newField();
f.setFldname(PaperBillPoolVO.QUERY_PJCNO);
f.setCaption("票据池编号-查询");
f.setPrecision(200);
f.setDataType(DataTypeConstant.STRING);
fields.add(f);
f=newField();
f.setFldname(PaperBillPoolVO.MFLAG);
f.setCaption("是否票据池主申请账号-查询");
f.setPrecision(200);
f.setDataType(DataTypeConstant.STRING);
fields.add(f);
f=newField();
f.setFldname(PaperBillPoolVO.NEXTTAG);
f.setCaption("下页标识-查询");
f.setPrecision(200);
f.setDataType(DataTypeConstant.STRING);
fields.add(f);
f=newField();
f.setFldname(PaperBillPoolVO.REQRESERVED1);
f.setCaption("请求备用字段1-查询");
f.setPrecision(200);
f.setDataType(DataTypeConstant.STRING);
fields.add(f);
f=newField();
f.setFldname(PaperBillPoolVO.REQRESERVED1);
f.setCaption("请求备用字段2-查询");
f.setPrecision(200);
f.setDataType(DataTypeConstant.STRING);
fields.add(f);
metaData.addField(fields.toArray(newField[]{}));
}
/**
*构造list
*
*@param
*@return
*/
publicstaticListmakeList(){
returnnewArrayList();
}
//字符串类型字段统一设置字段长度
privatestaticvoidsetPrecision(DataSetresultDataSet){
for(Fieldf:
resultDataSet.getMetaData().getFields()){
if(f.getDataType()==DataTypeConstant.STRING){
f.setPrecision(300);
}
}
}
/**
*获得票据池额度元数据(相当于代码写一个元数据)
*
*@return
*/
publicstaticMetaDatagetPJCAmtrMetaData(){
returnmetaData;
}
}
二、数据加工业务处理
//注意:
我这个是(银企直联)NC在线查询银行数据的代码,不用完全参照
//我这里就举例(票据池额度查询)
packagenc.impl.fbm.paperbill.query;
importjava.util.ArrayList;
importjava.util.HashMap;
importjava.util.List;
importnc.bs.fbm.paperbill.PaperBillService;
importmon.NCLocator;
importnc.itf.fbm.paperbill.query.IFbmQueryPaperBillService;
importnc.itf.fbm.paperbill.query.QueryPaperBillInfoService;
importnc.itf.fbm.paperbill.query.QueryPaperPoolLimitService;
importnc.itf.obm.paperbill.query.IObmQueryPaperBillService;
importnc.pub.smart.data.DataSet;
importnc.pub.smart.metadata.Field;
importnc.pub.smart.metadata.MetaData;
importnc.vo.fbm.paperbill.constant.PaperBillFbmOrderType;
importnc.vo.obm.paperbill.constant.PaperBillObmConstant;
importnc.vo.obm.paperbill.query.PaperBillInfoVO;
importnc.vo.obm.paperbill.query.PaperBillPoolVO;
importnc.vo.pub.BusinessException;
importnc.vo.pub.query.ConditionVO;
importcom.ufida.dataset.IContext;
importcom.ufida.report.anareport.FreeReportContextKey;
/**票据信息查询/票据池额度查询接口实现类
*
*@author温燕荣WYR
*@date2014-04-15
*/
publicclassFbmQueryPaperBillServiceImplextendsPaperBillServiceimplementsIFbmQueryPaperBillService{
privateIObmQueryPaperBillServiceiObmQueryPaperBillService;
//这一步可以不需要去理解,当不存在就可以了
privatestaticStringbillfunc=PaperBillObmConstant.PAPERQUERY;
/**
*票据池额度查询
*@paramcontext
*@return
*@throwsBusinessException
*/
@Override
publicDataSetqueryPaperBillPoolLimit(IContextcontext)throwsException{
//获取查询条件值
ConditionVO[]conditionvos=(ConditionVO[])context.getAttribute(FreeReportContextKey.KEY_REPORT_QUERYCONDITIONVOS);
DataSetresultDataSet=newDataSet();
HashMaphashmap=newHashMap();//获取查询条件(key,值)对应
if(conditionvos!
=null&&conditionvos.length>0){//执行了查询
for(ConditionVOconditionvo:
conditionvos){
hashmap.put(conditionvo.getFieldCode(),conditionvo.getValue());
}
//这一步可以不需要去理解,当不存在就可以了
Stringbanktype=getbanktype(hashmap.get(PaperBillPoolVO.QUERY_ACCTNO));
//这一步可以不需要去理解,当不存在就可以了
//根据当前界面VO获取银行的信息类
createBankInfoClass(banktype,billfunc,PaperBillFbmOrderType.QUERYBILLPOOLLIMIT);
/**这一步是获取查询条件值组装成查询vo(自己新建一个VO【PaperBillPoolVO】,记得加*上必须字段pk_org和orgname,前者是PK查询使用,后者是显示名称,初始化字段类里*面也必须有),我这里是按照不同银行动态调用各个handler
*/
//组装发送指令VO
PaperBillPoolVOpoolvo=(PaperBillPoolVO)abstractBankInfo.getQueryBankHandlerClass(abstractBankInfo).changeQueryPaperBillPoolVO(hashmap);
//查询条件值可能要先暂存,待返回数据集再把对应查询条件值设值回去,不然查不出数据
//也就是查询条件是什么值,最终结果集对应的查询字段值也必须是什么值
//看需求,报表字段有的时候需要建两种,一种是查询,一种是显示结果,进行分开
//这一步是报表数据逻辑处理
//发送查询指令业务接口
PaperBillPoolVO[]paperBillPoolVOs=null;
paperBillPoolVOs=getiObmQueryPaperBillService().queryPaperBillPoolLimit(newPaperBillPoolVO[]{poolvo});
//获取报表查询条件之后经过一些业务处理后返回的最终结果数据
//接收发送指令返回数据,进行数据转换,返回报表界面
//把处理好的结果,可以是返回ArrayList或者对象数组PaperBillPoolVO[]
resultDataSet=getPjcAmtRstProcessData(paperBillPoolVOs);//结果转换成DataSet
}else{//没有执行查询
MetaDatametaData=QueryPaperPoolLimitService.getPJCAmtrMetaData();
resultDataSet.setMetaData(metaData);
}
returnresultDataSet;
}
//下面就是把转换成报表显示数据DataSet格式,这里是固定的换个VO就能用
/**
*票据池额度查询
*银行返回的指令VO数据
*转换成报表显示数据DataSet
*@author温燕荣WYR
*@date2014-4-17
*@parampaperBillPoolVOs
*@return
*@throwsBusinessException
*/
publicDataSetgetPjcAmtRstProcessData(PaperBillPoolVO[]paperBillPoolVOs)throwsBusinessException{
DataSetresultDataSet=newDataSet();
MetaDatametaData=QueryPaperPoolLimitService.getPJCAmtrMetaData();
resultDataSet.setMetaData(metaData);
if(paperBillPoolVOs==null||paperBillPoolVOs.length==0){
returnresultDataSet;
}
Field[]fields=metaData.getFields();
List
for(PaperBillPoolVOvo:
paperBillPoolVOs){
if(vo==null){
continue;
}
Object[]rowData=newObject[fields.length];
for(intk=0;kStringfldName=fields[k].getFldname();
row