NC6X报表数据加工做语义模型(返回DataSet篇)
NC数据加工做语义模型(DOC)
报表语义模型(数据加工:返回结果集方式)数据加工方式:1.返回查询SQL ; 2.返回结果集DataSet;3.返回数据表。
实现方式基本一致,可以参照系统原有报表语义模型一、新建报表查询入口类,初始化报表字段1.数据加工查询业务处理接口的定义:package nc.itf.fbm.paperbill.query;import nc.pub.smart.data.DataSet;import nc.vo.pub.BusinessException;import com.ufida.dataset.IContext;/**票据信息查询/票据池额度查询接口** @author 温燕荣WYR* @date 2014-04-15*/public interface IFbmQueryPaperBillService {/*** 票据信息查询* @param context* @return* @throws BusinessException*/public DataSet queryPaperBillInfo(IContext context) throws Exception;/*** 票据池额度查询接口* @param context* @return* @throws BusinessException*/public DataSet queryPaperBillPoolLimit(IContext context) throws Exception;}2.数据加工入口类,初始化报表字段package nc.itf.fbm.paperbill.query;import java.util.ArrayList;import java.util.List;import mon.NCLocator;import nc.pub.smart.data.DataSet;import nc.pub.smart.metadata.DataTypeConstant;import nc.pub.smart.metadata.Field;import nc.pub.smart.metadata.MetaData;import nc.vo.obm.paperbill.query.PaperBillPoolVO;import com.ufida.dataset.IContext;/**票据池额度查询入口类** @author 温燕荣WYR* @date 2014-04-15*/public class QueryPaperPoolLimitService {private static final MetaData metaData;public QueryPaperPoolLimitService(){super();}/*** 获得结果集** @param context 报表界面查询传进来的参数(查询条件=值,系统一些默认参数等)* @return*/public static DataSet queryPJCAmt(IContext context)throws Exception {//调用报表查询业务处理接口,IFbmQueryPaperBillService gatherservice=(IFbmQueryPaperBillService) NCLocator.getInstance().lookup(IFbmQueryPaperBillService.class.getName());DataSet resultDataSet = gatherservice.queryPaperBillPoolLimit(context);setPrecision(resultDataSet);return resultDataSet;}//初始化报表要显示的字段,包括查询条件字段也在内static {metaData = new MetaData();List<Field> fields =makeList();//报表显示字段Field f = new Field();f.setFldname(NAME);f.setCaption("财务组织名称");f.setPrecision(200);f.setDataType(DataTypeConstant.STRING);fields.add(f);f = new Field();f.setFldname(PaperBillPoolVO.ACCTNAME);f.setCaption("机构名称");f.setPrecision(200);f.setDataType(DataTypeConstant.STRING);fields.add(f);f = new Field();f.setFldname(PaperBillPoolVO.ACCTNO);f.setCaption("账号");f.setPrecision(200);f.setDataType(DataTypeConstant.STRING);fields.add(f);f = new Field();f.setFldname(PaperBillPoolVO.PJCNO);f.setCaption("票据池编号");f.setPrecision(200);f.setDataType(DataTypeConstant.STRING);fields.add(f);f = new Field();f.setFldname(PaperBillPoolVO.PJCKAMT);f.setCaption("票据池可开票额度");f.setPrecision(17);f.setDataType(DataTypeConstant.BIGDECIMAL);f.setScale(4);fields.add(f);f = new Field();f.setFldname(PaperBillPoolVO.CUSKAMT);f.setCaption("客户剩余可开票额度");f.setPrecision(17);f.setDataType(DataTypeConstant.BIGDECIMAL);f.setScale(4);fields.add(f);f = new Field();f.setFldname(PaperBillPoolVO.CUSEAMT);f.setCaption("客户有效开票额度");f.setPrecision(17);f.setDataType(DataTypeConstant.BIGDECIMAL);f.setScale(4);fields.add(f);f = new Field();f.setFldname(PaperBillPoolVO.CORNAME);f.setCaption("分支机构名称");f.setPrecision(200);f.setDataType(DataTypeConstant.STRING); fields.add(f);f = new Field();f.setFldname(PaperBillPoolVO.CORKAMT);f.setCaption("分支机构剩余可开票额度");f.setPrecision(17);f.setDataType(DataTypeConstant.BIGDECIMAL);f.setScale(4);fields.add(f);f = new Field();f.setFldname(PaperBillPoolVO.REQRESERVED1);f.setCaption("请求备用字段1");f.setPrecision(200);f.setDataType(DataTypeConstant.STRING); fields.add(f);f = new Field();f.setFldname(PaperBillPoolVO.REQRESERVED2);f.setCaption("请求备用字段2");f.setPrecision(200);f.setDataType(DataTypeConstant.STRING); fields.add(f);f = new Field();f.setFldname(PaperBillPoolVO.REPRESERVED3);f.setCaption("响应备用字段3");f.setPrecision(200);f.setDataType(DataTypeConstant.STRING); fields.add(f);f = new Field();f.setFldname(PaperBillPoolVO.REPRESERVED4);f.setCaption("响应备用字段4");f.setPrecision(200);f.setDataType(DataTypeConstant.STRING); fields.add(f);//查询字段f = new Field();f.setFldname(PaperBillPoolVO.PK_ORG);f.setCaption("财务组织PK");f.setPrecision(200);f.setDataType(DataTypeConstant.STRING); fields.add(f);f = new Field();f.setFldname(PaperBillPoolVO.QUERY_ACCTNO);f.setCaption("账号-查询");f.setPrecision(200);f.setDataType(DataTypeConstant.STRING); fields.add(f);f = new Field();f.setFldname(PaperBillPoolVO.QUERY_PJCNO);f.setCaption("票据池编号-查询");f.setPrecision(200);f.setDataType(DataTypeConstant.STRING); fields.add(f);f = new Field();f.setFldname(PaperBillPoolVO.MFLAG);f.setCaption("是否票据池主申请账号-查询");f.setPrecision(200);f.setDataType(DataTypeConstant.STRING); fields.add(f);f = new Field();f.setFldname(PaperBillPoolVO.NEXTTAG);f.setCaption("下页标识-查询");f.setPrecision(200);f.setDataType(DataTypeConstant.STRING);fields.add(f);f = new Field();f.setFldname(PaperBillPoolVO.REQRESERVED1);f.setCaption("请求备用字段1-查询");f.setPrecision(200);f.setDataType(DataTypeConstant.STRING);fields.add(f);f = new Field();f.setFldname(PaperBillPoolVO.REQRESERVED1);f.setCaption("请求备用字段2-查询");f.setPrecision(200);f.setDataType(DataTypeConstant.STRING);fields.add(f);metaData.addField(fields.toArray(new Field[] {}));}/*** 构造list** @param <T>* @return*/public static <T> List<T> makeList() {return new ArrayList<T>();}//字符串类型字段统一设置字段长度private static void setPrecision(DataSet resultDataSet) { for (Field f : resultDataSet.getMetaData().getFields()) { if (f.getDataType() == DataTypeConstant.STRING) {f.setPrecision(300);}}}/*** 获得票据池额度元数据(相当于代码写一个元数据)** @return*/public static MetaData getPJCAmtrMetaData(){return metaData;}}二、数据加工业务处理//注意:我这个是(银企直联)NC在线查询银行数据的代码,不用完全参照//我这里就举例(票据池额度查询)package nc.impl.fbm.paperbill.query;import java.util.ArrayList;import java.util.HashMap;import java.util.List;import nc.bs.fbm.paperbill.PaperBillService;import mon.NCLocator;import nc.itf.fbm.paperbill.query.IFbmQueryPaperBillService;import nc.itf.fbm.paperbill.query.QueryPaperBillInfoService;import nc.itf.fbm.paperbill.query.QueryPaperPoolLimitService;import nc.itf.obm.paperbill.query.IObmQueryPaperBillService;import nc.pub.smart.data.DataSet;import nc.pub.smart.metadata.Field;import nc.pub.smart.metadata.MetaData;import nc.vo.fbm.paperbill.constant.PaperBillFbmOrderType;import nc.vo.obm.paperbill.constant.PaperBillObmConstant;import nc.vo.obm.paperbill.query.PaperBillInfoVO;import nc.vo.obm.paperbill.query.PaperBillPoolVO;import nc.vo.pub.BusinessException;import nc.vo.pub.query.ConditionVO;import com.ufida.dataset.IContext;import com.ufida.report.anareport.FreeReportContextKey;/**票据信息查询/票据池额度查询接口实现类** @author 温燕荣WYR* @date 2014-04-15*/public class FbmQueryPaperBillServiceImpl extends PaperBillService implements IFbmQueryPaperBillService{private IObmQueryPaperBillService iObmQueryPaperBillService;//这一步可以不需要去理解,当不存在就可以了private static String billfunc= PaperBillObmConstant.PAPERQUERY;/*** 票据池额度查询* @param context* @return* @throws BusinessException*/@Overridepublic DataSet queryPaperBillPoolLimit(IContext context) throws Exception {//获取查询条件值ConditionVO[] conditionvos=(ConditionVO[]) context.getAttribute(FreeReportContextKey.KEY_REPORT_QUERYCONDITIONVOS);DataSet resultDataSet = new DataSet();HashMap<String,String> hashmap=new HashMap<String, String>();//获取查询条件(key,值)对应if(conditionvos!=null&&conditionvos.length>0){//执行了查询for(ConditionVO conditionvo: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*///组装发送指令VOPaperBillPoolVOpoolvo=(PaperBillPoolVO)abstractBankInfo.getQueryBankHandlerClass(abstractBankInfo).chan geQueryPaperBillPoolVO(hashmap);//查询条件值可能要先暂存,待返回数据集再把对应查询条件值设值回去,不然查不出数据//也就是查询条件是什么值,最终结果集对应的查询字段值也必须是什么值//看需求,报表字段有的时候需要建两种,一种是查询,一种是显示结果,进行分开//这一步是报表数据逻辑处理//发送查询指令业务接口PaperBillPoolVO[] paperBillPoolVOs = null;paperBillPoolVOs=getiObmQueryPaperBillService().queryPaperBillPoolLimit(new PaperBillPoolVO[]{poolvo});//获取报表查询条件之后经过一些业务处理后返回的最终结果数据//接收发送指令返回数据,进行数据转换,返回报表界面//把处理好的结果,可以是返回ArrayList或者对象数组PaperBillPoolVO[]resultDataSet =getPjcAmtRstProcessData(paperBillPoolVOs); //结果转换成DataSet }else{//没有执行查询MetaData metaData = QueryPaperPoolLimitService.getPJCAmtrMetaData();resultDataSet.setMetaData(metaData);}return resultDataSet;}//下面就是把转换成报表显示数据DataSet格式,这里是固定的换个VO就能用/*** 票据池额度查询* 银行返回的指令VO数据*转换成报表显示数据DataSet*@author 温燕荣WYR*@date 2014-4-17*@param paperBillPoolVOs*@return* @throws BusinessException*/public DataSet getPjcAmtRstProcessData(PaperBillPoolVO[] paperBillPoolVOs)throws BusinessException{DataSet resultDataSet = new DataSet();MetaData metaData = QueryPaperPoolLimitService.getPJCAmtrMetaData();resultDataSet.setMetaData(metaData);if (paperBillPoolVOs == null || paperBillPoolVOs.length== 0) {return resultDataSet;}Field[] fields = metaData.getFields();List<Object[]> reportList = new ArrayList<Object[]>();for (PaperBillPoolVO vo : paperBillPoolVOs) {if(vo==null){continue;}Object[] rowData = new Object[fields.length];for (int k = 0; k < fields.length; k++) {String fldName = fields[k].getFldname();rowData[k] = vo.getAttributeValue(fldName);}reportList.add(rowData);}resultDataSet.setDatas(reportList.toArray(new Object[0][fields.length]));return resultDataSet;}//从这里到最后面的代码不用去理会了/*** @param iObmQueryPaperBillService 要设置的iObmQueryPaperBillService*/public void setiObmQueryPaperBillService(IObmQueryPaperBillService iObmQueryPaperBillService) {this.iObmQueryPaperBillService = iObmQueryPaperBillService;}/*** @return iObmQueryPaperBillService*/public IObmQueryPaperBillService getiObmQueryPaperBillService() {if(iObmQueryPaperBillService==null){iObmQueryPaperBillService=NCLocator.getInstance().lookup(IObmQueryPaperBillService. class);}return iObmQueryPaperBillService;}//根据银行账户子户PK获取银行代码,如:工商银行00015 icbcpublic String getbanktype (String banktype) throws BusinessException{String nbanktype=banktype;if(nbanktype!=null){if(nbanktype.indexOf(",")!=-1){throw new BusinessException("[账号]不能多选!");}nbanktype=getPaperBillHandler().getNetbankinftpCodeByAccount(nbanktype);return nbanktype;}return null;}}三、语义模型-XX(预置、集团、全局)设置1.新建一个语义模型文件,来到【语义模型设计器】界面,第一步“选择表”。
ncc 模板匹配算法 -回复
ncc 模板匹配算法-回复NCC 模板匹配算法- 模式识别领域中的利器在模式识别的领域中,模板匹配算法被广泛应用于各种图像处理任务中,特别是在图像分割、目标识别和模式检索等应用中。
其中,一种重要的模板匹配算法是NCC(Normalized Cross-Correlation)模板匹配算法。
本文将介绍NCC 模板匹配算法的基本原理、算法流程和应用案例。
一、算法原理NCC 模板匹配算法基于归一化的互相关系数(normalizedcross-correlation coefficient)来计算图像之间的相似度。
其核心思想是将待匹配图像与参考模板进行逐像素比较,并计算它们之间的相似度。
NCC 算法可以衡量两幅图像的像素值的相关性,从而判断它们的匹配程度。
NCC 模板匹配算法的基本步骤如下:1. 输入待匹配图像和参考模板图像。
2. 根据图像大小和模板尺寸的关系,遍历待匹配图像的每个像素。
3. 对于每个像素,取以其为中心的模板区域,并对其进行灰度归一化处理。
4. 计算归一化的互相关系数,即算法的关键步骤。
通过计算待匹配图像的模板区域与参考模板之间的相似度,可以得到相关系数,值越大表示相似度越高。
5. 根据计算的相关系数,确定图像中匹配度最高的位置。
二、算法流程NCC 模板匹配算法的具体流程如下:1. 将待匹配图像和参考模板图像进行灰度化处理,转换为灰度图像。
2. 设定模板尺寸和步长。
3. 遍历待匹配图像的每个像素,以其为中心截取模板区域。
4. 对待匹配图像和参考模板的模板区域进行灰度归一化处理。
5. 计算归一化的互相关系数,通过对应像素的相乘再求和的方式计算互相关系数。
6. 对计算得到的互相关系数进行归一化处理,使其取值范围在[0, 1]之间。
7. 根据归一化的互相关系数确定匹配程度最高的位置,并输出结果。
三、应用案例NCC 模板匹配算法在实际应用中具有广泛的应用。
以下是一些典型的应用案例:1. 目标识别:NCC 模板匹配算法可以用于识别图像中的目标物体。
base models 和 instruction models -回复
base models 和instruction models -回复什么是base models 和instruction models,它们在机器学习中的作用是什么?在机器学习中,模型是用来对数据进行建模和预测的工具。
基础模型(base models)和指令模型(instruction models)是常见的两种模型类型。
它们在机器学习任务中有不同的使用方式和作用。
首先,让我们来了解基础模型(base models)。
基础模型是机器学习中最基本和最简单的模型类型,通常是在没有任何先验知识或指导下构建的。
基础模型不依赖任何特定任务中的规则或指示,而是依靠大量的数据进行模型训练和学习。
这种模型的主要任务是从数据中学习模式、规律和关联性,并根据这些学习到的模式生成预测结果。
基础模型可以采用多种机器学习方法,包括传统的统计学习方法(例如线性回归、逻辑回归、决策树等)和现代的深度学习方法(例如神经网络)。
无论采用哪种方法,基础模型通常具有较低的复杂度和灵活性,但其训练和预测过程较为简单和高效。
基础模型在机器学习中扮演着重要的角色。
首先,它们经常被用作基准(baseline)模型,用于评估和比较其他更复杂或改进的模型。
通过建立一个基本模型并对其结果进行评估,我们可以确定其他模型相对于基准模型的性能改进程度。
其次,基础模型可以作为整个机器学习流程中的一个组成部分,用来构建更复杂的模型或进行模型集成。
然而,基础模型也有其局限性。
由于其对数据的学习是基于数据本身而没有任何先验知识,它们可能无法捕捉到一些特定任务中的关键规则和指示。
这就引出了指令模型(instruction models)的概念。
指令模型在机器学习中是一类特殊的模型,其使用指示、规则或先验知识来帮助模型进行训练和预测。
这些指令可以是人工设计的规则,也可以是由领域专家提供的先验知识。
指令模型的核心思想是在模型中引入外部知识,从而改善模型的学习和预测能力。
完整word版,NC数据加工做语义模型
报表语义模型(数据加工:返回结果集方式)数据加工方式:1.返回查询SQL ; 2.返回结果集DataSet;3.返回数据表。
实现方式基本一致,可以参照系统原有报表语义模型一、新建报表查询入口类,初始化报表字段1.数据加工查询业务处理接口的定义:package nc.itf.fbm.paperbill.query;import nc.pub.smart.data.DataSet;import nc.vo.pub.BusinessException;import com.ufida.dataset.IContext;/**票据信息查询/票据池额度查询接口** @author 温燕荣WYR* @date 2014-04-15*/public interface IFbmQueryPaperBillService {/*** 票据信息查询* @param context* @return* @throws BusinessException*/public DataSet queryPaperBillInfo(IContext context) throws Exception;/*** 票据池额度查询接口* @param context* @return* @throws BusinessException*/public DataSet queryPaperBillPoolLimit(IContext context) throws Exception;}2.数据加工入口类,初始化报表字段package nc.itf.fbm.paperbill.query;import java.util.ArrayList;import java.util.List;import mon.NCLocator;import nc.pub.smart.data.DataSet;import nc.pub.smart.metadata.DataTypeConstant;import nc.pub.smart.metadata.Field;import nc.pub.smart.metadata.MetaData;import nc.vo.obm.paperbill.query.PaperBillPoolVO;import com.ufida.dataset.IContext;/**票据池额度查询入口类** @author 温燕荣WYR* @date 2014-04-15*/public class QueryPaperPoolLimitService {private static final MetaData metaData;public QueryPaperPoolLimitService(){super();}/*** 获得结果集** @param context 报表界面查询传进来的参数(查询条件=值,系统一些默认参数等)* @return*/public static DataSet queryPJCAmt(IContext context)throws Exception {//调用报表查询业务处理接口,IFbmQueryPaperBillService gatherservice=(IFbmQueryPaperBillService) NCLocator.getInstance().lookup(IFbmQueryPaperBillService.class.getName());DataSet resultDataSet = gatherservice.queryPaperBillPoolLimit(context);setPrecision(resultDataSet);return resultDataSet;}//初始化报表要显示的字段,包括查询条件字段也在内static {metaData = new MetaData();List<Field> fields =makeList();//报表显示字段Field f = new Field();f.setFldname(NAME);f.setCaption("财务组织名称");f.setPrecision(200);f.setDataType(DataTypeConstant.STRING);fields.add(f);f = new Field();f.setFldname(PaperBillPoolVO.ACCTNAME);f.setCaption("机构名称");f.setPrecision(200);f.setDataType(DataTypeConstant.STRING);fields.add(f);f = new Field();f.setFldname(PaperBillPoolVO.ACCTNO);f.setCaption("账号");f.setPrecision(200);f.setDataType(DataTypeConstant.STRING);fields.add(f);f = new Field();f.setFldname(PaperBillPoolVO.PJCNO);f.setCaption("票据池编号");f.setPrecision(200);f.setDataType(DataTypeConstant.STRING);fields.add(f);f = new Field();f.setFldname(PaperBillPoolVO.PJCKAMT);f.setCaption("票据池可开票额度");f.setPrecision(17);f.setDataType(DataTypeConstant.BIGDECIMAL);f.setScale(4);fields.add(f);f = new Field();f.setFldname(PaperBillPoolVO.CUSKAMT);f.setCaption("客户剩余可开票额度");f.setPrecision(17);f.setDataType(DataTypeConstant.BIGDECIMAL);f.setScale(4);fields.add(f);f = new Field();f.setFldname(PaperBillPoolVO.CUSEAMT);f.setCaption("客户有效开票额度");f.setPrecision(17);f.setDataType(DataTypeConstant.BIGDECIMAL);f.setScale(4);fields.add(f);f = new Field();f.setFldname(PaperBillPoolVO.CORNAME);f.setCaption("分支机构名称");f.setPrecision(200);f.setDataType(DataTypeConstant.STRING); fields.add(f);f = new Field();f.setFldname(PaperBillPoolVO.CORKAMT);f.setCaption("分支机构剩余可开票额度");f.setPrecision(17);f.setDataType(DataTypeConstant.BIGDECIMAL);f.setScale(4);fields.add(f);f = new Field();f.setFldname(PaperBillPoolVO.REQRESERVED1);f.setCaption("请求备用字段1");f.setPrecision(200);f.setDataType(DataTypeConstant.STRING); fields.add(f);f = new Field();f.setFldname(PaperBillPoolVO.REQRESERVED2);f.setCaption("请求备用字段2");f.setPrecision(200);f.setDataType(DataTypeConstant.STRING); fields.add(f);f = new Field();f.setFldname(PaperBillPoolVO.REPRESERVED3);f.setCaption("响应备用字段3");f.setPrecision(200);f.setDataType(DataTypeConstant.STRING); fields.add(f);f = new Field();f.setFldname(PaperBillPoolVO.REPRESERVED4);f.setCaption("响应备用字段4");f.setPrecision(200);f.setDataType(DataTypeConstant.STRING); fields.add(f);//查询字段f = new Field();f.setFldname(PaperBillPoolVO.PK_ORG);f.setCaption("财务组织PK");f.setPrecision(200);f.setDataType(DataTypeConstant.STRING); fields.add(f);f = new Field();f.setFldname(PaperBillPoolVO.QUERY_ACCTNO);f.setCaption("账号-查询");f.setPrecision(200);f.setDataType(DataTypeConstant.STRING); fields.add(f);f = new Field();f.setFldname(PaperBillPoolVO.QUERY_PJCNO);f.setCaption("票据池编号-查询");f.setPrecision(200);f.setDataType(DataTypeConstant.STRING); fields.add(f);f = new Field();f.setFldname(PaperBillPoolVO.MFLAG);f.setCaption("是否票据池主申请账号-查询");f.setPrecision(200);f.setDataType(DataTypeConstant.STRING); fields.add(f);f = new Field();f.setFldname(PaperBillPoolVO.NEXTTAG);f.setCaption("下页标识-查询");f.setPrecision(200);f.setDataType(DataTypeConstant.STRING);fields.add(f);f = new Field();f.setFldname(PaperBillPoolVO.REQRESERVED1);f.setCaption("请求备用字段1-查询");f.setPrecision(200);f.setDataType(DataTypeConstant.STRING);fields.add(f);f = new Field();f.setFldname(PaperBillPoolVO.REQRESERVED1);f.setCaption("请求备用字段2-查询");f.setPrecision(200);f.setDataType(DataTypeConstant.STRING);fields.add(f);metaData.addField(fields.toArray(new Field[] {}));}/*** 构造list** @param <T>* @return*/public static <T> List<T> makeList() {return new ArrayList<T>();}//字符串类型字段统一设置字段长度private static void setPrecision(DataSet resultDataSet) { for (Field f : resultDataSet.getMetaData().getFields()) { if (f.getDataType() == DataTypeConstant.STRING) {f.setPrecision(300);}}}/*** 获得票据池额度元数据(相当于代码写一个元数据)** @return*/public static MetaData getPJCAmtrMetaData(){return metaData;}}二、数据加工业务处理//注意:我这个是(银企直联)NC在线查询银行数据的代码,不用完全参照//我这里就举例(票据池额度查询)package nc.impl.fbm.paperbill.query;import java.util.ArrayList;import java.util.HashMap;import java.util.List;import nc.bs.fbm.paperbill.PaperBillService;import mon.NCLocator;import nc.itf.fbm.paperbill.query.IFbmQueryPaperBillService;import nc.itf.fbm.paperbill.query.QueryPaperBillInfoService;import nc.itf.fbm.paperbill.query.QueryPaperPoolLimitService;import nc.itf.obm.paperbill.query.IObmQueryPaperBillService;import nc.pub.smart.data.DataSet;import nc.pub.smart.metadata.Field;import nc.pub.smart.metadata.MetaData;import nc.vo.fbm.paperbill.constant.PaperBillFbmOrderType;import nc.vo.obm.paperbill.constant.PaperBillObmConstant;import nc.vo.obm.paperbill.query.PaperBillInfoVO;import nc.vo.obm.paperbill.query.PaperBillPoolVO;import nc.vo.pub.BusinessException;import nc.vo.pub.query.ConditionVO;import com.ufida.dataset.IContext;import com.ufida.report.anareport.FreeReportContextKey;/**票据信息查询/票据池额度查询接口实现类** @author 温燕荣WYR* @date 2014-04-15*/public class FbmQueryPaperBillServiceImpl extends PaperBillService implements IFbmQueryPaperBillService{private IObmQueryPaperBillService iObmQueryPaperBillService;//这一步可以不需要去理解,当不存在就可以了private static String billfunc= PaperBillObmConstant.PAPERQUERY;/*** 票据池额度查询* @param context* @return* @throws BusinessException*/@Overridepublic DataSet queryPaperBillPoolLimit(IContext context) throws Exception {//获取查询条件值ConditionVO[] conditionvos=(ConditionVO[]) context.getAttribute(FreeReportContextKey.KEY_REPORT_QUERYCONDITIONVOS);DataSet resultDataSet = new DataSet();HashMap<String,String> hashmap=new HashMap<String, String>();//获取查询条件(key,值)对应if(conditionvos!=null&&conditionvos.length>0){//执行了查询for(ConditionVO conditionvo: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*///组装发送指令VOPaperBillPoolVOpoolvo=(PaperBillPoolVO)abstractBankInfo.getQueryBankHandlerClass(abstractBankInfo).chan geQueryPaperBillPoolVO(hashmap);//查询条件值可能要先暂存,待返回数据集再把对应查询条件值设值回去,不然查不出数据//也就是查询条件是什么值,最终结果集对应的查询字段值也必须是什么值//看需求,报表字段有的时候需要建两种,一种是查询,一种是显示结果,进行分开//这一步是报表数据逻辑处理//发送查询指令业务接口PaperBillPoolVO[] paperBillPoolVOs = null;paperBillPoolVOs=getiObmQueryPaperBillService().queryPaperBillPoolLimit(new PaperBillPoolVO[]{poolvo});//获取报表查询条件之后经过一些业务处理后返回的最终结果数据//接收发送指令返回数据,进行数据转换,返回报表界面//把处理好的结果,可以是返回ArrayList或者对象数组PaperBillPoolVO[]resultDataSet =getPjcAmtRstProcessData(paperBillPoolVOs); //结果转换成DataSet }else{//没有执行查询MetaData metaData = QueryPaperPoolLimitService.getPJCAmtrMetaData();resultDataSet.setMetaData(metaData);}return resultDataSet;}//下面就是把转换成报表显示数据DataSet格式,这里是固定的换个VO就能用/*** 票据池额度查询* 银行返回的指令VO数据*转换成报表显示数据DataSet*@author 温燕荣WYR*@date 2014-4-17*@param paperBillPoolVOs*@return* @throws BusinessException*/public DataSet getPjcAmtRstProcessData(PaperBillPoolVO[] paperBillPoolVOs)throws BusinessException{DataSet resultDataSet = new DataSet();MetaData metaData = QueryPaperPoolLimitService.getPJCAmtrMetaData();resultDataSet.setMetaData(metaData);if (paperBillPoolVOs == null || paperBillPoolVOs.length== 0) {return resultDataSet;}Field[] fields = metaData.getFields();List<Object[]> reportList = new ArrayList<Object[]>();for (PaperBillPoolVO vo : paperBillPoolVOs) {if(vo==null){continue;}Object[] rowData = new Object[fields.length];for (int k = 0; k < fields.length; k++) {String fldName = fields[k].getFldname();rowData[k] = vo.getAttributeValue(fldName);}reportList.add(rowData);}resultDataSet.setDatas(reportList.toArray(new Object[0][fields.length]));return resultDataSet;}//从这里到最后面的代码不用去理会了/*** @param iObmQueryPaperBillService 要设置的iObmQueryPaperBillService*/public void setiObmQueryPaperBillService(IObmQueryPaperBillService iObmQueryPaperBillService) {this.iObmQueryPaperBillService = iObmQueryPaperBillService;}/*** @return iObmQueryPaperBillService*/public IObmQueryPaperBillService getiObmQueryPaperBillService() {if(iObmQueryPaperBillService==null){iObmQueryPaperBillService=NCLocator.getInstance().lookup(IObmQueryPaperBillService. class);}return iObmQueryPaperBillService;}//根据银行账户子户PK获取银行代码,如:工商银行00015 icbcpublic String getbanktype (String banktype) throws BusinessException{String nbanktype=banktype;if(nbanktype!=null){if(nbanktype.indexOf(",")!=-1){throw new BusinessException("[账号]不能多选!");}nbanktype=getPaperBillHandler().getNetbankinftpCodeByAccount(nbanktype);return nbanktype;}return null;}}三、语义模型-XX(预置、集团、全局)设置1.新建一个语义模型文件,来到【语义模型设计器】界面,第一步“选择表”。
NCV6.5完整版发版说明
Zhiqi发版说明- V6.5完整版总体篇版权未经用友集团的书面许可,本发版说明任何整体或部分的内容不得被复制、复印、翻译或缩减以用于任何目的。
本发版说明的内容在未经通知的情形下可能会发生改变,敬请留意。
请注意:本发版说明的内容并不代表用友软件所做的承诺。
2第一章概述NCV6.5是用友公司在NCV6.33基础上推出的大型企业管理与电子商务平台,它以集团型企业为目标客户群,尤其为大型企业集团和特大型企业集团(包括:中国的Top500强)提供完整的信息化解决方案,帮助大企业集团实现基于集团战略的由上而下的集团管控,帮助集团企业实现横向的、面向商业流程的实时协同运营,服务企业互联网化。
NCV6.5全面助力集团企业的管理升级与互联网转型,帮助企业建立以“客户”为核心的统一营销服务生意平台、以“物”为核心的供应链与制造管理运营平台、以“财”为核心的集团管理平台、以“人”为核心的人力资本管理与企业协同工作平台、以技术为核心的大型企业与组织计算平台。
NCV6.5是继NCV6.3之后的一个全盘产品,本版本在合盘的基础上,在产品的稳定性、运行效率、质量上有了很大提升,此外在平台、集团管控、供应链、制造、资产、电子商务、人力、协同、项目等领域都新增完善了很多特性。
为便于读者阅读,本发版说明将按照应用领域拆分成多个分篇,包括:总体篇、UAP篇、企业绩效管理篇、财务会计篇、资金管理篇、管理会计篇、供应链篇、资产管理篇、项目管理篇、生产制造篇、供应商管理篇、财务共享服务篇、电子商务篇、渠道管理篇,请根据所需进行抽选阅读。
另外,本版在发布NCV6.5的同时提供了NC维护云平台,以“云+端”的模式帮助NC产品的实施运维。
NC维护云平台非NC产品标配功能,而是配套产品。
详细功能请见使用说明,本文档不再赘述。
3特别提醒:1.NCV6.5发版时,原财务会计领域下的税务管理模块暂不发版。
如果有已使用该模块的项目要升级到v65版本,可提前咨询相应的研发部门。
NC6X报表数据加工做语义模型(返回SQL篇)
NC6X报表数据加工做语义模型(返回SQL篇)报表语义模型(数据处理:返回SQL方法)数据处理方法:1。
返回查询语句;2.返回结果集数据集;;3.返回数据表(下次提供案例)实现方法基本相同。
您可以参考系统的原始报表语义模型(抱歉,此处不详细仅供参考)1,以及基本实现思路的概况(无详细对比和赘述)1。
首先,不管语义模型数据处理是返回任何类型的SQL、DataSet 还是TABLE,的步骤基本上是相同的。
2。
首先,根据所需的难度选择以上方法:一般数据可以通过SQL在中找到。
有时,如果找不到一两个数据,您可以选择返回SQL并为找不到的部分创建临时表。
如果它基本上是一个拼凑的检索,那么返回到数据集模式;在最后一种情况下,没有太多的标准产品用于返回TABLE场景,案例将在后面提供。
3。
数据处理必须为语义脚本定义接口和实现类。
最好确定报告属于哪个模块,创建接口和实现类,并配置接口文件UPM。
具体配置请参考模块的其他接口文件。
4.数据处理接口的参数1一般传递给com.ufida.dataset.IContext 或NC . pub . smart . context . smart context,这是报表上下文。
所有的查询参数和系统变量都放在这里,语义模型和接口中的两个上下文基本上可以相互转换,从下面的例可以看出;6。
在编写数据处理代码之前,不要考虑我是否必须配置语义模型和自由报告。
没用的!纠正先写数据处理代码的可行方式;7。
首先,你应该弄清楚报告的检索逻辑,并在头脑中写出大概的代码。
8。
确定查询条件和数据类型。
在接口实现类中定义全局变量查询条件(推荐)。
默认无分配。
便于调试代码,因为尚未使用查询模板,并且无法动态获取查询条件。
最好分配查询模板,以便以后覆盖查询变量值(数据处理报表只能作为单据查询模板分配给报表节点);9。
如果元数据列和数据类型是在数据集返回方法的接口实现类中定义的,则SQL returner没有此步骤。
NC数据加工做语义模型DOC
NC数据加工做语义模型(DOC)————————————————————————————————作者:————————————————————————————————日期:报表语义模型(数据加工:返回结果集方式)数据加工方式:1.返回查询SQL ; 2.返回结果集DataSet;3.返回数据表。
实现方式基本一致,可以参照系统原有报表语义模型一、新建报表查询入口类,初始化报表字段1.数据加工查询业务处理接口的定义:package nc.itf.fbm.paperbill.query;import nc.pub.smart.data.DataSet;import nc.vo.pub.BusinessException;import com.ufida.dataset.IContext;/**票据信息查询/票据池额度查询接口** @author 温燕荣WYR* @date 2014-04-15*/public interface IFbmQueryPaperBillService {/*** 票据信息查询* @param context* @return* @throws BusinessException*/public DataSet queryPaperBillInfo(IContext context) throws Exception;/*** 票据池额度查询接口* @param context* @return* @throws BusinessException*/public DataSet queryPaperBillPoolLimit(IContext context) throws Exception;}2.数据加工入口类,初始化报表字段package nc.itf.fbm.paperbill.query;import java.util.ArrayList;import java.util.List;import mon.NCLocator;import nc.pub.smart.data.DataSet;import nc.pub.smart.metadata.DataTypeConstant;import nc.pub.smart.metadata.Field;import nc.pub.smart.metadata.MetaData;import nc.vo.obm.paperbill.query.PaperBillPoolVO;import com.ufida.dataset.IContext;/**票据池额度查询入口类** @author 温燕荣WYR* @date 2014-04-15*/public class QueryPaperPoolLimitService {private static final MetaData metaData;public QueryPaperPoolLimitService(){super();}/*** 获得结果集** @param context 报表界面查询传进来的参数(查询条件=值,系统一些默认参数等)* @return*/public static DataSet queryPJCAmt(IContext context)throws Exception {//调用报表查询业务处理接口,IFbmQueryPaperBillService gatherservice=(IFbmQueryPaperBillService) NCLocator.getInstance().lookup(IFbmQueryPaperBillService.class.getName());DataSet resultDataSet = gatherservice.queryPaperBillPoolLimit(context);setPrecision(resultDataSet);return resultDataSet;}//初始化报表要显示的字段,包括查询条件字段也在内static {metaData = new MetaData();List<Field> fields =makeList();//报表显示字段Field f = new Field();f.setFldname(NAME);f.setCaption("财务组织名称");f.setPrecision(200);f.setDataType(DataTypeConstant.STRING);fields.add(f);f = new Field();f.setFldname(PaperBillPoolVO.ACCTNAME);f.setCaption("机构名称");f.setPrecision(200);f.setDataType(DataTypeConstant.STRING);fields.add(f);f = new Field();f.setFldname(PaperBillPoolVO.ACCTNO);f.setCaption("账号");f.setPrecision(200);f.setDataType(DataTypeConstant.STRING);fields.add(f);f = new Field();f.setFldname(PaperBillPoolVO.PJCNO);f.setCaption("票据池编号");f.setPrecision(200);f.setDataType(DataTypeConstant.STRING);fields.add(f);f = new Field();f.setFldname(PaperBillPoolVO.PJCKAMT);f.setCaption("票据池可开票额度");f.setPrecision(17);f.setDataType(DataTypeConstant.BIGDECIMAL);f.setScale(4);fields.add(f);f = new Field();f.setFldname(PaperBillPoolVO.CUSKAMT);f.setCaption("客户剩余可开票额度");f.setPrecision(17);f.setDataType(DataTypeConstant.BIGDECIMAL);f.setScale(4);fields.add(f);f = new Field();f.setFldname(PaperBillPoolVO.CUSEAMT);f.setCaption("客户有效开票额度");f.setPrecision(17);f.setDataType(DataTypeConstant.BIGDECIMAL);f.setScale(4);fields.add(f);f = new Field();f.setFldname(PaperBillPoolVO.CORNAME);f.setCaption("分支机构名称");f.setPrecision(200);f.setDataType(DataTypeConstant.STRING); fields.add(f);f = new Field();f.setFldname(PaperBillPoolVO.CORKAMT);f.setCaption("分支机构剩余可开票额度");f.setPrecision(17);f.setDataType(DataTypeConstant.BIGDECIMAL);f.setScale(4);fields.add(f);f = new Field();f.setFldname(PaperBillPoolVO.REQRESERVED1);f.setCaption("请求备用字段1");f.setPrecision(200);f.setDataType(DataTypeConstant.STRING); fields.add(f);f = new Field();f.setFldname(PaperBillPoolVO.REQRESERVED2);f.setCaption("请求备用字段2");f.setPrecision(200);f.setDataType(DataTypeConstant.STRING); fields.add(f);f = new Field();f.setFldname(PaperBillPoolVO.REPRESERVED3);f.setCaption("响应备用字段3");f.setPrecision(200);f.setDataType(DataTypeConstant.STRING); fields.add(f);f = new Field();f.setFldname(PaperBillPoolVO.REPRESERVED4);f.setCaption("响应备用字段4");f.setPrecision(200);f.setDataType(DataTypeConstant.STRING); fields.add(f);//查询字段f = new Field();f.setFldname(PaperBillPoolVO.PK_ORG);f.setCaption("财务组织PK");f.setPrecision(200);f.setDataType(DataTypeConstant.STRING); fields.add(f);f = new Field();f.setFldname(PaperBillPoolVO.QUERY_ACCTNO);f.setCaption("账号-查询");f.setPrecision(200);f.setDataType(DataTypeConstant.STRING); fields.add(f);f = new Field();f.setFldname(PaperBillPoolVO.QUERY_PJCNO);f.setCaption("票据池编号-查询");f.setPrecision(200);f.setDataType(DataTypeConstant.STRING); fields.add(f);f = new Field();f.setFldname(PaperBillPoolVO.MFLAG);f.setCaption("是否票据池主申请账号-查询");f.setPrecision(200);f.setDataType(DataTypeConstant.STRING); fields.add(f);f = new Field();f.setFldname(PaperBillPoolVO.NEXTTAG);f.setCaption("下页标识-查询");f.setPrecision(200);f.setDataType(DataTypeConstant.STRING);fields.add(f);f = new Field();f.setFldname(PaperBillPoolVO.REQRESERVED1);f.setCaption("请求备用字段1-查询");f.setPrecision(200);f.setDataType(DataTypeConstant.STRING);fields.add(f);f = new Field();f.setFldname(PaperBillPoolVO.REQRESERVED1);f.setCaption("请求备用字段2-查询");f.setPrecision(200);f.setDataType(DataTypeConstant.STRING);fields.add(f);metaData.addField(fields.toArray(new Field[] {}));}/*** 构造list** @param <T>* @return*/public static <T> List<T> makeList() {return new ArrayList<T>();}//字符串类型字段统一设置字段长度private static void setPrecision(DataSet resultDataSet) { for (Field f : resultDataSet.getMetaData().getFields()) { if (f.getDataType() == DataTypeConstant.STRING) {f.setPrecision(300);}}}/*** 获得票据池额度元数据(相当于代码写一个元数据)** @return*/public static MetaData getPJCAmtrMetaData(){return metaData;}}二、数据加工业务处理//注意:我这个是(银企直联)NC在线查询银行数据的代码,不用完全参照//我这里就举例(票据池额度查询)package nc.impl.fbm.paperbill.query;import java.util.ArrayList;import java.util.HashMap;import java.util.List;import nc.bs.fbm.paperbill.PaperBillService;import mon.NCLocator;import nc.itf.fbm.paperbill.query.IFbmQueryPaperBillService;import nc.itf.fbm.paperbill.query.QueryPaperBillInfoService;import nc.itf.fbm.paperbill.query.QueryPaperPoolLimitService;import nc.itf.obm.paperbill.query.IObmQueryPaperBillService;import nc.pub.smart.data.DataSet;import nc.pub.smart.metadata.Field;import nc.pub.smart.metadata.MetaData;import nc.vo.fbm.paperbill.constant.PaperBillFbmOrderType;import nc.vo.obm.paperbill.constant.PaperBillObmConstant;import nc.vo.obm.paperbill.query.PaperBillInfoVO;import nc.vo.obm.paperbill.query.PaperBillPoolVO;import nc.vo.pub.BusinessException;import nc.vo.pub.query.ConditionVO;import com.ufida.dataset.IContext;import com.ufida.report.anareport.FreeReportContextKey;/**票据信息查询/票据池额度查询接口实现类** @author 温燕荣WYR* @date 2014-04-15*/public class FbmQueryPaperBillServiceImpl extends PaperBillService implements IFbmQueryPaperBillService{private IObmQueryPaperBillService iObmQueryPaperBillService;//这一步可以不需要去理解,当不存在就可以了private static String billfunc= PaperBillObmConstant.PAPERQUERY;/*** 票据池额度查询* @param context* @return* @throws BusinessException*/@Overridepublic DataSet queryPaperBillPoolLimit(IContext context) throws Exception {//获取查询条件值ConditionVO[] conditionvos=(ConditionVO[]) context.getAttribute(FreeReportContextKey.KEY_REPORT_QUERYCONDITIONVOS);DataSet resultDataSet = new DataSet();HashMap<String,String> hashmap=new HashMap<String, String>();//获取查询条件(key,值)对应if(conditionvos!=null&&conditionvos.length>0){//执行了查询for(ConditionVO conditionvo: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*///组装发送指令VOPaperBillPoolVOpoolvo=(PaperBillPoolVO)abstractBankInfo.getQueryBankHandlerClass(abstractBankInfo).chan geQueryPaperBillPoolVO(hashmap);//查询条件值可能要先暂存,待返回数据集再把对应查询条件值设值回去,不然查不出数据//也就是查询条件是什么值,最终结果集对应的查询字段值也必须是什么值//看需求,报表字段有的时候需要建两种,一种是查询,一种是显示结果,进行分开//这一步是报表数据逻辑处理//发送查询指令业务接口PaperBillPoolVO[] paperBillPoolVOs = null;paperBillPoolVOs=getiObmQueryPaperBillService().queryPaperBillPoolLimit(new PaperBillPoolVO[]{poolvo});//获取报表查询条件之后经过一些业务处理后返回的最终结果数据//接收发送指令返回数据,进行数据转换,返回报表界面//把处理好的结果,可以是返回ArrayList或者对象数组PaperBillPoolVO[]resultDataSet =getPjcAmtRstProcessData(paperBillPoolVOs); //结果转换成DataSet }else{//没有执行查询MetaData metaData = QueryPaperPoolLimitService.getPJCAmtrMetaData();resultDataSet.setMetaData(metaData);}return resultDataSet;}//下面就是把转换成报表显示数据DataSet格式,这里是固定的换个VO就能用/*** 票据池额度查询* 银行返回的指令VO数据*转换成报表显示数据DataSet*@author 温燕荣WYR*@date 2014-4-17*@param paperBillPoolVOs*@return* @throws BusinessException*/public DataSet getPjcAmtRstProcessData(PaperBillPoolVO[] paperBillPoolVOs)throws BusinessException{DataSet resultDataSet = new DataSet();MetaData metaData = QueryPaperPoolLimitService.getPJCAmtrMetaData();resultDataSet.setMetaData(metaData);if (paperBillPoolVOs == null || paperBillPoolVOs.length== 0) {return resultDataSet;}Field[] fields = metaData.getFields();List<Object[]> reportList = new ArrayList<Object[]>();for (PaperBillPoolVO vo : paperBillPoolVOs) {if(vo==null){continue;}Object[] rowData = new Object[fields.length];for (int k = 0; k < fields.length; k++) {String fldName = fields[k].getFldname();rowData[k] = vo.getAttributeValue(fldName);}reportList.add(rowData);}resultDataSet.setDatas(reportList.toArray(new Object[0][fields.length]));return resultDataSet;}//从这里到最后面的代码不用去理会了/*** @param iObmQueryPaperBillService 要设置的iObmQueryPaperBillService*/public void setiObmQueryPaperBillService(IObmQueryPaperBillService iObmQueryPaperBillService) {this.iObmQueryPaperBillService = iObmQueryPaperBillService;}/*** @return iObmQueryPaperBillService*/public IObmQueryPaperBillService getiObmQueryPaperBillService() {if(iObmQueryPaperBillService==null){iObmQueryPaperBillService=NCLocator.getInstance().lookup(IObmQueryPaperBillService. class);}return iObmQueryPaperBillService;}//根据银行账户子户PK获取银行代码,如:工商银行00015 icbcpublic String getbanktype (String banktype) throws BusinessException{String nbanktype=banktype;if(nbanktype!=null){if(nbanktype.indexOf(",")!=-1){throw new BusinessException("[账号]不能多选!");}nbanktype=getPaperBillHandler().getNetbankinftpCodeByAccount(nbanktype);return nbanktype;}return null;}}三、语义模型-XX(预置、集团、全局)设置1.新建一个语义模型文件,来到【语义模型设计器】界面,第一步“选择表”。
用友ERPNC6模块简介
供应链
资产管理
人力资本
业务,例如:提交各类申请;进行个人信息、工资信息、合同信息等查询业务;进行PBC的填报、进行考核评分等。
具体包括如下重要功能:
提交个人申请
可通过自助提交的申请包括:时间管理中的签卡申请、休假申请、加班申请、出差申请;人员变动管理中的转正申请、调配申请、离职申请;招聘管理中的内聘职位申请、录用申请等。
查询公共信息并进行相关申请
组织发布的内聘信息、培训报名信息均可在员工自助当中查询,员工可通过自助直接进行内聘申请或培训报名。
个人信息查询
可查询的数据包括:个人信息、合同信息、考勤信息、工资信息、能力素质信息。
自助业务处理
可处理的业务包括:PBC填报、PBC审核、考核评分、考核结果审核等业务,绩效管理的多数业务是通。
nc 聚类的方法 -回复
nc 聚类的方法-回复聚类是一种常见的数据分析方法,通过将数据集中的样本划分为不同的组别或类别,让同一类的样本表现出相似的特征,从而实现数据的分类和归纳。
在聚类分析中,最常用的方法是K-means聚类和层次聚类。
K-means聚类算法是一种基于距离的聚类方法,它将数据集划分为K个簇。
该算法的基本思想是:首先随机选择K个中心点,然后计算每个样本与这些中心点的距离,并将样本划分到距离最近的中心点所在的簇中。
接着更新每个簇的中心点,重新计算每个样本与新中心点的距离,并重新划分样本到簇中。
重复进行这个过程,直到满足停止准则。
K-means算法的时间复杂度为O(tKn),其中t为迭代次数,K为簇的个数,n为样本个数。
层次聚类是一种基于样本之间相似度或距离的聚类方法。
该算法的基本思想是:首先将每个样本视为一个独立的簇,然后计算每两个簇之间的相似度或距离,并将距离最近的两个簇合并成一个新的簇。
接着重新计算新簇与其他簇之间的相似度或距离,继续合并相近的簇,直到最后只剩下一个簇为止。
层次聚类算法的时间复杂度为O(n^3),其中n为样本个数。
在K-means和层次聚类之外,还有一些其他的聚类方法,如DBSCAN、Mean-shift、模糊C-均值聚类等。
DBSCAN(Density-Based Spatial Clustering of Applications with Noise)是一种基于密度的聚类方法,可以发现任意形状的簇,并且可以处理噪声数据。
DBSCAN算法的基本思想是:选择一个未访问的样本,计算其邻域内的样本数量,如果该数量大于预设的阈值,则将该样本和其邻域内的样本划分为一个簇,然后继续处理邻域内的未访问样本,直到没有未访问样本或所有样本都被访问为止。
Mean-shift是一种基于密度的聚类方法,它通过寻找样本密度最大的区域中心,并以此为基础调整其他样本的位置,实现样本的聚集。
Mean-shift 算法的基本思想是:首先初始化样本的位置,然后根据核函数计算每个样本的梯度,以此梯度为方向更新样本的位置,重复进行这个过程,直到样本的位置不再改变。
用友软件 参考:NC6相对于NC5系列的优势分析模板-报表管理平台V2.0
Yonyou Software Corporation
NC6对比NC5优势分析—报表领域—1.报表管理平台
需求来源、背景 1、客户希望快速搭建全集团范围、全业务系统的报表管理平台,对没有上业务 系统的子公司或新成员单位形成迅速管控,对没有业务系统的业务板块通过报表 达成业务管控或补充业务管理 2、“及时、相关、准确”获取业务管理信息 3、对数据进行统一管理和使用,可以满足监管报表、企业管理报表的业务需要 4、希望报表提供强大、丰富的全方位报表管理的采集、存储、报送、查询和分 析 5、报表能支持有效决策 6、财务报表希望能达到帐表一体化功能,达到帐表一致性,并方便报表管理人 员联查数据,方便审计人员检查数据 5、集团希望能通过母集团集中部署或母、子集团分布式部署,达到对既有的集 团或成员单位的业务系统(NC5X或其他异构系统)进行直接取数,获取有效信息 支持业务管控、管理决策
NC6对比NC5优势分析 —报表管理平台
用友软件股份有限公司 2013年 月
Yonyou Software Corporation
NC6对比NC5优势分析—报表领域—总体介绍
NC6报表管理平台,提供一套灵活的报表查询、采集及分析工具、一系列可任意无缝集成应用 的报表产品模块,满足用户不同层次、不同业务的计划和决策需要。 报表管理平台:支持与NC全面集成的全范围报表平台服务,支持从所有NC系统取数,支持 报表订阅;支持按统一报表数据模型(语义模型)进行所见即所得的报表设计;数据方案 支持异构系统取数;按业务板块垂直管理;支持多口径汇总和合并;从数据内容到取数形 式全面支持了组织和档案、数据模型和业务函数的报表数据权限;按任务和合并方案进行 统一管理的报表分布式 深化财务和HR的领域报表应用:支持领域专属的财务数据方案、HR数据方案、HR语义模型 及其对应的行列拖拽式采集表样设计器和多维透视分析表,并提供其他专门的财务数据提 供者、HR语义模型作为补充,方便快速定制常用的、体系的财务管理报表、HR统计报表; 支持账表一致性控制、支持财务数据方案联查总账 全面优化报表业务流程及其易用性:多级管控和中间级组织管理;审核方案和打印方案支 持被任务引用;层层上报、直报确认和审批(组织+职责);支持自动催报并发送到手机, 全面丰富报送管理信息和提升综合服务功能;支持批量上报、批量汇总;支持批量计算按 计划管理和追踪计算详细日志 提升报表工具功能性和易用性:企业报表采集报表工具提供丰富的取数手段(数据方案、 语义模型、业务函数)、支持报表表样格式设计场景(指标、公式、展示、报表项目); 报表平台支持即见即所得的常用业务查询和统计(统一的语义模型、更灵活强大的自由报 表工具) ;多单位多期间多任务多报表同时填报汇总审核追踪打印导出的报表数据中心; 支持WORD管理报告;提供指标查询功能;提供多维报表分析功能,支持多维数据数据预览 和多维数据分析 丰富贴切的产品形态: 1 报表平台:支持业务查询和统计报表,提供预置语义模型和查询、 报表,支持客户自定义查询和报; 2 企业报表:支持企业采集和分析报表;3 数据方案: 默认支持财务数据方案;可按特性扩展支持V5X财务数据方案、其他异构数据方案;4 HR综 Yonyou Software Corporation 合报表、HR企业报表: 支持HR数据方案和HR报表工具,支持HR报表业务
representative_dataset converter -回复
representative_dataset converter -回复如何将一个原始数据集转换成代表性数据集(convert representative dataset)。
第一步:理解原始数据集在将原始数据集转换为代表性数据集之前,我们首先需要了解原始数据集的基本特征和内容。
原始数据集可能包含多种类型的数据,例如文本、数字、图像等。
我们需要了解数据集的整体结构、数据类型、变量和特征的含义以及数据集的大小。
第二步:确定代表性数据集的目标在进行数据集转换之前,我们需要明确代表性数据集的目标是什么。
代表性数据集通常是从原始数据集中提取的子集,其中包含了原始数据集中最具代表性的数据样本。
代表性数据集通常具有以下特点:1. 代表性:代表性数据集应该能够准确地反映原始数据集的统计特征和分布。
它应该包含原始数据集中重要的数据点和变化趋势,并保持数据集的整体一致性。
2. 可解释性:代表性数据集应该具有较高的可解释性,即可以通过数据集本身的特征和属性来解释数据集中的特定问题或现象。
3. 适应性:代表性数据集应当适应特定的分析目标和应用场景。
不同的分析和应用可能对数据集的特征和属性有不同的要求,因此代表性数据集应当根据具体需求进行灵活的定制和调整。
第三步:选择合适的数据转换方法根据原始数据集的特点和代表性数据集的目标,我们可以选择合适的数据转换方法来创建代表性数据集。
以下是一些常用的数据转换方法:1. 数据抽样:数据抽样是从原始数据集中随机选择一部分数据样本作为代表性数据集。
抽样方法有多种,如简单随机抽样、分层抽样、系统抽样等,根据具体情况选择合适的抽样方法。
2. 特征选择:特征选择是挑选出原始数据集中最相关和最具代表性的特征变量。
使用特征选择方法可以减少数据集的维度,提高建模和分析效率。
3. 数据降维:数据降维是通过保留数据集中最重要的信息和变化趋势,将高维数据集转换为低维数据集。
常用的数据降维方法包括主成分分析(PCA)、线性判别分析(LDA)等。
NC6X报表数据加工做语义模型(返回SQL篇)
报表语义模型(数据加工:返回SQL方式)数据加工方式:1.返回查询SQL ; 2.返回结果集DataSet;3.返回数据表(下次做了提供案例)。
实现方式基本一致,可以参照系统原有报表语义模型(抱歉不详细仅供参考)一、实现基本思路概况(不详细比较啰嗦)1.首先不管语义模型数据加工是返回SQL、DataSet或者TABLE任何一种类型基本实现步骤一致;2.先按需求实现的难易程度来选择使用以上那种方式来实现:一般数据都能SQL查询出来的,偶尔有一两点数据取不到可以选择返回SQL,不会取数的那段创建临时表;如果是基本上都是东拼西凑的取数那就返回DataSet方式;最后一种时返回TABLE这种场景标准产品用的也不多,后续提供案例;3.数据加工做语义脚本肯定需要定义接口和实现类,确定好报表属于那个模块创建接口和实现类并配置好接口文件UPM就好,具体配置可以参考改模块其他接口文件;4.数据加工接口参数一一般都是传com.ufida.dataset.IContext或者nc.pub.smart.context.SmartContext,这个是报表上下文,所有查询参数及系统变量5.都放在这个里面,语义模型与接口里面这个两个context 基本可以互相转换,后面案例就可以看出;6.不要想着是不是我要先把语义模型和自由报表配置好了再写数据加工代码,没用!正确可行的方式先写数据加工代码;7.首先就要自己明确报表的取数逻辑,脑海大概设计下大概的代码怎么写;8.确定查询条件及数据类型,接口实现类里面定义全局变量查询条件(推荐)默认否赋值,方便调试代码,因为这块还没用到查询模板,没法动态获取查询条件,后面分配了查询模板重新覆盖查询变量值就好了(数据加工报表只能做单据查询模板那种分配给报表节点);9.如果是DataSet返回方式的接口实现类里面定义好元数据列及数据类型,SQL返回方式没有这一步操作;10.然后就是写报表取数逻辑代码,按自己默认设定查询变量值去写好代码及判断逻辑,最后返回数据(SQL、DataSet或者TABLE);11.客开报表一般把语义模型和自由报表定义在集团或者全局的节点,这也是规范和经验所得;12.在语义模型-集团(举例,全局节点也行)节点定义好自己的与模型,点设计弹出界面数据加工放入调用写好的数据加工过接口进行代码调试及代码纠正;13.现在调试接口参数context基本上时没有什么数据的,目前也不会有查询条件字段在里面,没有分配给节点查询模板呢,打开报表节点查询调用代码才能看到里面很多参数和值,所以暂时接口实现类不初始化查询参数方法及校验;14.语义模型数据加工里面放入调用接口代码,格式化,编译通过,下一步,代码成功的话会正常返回报表字段列(元数据)页签,点确定,“3选择字段”自己添加字段列,这里的字段必须是代码返回的,不能自己随便新增无效的;自己添加字段“表达式大方框”必须选择左下角“数据加工(dp)”里面的字段,这个表达式里面可以写公式;最后解释下“数据加工(dp)”这个命名都是这样写规范,防止其他实施不随意修改。
ncc模板匹配算法 -回复
ncc模板匹配算法-回复什么是NCC模板匹配算法?NCC模板匹配算法(Normalized Cross-Correlation Template Matching Algorithm)是一种用于图像处理和模式识别的算法。
它可以在给定的图像中寻找与模板最为相似的区域。
NCC模板匹配算法采用了归一化的交叉相关性衡量模板和图像之间的相似性。
该算法可以广泛应用于目标检测、特征提取、对象跟踪等领域。
NCC模板匹配算法的原理是什么?NCC模板匹配算法首先需要定义一个模板图像,该模板图像是我们要寻找的目标。
然后,将模板图像与待匹配图像进行比较,以确定它们之间的相似性度量。
这个相似性度量使用的是归一化的交叉相关性,可以量化模板与图像之间的相似程度。
具体来说,NCC模板匹配算法首先将模板图像和待匹配图像的像素值进行归一化。
接下来,通过计算两个归一化图像的交叉相关性,可以得到一个表示相似度的值。
交叉相关性的计算使用了卷积操作,将模板图像与待匹配图像进行卷积得到一个二维矩阵。
这个矩阵的值代表了模板图像在待匹配图像上不同位置的匹配度。
最后,NCC模板匹配算法通过比较这个二维矩阵中的相似度值,找到最高匹配度的位置,确定模板在待匹配图像中的位置。
这个位置就是我们要寻找的目标所在的位置。
NCC模板匹配算法有哪些应用?NCC模板匹配算法在图像处理和模式识别领域有广泛的应用。
以下是一些常见的应用场景:1. 目标检测:NCC模板匹配算法可以用于在图像中检测指定的目标对象。
通过定义一个目标对象的模板图像,可以在图像中找到与目标最为相似的区域。
2. 特征提取:NCC模板匹配算法可以用于提取图像中的特定特征。
通过定义一个包含特定特征的模板图像,可以在图像中找到与该特征最为相似的区域。
3. 对象跟踪:NCC模板匹配算法可以用于跟踪图像中的对象。
通过定义一个表示对象的模板图像,可以在图像序列中连续地跟踪该对象的位置。
4. 姿态估计:NCC模板匹配算法可以用于估计图像中目标对象的姿态。
mmsegmentation work_results -回复
mmsegmentation work_results -回复mmsegmentation是一个基于PyTorch的全卷积神经网络工具箱,用于图像分割任务。
它提供了针对各种图像分割任务的实现,包括语义分割、实例分割和轮廓分割等。
mmsegmentation的出现极大地简化了图像分割任务的开发流程,使得研究人员和工程师能够更加专注于算法的设计和改进。
在本文中,我们将一步一步回答有关mmsegmentation的工作结果,并探讨它的优点和应用。
首先,让我们从mmsegmentation的基本架构开始。
mmsegmentation 的核心思想是使用卷积神经网络对输入图像进行像素级别的分类,从而实现图像分割。
它采用了一种全卷积神经网络的结构,可以有效地捕捉图像的语义信息,并将每个像素分类为特定的类别。
mmsegmentation提供了多种经典的分割模型,如FCN、UNet、DeepLabV3等,这些模型在图像分割领域已经取得了显著成果。
在训练过程中,mmsegmentation基于大型数据集(如COCO、PASCAL VOC等)进行监督学习,通过最小化损失函数来优化网络模型。
它提供了许多训练选项,例如学习率调整、数据增强和权重初始化等,以帮助用户在特定任务上获得更好的性能。
一旦模型训练完成,就可以将其应用于实际的图像分割任务。
mmsegmentation提供了一系列评估指标,例如Mean IoU (Intersection over Union)、Pixel Accuracy等,用于评估模型在测试集上的性能。
此外,mmsegmentation还支持将训练好的模型导出到常见的格式(如ONNX和TorchScript),以便在不同的平台上进行部署和使用。
那么,mmsegmentation的工作结果如何呢?根据官方的实验结果,mmsegmentation在多个基准数据集上均取得了优秀的性能。
例如,在COCO数据集上,使用mmsegmentation的DeepLabV3模型在语义分割任务上达到了80.02的Mean IoU,超过了许多其他的分割方法。
mmsegmentation work_results -回复
mmsegmentation work_results -回复mmsegmentation是一个基于PyTorch的开源语义分割工具箱,提供了多种先进的语义分割模型和训练、推理等相关功能。
它使得语义分割任务的开发过程更加简单和高效。
本文将一步一步回答关于mmsegmentation工具箱的相关问题,包括其工作原理、功能特点以及应用案例等内容。
一、mmsegmentation的工作原理1. 分割任务简介语义分割是计算机视觉领域一个重要的研究任务,旨在将图像中的每个像素分类到特定的类别中,从而实现对图像的精细化理解。
例如,可以将图像中的道路、建筑物、车辆等不同区域进行准确的分割。
2. 深度学习与语义分割mmsegmentation基于深度学习技术实现了语义分割任务。
深度学习是一种通过学习大量数据来构建模型进行推理和决策的方法,能够有效地应对语义分割任务中的复杂性和多样性。
3. mmsegmentation的工作流程mmsegmentation的工作流程包括数据预处理、网络搭建、模型训练和推理四个主要步骤。
首先,需要对语义分割数据进行预处理,包括数据增强、标签处理等。
然后,通过选择合适的网络结构,搭建语义分割模型。
接下来,使用预处理后的数据对模型进行训练,通过优化损失函数来不断调整模型参数。
最后,使用训练好的模型进行推理,对新的图像进行语义分割预测。
二、mmsegmentation的功能特点1. 提供多种经典模型mmsegmentation提供了多种经典的语义分割模型,包括U-Net、DeepLabV3、PSPNet等。
这些模型经过广泛应用和验证,在精度和效率方面都具有一定的优势。
2. 支持多种数据增强技术mmsegmentation支持多种数据增强技术,如随机裁剪、旋转、翻转等。
这些技术可以有效增加训练数据的多样性,提高模型的泛化能力和鲁棒性。
3. 提供全面的评估指标mmsegmentation提供了全面的评估指标,如像素准确率、平均准确率等。
ncc 模板匹配算法 -回复
ncc 模板匹配算法-回复什么是ncc模板匹配算法NCC(Normalized Cross-Correlation)模板匹配算法是一种计算机视觉领域常用的模板匹配方法。
它通过将图像中的每个像素与一个预定义的模板进行比较,从而在图像中寻找与模板最相似的区域。
NCC模板匹配算法的原理基于归一化互相关的概念,可以有效地检测图像中的目标。
首先,我们需要了解一下互相关的概念。
互相关是一种信号处理中常用的数学操作,它描述了两个信号之间的相似程度。
在图像处理中,互相关通常用于寻找两幅图像之间的相似区域。
NCC模板匹配算法是基于归一化互相关的概念进行的。
归一化是为了消除图像亮度的影响,使得匹配结果更加准确。
在NCC模板匹配算法中,首先将原始图像和模板进行归一化处理,然后通过计算归一化互相关来寻找图像中与模板最相似的区域。
NCC模板匹配算法的步骤可以总结如下:1. 定义模板:首先需要确定要匹配的目标模板。
模板可以是一个固定大小的矩形区域,也可以是一个特定形状的区域。
模板的选择要根据具体的应用场景进行,确保模板能够准确地描述待匹配的目标。
2. 归一化处理:将原始图像和模板进行归一化处理。
归一化可以通过减去均值并除以标准差来实现。
归一化处理能够消除图像亮度的影响,使得匹配结果更加准确。
3. 计算归一化互相关:对于每个像素点,计算原始图像和模板的归一化互相关值。
归一化互相关值表示了图像中该像素点与模板的相似程度。
计算归一化互相关可以使用卷积运算来实现,通过对每个像素点和模板进行逐点相乘,并求和得到结果。
4. 寻找最相似的区域:通过比较归一化互相关值,找到与模板最相似的区域。
可以选择找到具有最高归一化互相关值的像素点作为匹配结果,或者通过设置一个阈值来确定匹配结果。
5. 输出匹配结果:将匹配结果标记在原始图像上,以便在后续的处理中进行分析或者可视化。
NCC模板匹配算法的优点在于简单高效,适用于各种类型的目标检测任务。
然而,它也存在一些限制。
ncl conform函数 -回复
ncl conform函数-回复NCL(The NCAR Command Language)是一种用于科学数据可视化和分析的编程语言。
它由美国国家大气研究中心(NCAR)开发,旨在帮助科学家处理和可视化大气和地球科学数据。
在NCL中,conform函数起到重要的作用,用于将不同数据集调整为相同的网格结构和投影方式,以便进行有效的比较和分析。
使用conform函数能够解决许多实际问题。
在各个科学领域,研究人员通常需要比较和分析来自不同数据源、不同时间段或不同模型的数据。
然而,这些数据集之间的差异可能会导致结构和投影方式不一致,从而使得直接比较和分析变得困难。
幸运的是,NCL的conform函数能够快速有效地处理这些问题。
在使用conform函数之前,首先需要了解数据集的特点,包括数据类型、网格结构、经纬度范围和投影方式等。
以数据集的网格结构为例,不同数据集可能采用不同的网格分辨率和空间参考系,这会导致数据集之间的网格不匹配。
使用conform函数,我们可以将需要比较的数据集转换为相同的网格结构,从而消除这种不匹配。
现在,让我们以一个具体的示例来说明如何使用conform函数。
假设我们有两个气象模型输出的数据集,分别是A模型和B模型。
这两个数据集的网格结构不完全一样,其中B模型的分辨率更高,而A模型的范围更广。
为了方便比较和分析这两个数据集,我们可以使用conform函数将A 模型的网格结构转换为B模型的网格结构。
首先,我们需要使用NCL中的Open函数打开A模型的数据集,并读取其中的经纬度和变量值。
接下来,我们使用conform函数将A模型的网格结构调整为B模型的网格结构。
在conform函数中,我们可以指定需要进行的调整方式,例如网格插值方式和投影方式。
一旦conform函数调整完成,我们可以使用Save函数保存调整后的数据集。
现在,我们可以使用NCL中的Open函数和conform函数分别读取B模型的数据集和调整后的A模型的数据集。
mmsegmentation work_results -回复
mmsegmentation work_results -回复mmsegmentation是一个基于PyTorch的图像分割工具集,可用于解决图像分割问题。
该工具集提供了多种先进的分割模型,以及丰富的数据增强、训练和推理的功能。
图像分割是计算机视觉领域中的一个重要任务,旨在将图像分割为具有语义意义的区域。
与图像分类任务不同,图像分割需要将图像中的每个像素分配给不同的类别,因此其难度更大。
图像分割在许多领域中都具有广泛的应用,如医学影像分析、自动驾驶、智能监控等。
mmsegmentation工具集提供了一系列经典的分割模型,例如DeepLabV3、FCN、PSPNet等。
这些模型在各个任务的数据集上都取得了良好的性能表现。
用户可以根据自己的具体需求选择合适的模型进行使用。
此外,mmsegmentation还支持使用自定义的分割模型,用户可以根据自己的需求进行模型结构的设计和修改。
在使用mmsegmentation进行图像分割任务时,首先需要准备训练数据集。
mmsegmentation提供了一个方便的数据接口,可以轻松加载各种标准数据集,如Cityscapes、PASCAL VOC、ADE20K等。
用户也可以根据自己的需求进行数据集的定制化配置。
接下来,用户需要配置模型的训练参数。
mmsegmentation提供了丰富的配置选项,包括模型结构、损失函数、优化器、学习率调度器等。
用户可以根据自己的需求对这些参数进行调整。
此外,mmsegmentation还支持分布式训练和多卡训练,可以充分利用硬件资源来加速训练过程。
在模型训练完成后,用户可以使用mmsegmentation进行推理和评估。
mmsegmentation提供了一个方便的推理接口,用户可以将需要分割的图像输入模型中,获得分割结果。
同时,mmsegmentation还提供了常用的分割评估指标,如mIoU、Dice等,用于评估模型的性能。
除了以上的基本功能,mmsegmentation还提供了一些高级功能,如混合精度训练、权重预训练、分割后处理等。
- 1、下载文档前请自行甄别文档内容的完整性,平台不提供额外的编辑、内容补充、找答案等附加服务。
- 2、"仅部分预览"的文档,不可在线预览部分如存在完整性等问题,可反馈申请退款(可完整预览的文档不适用该条件!)。
- 3、如文档侵犯您的权益,请联系客服反馈,我们会尽快为您处理(人工客服工作时间:9:00-18:30)。
报表语义模型(数据加工:返回结果集方式)数据加工方式:1.返回查询SQL ; 2.返回结果集DataSet;3.返回数据表。
实现方式基本一致,可以参照系统原有报表语义模型(抱歉不详细仅供参考)一、新建报表查询入口类,初始化报表字段1.数据加工查询业务处理接口的定义:package nc.itf.fbm.paperbill.query;import nc.pub.smart.data.DataSet;import nc.vo.pub.BusinessException;import com.ufida.dataset.IContext;/**票据信息查询/票据池额度查询接口** @author WYR* @date 2014-04-15*/public interface IFbmQueryPaperBillService {/*** 票据信息查询* @param context* @return* @throws BusinessException*/public DataSet queryPaperBillInfo(IContext context) throws Exception;/*** 票据池额度查询接口* @param context* @return* @throws BusinessException*/public DataSet queryPaperBillPoolLimit(IContext context) throws Exception;}2.数据加工入口类,初始化报表字段package nc.itf.fbm.paperbill.query;import java.util.ArrayList;import java.util.List;import mon.NCLocator;import nc.pub.smart.data.DataSet;import nc.pub.smart.metadata.DataTypeConstant;import nc.pub.smart.metadata.Field;import nc.pub.smart.metadata.MetaData;import nc.vo.obm.paperbill.query.PaperBillPoolVO;import com.ufida.dataset.IContext;/**票据池额度查询入口类** @author WYR* @date 2014-04-15*/public class QueryPaperPoolLimitService {private static final MetaData metaData;public QueryPaperPoolLimitService(){super();}/*** 获得结果集** @param context 报表界面查询传进来的参数(查询条件=值,系统一些默认参数等)* @return*/public static DataSet queryPJCAmt(IContext context)throws Exception {//调用报表查询业务处理接口,IFbmQueryPaperBillService gatherservice=(IFbmQueryPaperBillService) NCLocator.getInstance().lookup(IFbmQueryPaperBillService.class.getName());DataSet resultDataSet = gatherservice.queryPaperBillPoolLimit(context);setPrecision(resultDataSet);return resultDataSet;}//初始化报表要显示的字段,包括查询条件字段也在内static {metaData = new MetaData();List<Field> fields =makeList();//报表显示字段Field f = new Field();f.setFldname(NAME);f.setCaption("财务组织名称");f.setPrecision(200);f.setDataType(DataTypeConstant.STRING);fields.add(f);f = new Field();f.setFldname(PaperBillPoolVO.ACCTNAME);f.setCaption("机构名称");f.setPrecision(200);f.setDataType(DataTypeConstant.STRING);fields.add(f);f = new Field();f.setFldname(PaperBillPoolVO.ACCTNO);f.setCaption("账号");f.setPrecision(200);f.setDataType(DataTypeConstant.STRING);fields.add(f);f = new Field();f.setFldname(PaperBillPoolVO.PJCNO);f.setCaption("票据池编号");f.setPrecision(200);f.setDataType(DataTypeConstant.STRING);fields.add(f);f = new Field();f.setFldname(PaperBillPoolVO.PJCKAMT);f.setCaption("票据池可开票额度");f.setPrecision(17);f.setDataType(DataTypeConstant.BIGDECIMAL);f.setScale(4);fields.add(f);f = new Field();f.setFldname(PaperBillPoolVO.CUSKAMT);f.setCaption("客户剩余可开票额度");f.setPrecision(17);f.setDataType(DataTypeConstant.BIGDECIMAL);f.setScale(4);fields.add(f);f = new Field();f.setFldname(PaperBillPoolVO.CUSEAMT);f.setCaption("客户有效开票额度");f.setPrecision(17);f.setDataType(DataTypeConstant.BIGDECIMAL);f.setScale(4);fields.add(f);f = new Field();f.setFldname(PaperBillPoolVO.CORNAME);f.setCaption("分支机构名称");f.setPrecision(200);f.setDataType(DataTypeConstant.STRING); fields.add(f);f = new Field();f.setFldname(PaperBillPoolVO.CORKAMT);f.setCaption("分支机构剩余可开票额度");f.setPrecision(17);f.setDataType(DataTypeConstant.BIGDECIMAL);f.setScale(4);fields.add(f);f = new Field();f.setFldname(PaperBillPoolVO.REQRESERVED1);f.setCaption("请求备用字段1");f.setPrecision(200);f.setDataType(DataTypeConstant.STRING); fields.add(f);f = new Field();f.setFldname(PaperBillPoolVO.REQRESERVED2);f.setCaption("请求备用字段2");f.setPrecision(200);f.setDataType(DataTypeConstant.STRING); fields.add(f);f = new Field();f.setFldname(PaperBillPoolVO.REPRESERVED3);f.setCaption("响应备用字段3");f.setPrecision(200);f.setDataType(DataTypeConstant.STRING); fields.add(f);f = new Field();f.setFldname(PaperBillPoolVO.REPRESERVED4);f.setCaption("响应备用字段4");f.setPrecision(200);f.setDataType(DataTypeConstant.STRING); fields.add(f);//查询字段f = new Field();f.setFldname(PaperBillPoolVO.PK_ORG);f.setCaption("财务组织PK");f.setPrecision(200);f.setDataType(DataTypeConstant.STRING); fields.add(f);f = new Field();f.setFldname(PaperBillPoolVO.QUERY_ACCTNO);f.setCaption("账号-查询");f.setPrecision(200);f.setDataType(DataTypeConstant.STRING); fields.add(f);f = new Field();f.setFldname(PaperBillPoolVO.QUERY_PJCNO);f.setCaption("票据池编号-查询");f.setPrecision(200);f.setDataType(DataTypeConstant.STRING); fields.add(f);f = new Field();f.setFldname(PaperBillPoolVO.MFLAG);f.setCaption("是否票据池主申请账号-查询");f.setPrecision(200);f.setDataType(DataTypeConstant.STRING); fields.add(f);f = new Field();f.setFldname(PaperBillPoolVO.NEXTTAG);f.setCaption("下页标识-查询");f.setPrecision(200);f.setDataType(DataTypeConstant.STRING);fields.add(f);f = new Field();f.setFldname(PaperBillPoolVO.REQRESERVED1);f.setCaption("请求备用字段1-查询");f.setPrecision(200);f.setDataType(DataTypeConstant.STRING);fields.add(f);f = new Field();f.setFldname(PaperBillPoolVO.REQRESERVED1);f.setCaption("请求备用字段2-查询");f.setPrecision(200);f.setDataType(DataTypeConstant.STRING);fields.add(f);metaData.addField(fields.toArray(new Field[] {}));}/*** 构造list** @param <T>* @return*/public static <T> List<T> makeList() {return new ArrayList<T>();}//字符串类型字段统一设置字段长度private static void setPrecision(DataSet resultDataSet) { for (Field f : resultDataSet.getMetaData().getFields()) { if (f.getDataType() == DataTypeConstant.STRING) {f.setPrecision(300);}}}/*** 获得票据池额度元数据(相当于代码写一个元数据)** @return*/public static MetaData getPJCAmtrMetaData(){return metaData;}}二、数据加工业务处理//注意:我这个是(银企直联)NC在线查询银行数据的代码,不用完全参照//我这里就举例(票据池额度查询)package nc.impl.fbm.paperbill.query;import java.util.ArrayList;import java.util.HashMap;import java.util.List;import nc.bs.fbm.paperbill.PaperBillService;import mon.NCLocator;import nc.itf.fbm.paperbill.query.IFbmQueryPaperBillService;import nc.itf.fbm.paperbill.query.QueryPaperBillInfoService;import nc.itf.fbm.paperbill.query.QueryPaperPoolLimitService;import nc.itf.obm.paperbill.query.IObmQueryPaperBillService;import nc.pub.smart.data.DataSet;import nc.pub.smart.metadata.Field;import nc.pub.smart.metadata.MetaData;import nc.vo.fbm.paperbill.constant.PaperBillFbmOrderType;import nc.vo.obm.paperbill.constant.PaperBillObmConstant;import nc.vo.obm.paperbill.query.PaperBillInfoVO;import nc.vo.obm.paperbill.query.PaperBillPoolVO;import nc.vo.pub.BusinessException;import nc.vo.pub.query.ConditionVO;import com.ufida.dataset.IContext;import com.ufida.report.anareport.FreeReportContextKey;/**票据信息查询/票据池额度查询接口实现类** @author WYR* @date 2014-04-15*/public class FbmQueryPaperBillServiceImpl extends PaperBillService implements IFbmQueryPaperBillService{private IObmQueryPaperBillService iObmQueryPaperBillService;//这一步可以不需要去理解,当不存在就可以了private static String billfunc= PaperBillObmConstant.PAPERQUERY;/*** 票据池额度查询* @param context* @return* @throws BusinessException*/@Overridepublic DataSet queryPaperBillPoolLimit(IContext context) throws Exception {//获取查询条件值ConditionVO[] conditionvos=(ConditionVO[]) context.getAttribute(FreeReportContextKey.KEY_REPORT_QUERYCONDITIONVOS);DataSet resultDataSet = new DataSet();HashMap<String,String> hashmap=new HashMap<String, String>();//获取查询条件(key,值)对应if(conditionvos!=null&&conditionvos.length>0){//执行了查询for(ConditionVO conditionvo: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*///组装发送指令VOPaperBillPoolVOpoolvo=(PaperBillPoolVO)abstractBankInfo.getQueryBankHandlerClass(abstractBankInfo).chan geQueryPaperBillPoolVO(hashmap);//查询条件值可能要先暂存,待返回数据集再把对应查询条件值设值回去,不然查不出数据//也就是查询条件是什么值,最终结果集对应的查询字段值也必须是什么值//看需求,报表字段有的时候需要建两种,一种是查询,一种是显示结果,进行分开//这一步是报表数据逻辑处理//发送查询指令业务接口PaperBillPoolVO[] paperBillPoolVOs = null;paperBillPoolVOs=getiObmQueryPaperBillService().queryPaperBillPoolLimit(new PaperBillPoolVO[]{poolvo});//获取报表查询条件之后经过一些业务处理后返回的最终结果数据//接收发送指令返回数据,进行数据转换,返回报表界面//把处理好的结果,可以是返回ArrayList或者对象数组PaperBillPoolVO[]resultDataSet =getPjcAmtRstProcessData(paperBillPoolVOs); //结果转换成DataSet }else{//没有执行查询MetaData metaData = QueryPaperPoolLimitService.getPJCAmtrMetaData();resultDataSet.setMetaData(metaData);}return resultDataSet;}//下面就是把转换成报表显示数据DataSet格式,这里是固定的换个VO就能用/*** 票据池额度查询* 银行返回的指令VO数据*转换成报表显示数据DataSet*@author WYR*@date 2014-4-17*@param paperBillPoolVOs*@return* @throws BusinessException*/public DataSet getPjcAmtRstProcessData(PaperBillPoolVO[] paperBillPoolVOs)throws BusinessException{DataSet resultDataSet = new DataSet();MetaData metaData = QueryPaperPoolLimitService.getPJCAmtrMetaData();resultDataSet.setMetaData(metaData);if (paperBillPoolVOs == null || paperBillPoolVOs.length== 0) {return resultDataSet;}Field[] fields = metaData.getFields();List<Object[]> reportList = new ArrayList<Object[]>();for (PaperBillPoolVO vo : paperBillPoolVOs) {if(vo==null){continue;}Object[] rowData = new Object[fields.length];for (int k = 0; k < fields.length; k++) {String fldName = fields[k].getFldname();rowData[k] = vo.getAttributeValue(fldName);}reportList.add(rowData);}resultDataSet.setDatas(reportList.toArray(new Object[0][fields.length]));return resultDataSet;}//从这里到最后面的代码不用去理会了/*** @param iObmQueryPaperBillService 要设置的iObmQueryPaperBillService*/public void setiObmQueryPaperBillService(IObmQueryPaperBillService iObmQueryPaperBillService) {this.iObmQueryPaperBillService = iObmQueryPaperBillService;}/*** @return iObmQueryPaperBillService*/public IObmQueryPaperBillService getiObmQueryPaperBillService() {if(iObmQueryPaperBillService==null){iObmQueryPaperBillService=NCLocator.getInstance().lookup(IObmQueryPaperBillService. class);}return iObmQueryPaperBillService;}//根据银行账户子户PK获取银行代码,如:工商银行00015 icbcpublic String getbanktype (String banktype) throws BusinessException{String nbanktype=banktype;if(nbanktype!=null){if(nbanktype.indexOf(",")!=-1){throw new BusinessException("[账号]不能多选!");}nbanktype=getPaperBillHandler().getNetbankinftpCodeByAccount(nbanktype);return nbanktype;}return null;}}三、语义模型-XX(预置、集团、全局)设置1.新建一个语义模型文件,来到【语义模型设计器】界面,第一步“选择表”。