NC6X报表数据加工做语义模型(返回DataSet篇)

合集下载

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.新建一个语义模型文件,来到【语义模型设计器】界面,第一步“选择表”。

ncc 模板匹配算法 -回复

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)和指令模型(instruction models)是常见的两种模型类型。

它们在机器学习任务中有不同的使用方式和作用。

首先,让我们来了解基础模型(base models)。

基础模型是机器学习中最基本和最简单的模型类型,通常是在没有任何先验知识或指导下构建的。

基础模型不依赖任何特定任务中的规则或指示,而是依靠大量的数据进行模型训练和学习。

这种模型的主要任务是从数据中学习模式、规律和关联性,并根据这些学习到的模式生成预测结果。

基础模型可以采用多种机器学习方法,包括传统的统计学习方法(例如线性回归、逻辑回归、决策树等)和现代的深度学习方法(例如神经网络)。

无论采用哪种方法,基础模型通常具有较低的复杂度和灵活性,但其训练和预测过程较为简单和高效。

基础模型在机器学习中扮演着重要的角色。

首先,它们经常被用作基准(baseline)模型,用于评估和比较其他更复杂或改进的模型。

通过建立一个基本模型并对其结果进行评估,我们可以确定其他模型相对于基准模型的性能改进程度。

其次,基础模型可以作为整个机器学习流程中的一个组成部分,用来构建更复杂的模型或进行模型集成。

然而,基础模型也有其局限性。

由于其对数据的学习是基于数据本身而没有任何先验知识,它们可能无法捕捉到一些特定任务中的关键规则和指示。

这就引出了指令模型(instruction models)的概念。

指令模型在机器学习中是一类特殊的模型,其使用指示、规则或先验知识来帮助模型进行训练和预测。

这些指令可以是人工设计的规则,也可以是由领域专家提供的先验知识。

指令模型的核心思想是在模型中引入外部知识,从而改善模型的学习和预测能力。

完整word版,NC数据加工做语义模型

完整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完整版发版说明

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篇)

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报表业务
  1. 1、下载文档前请自行甄别文档内容的完整性,平台不提供额外的编辑、内容补充、找答案等附加服务。
  2. 2、"仅部分预览"的文档,不可在线预览部分如存在完整性等问题,可反馈申请退款(可完整预览的文档不适用该条件!)。
  3. 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.新建一个语义模型文件,来到【语义模型设计器】界面,第一步“选择表”。

相关文档
最新文档