NC数据加工做语义模型(DOC)
- 格式:doc
- 大小:523.50 KB
- 文档页数:16
数控装备工业互联通讯协议(NC-Link) 及应用简单高效、自主可控、异构工控设备互联互通引言:武汉华中数控股份有限公司(以下简称“华中数控”)是我国数控系统行业的首家上市公司,是首批国家级“创新企业”、全国机械工业先进集体,并于2016 年成为工信部指定的首批智能制造产品供应商。
在2016 年国家工信部智能制造综合标准化与新模式应用项目的推动下,华中数控牵头成立了“数控机床互联通讯协议标准与试验验证”项目,旨在突破互联协议的参考模型、数据规范、接口规范、安全性和评价标准等关键技术,建立统一的数控机床互联互通协议标准(NC-Link),实现多源异构数据采集、集成、处理、分析和反馈控制。
项目的实施在数控机床互联互通技术上,有效缩短我国与国外的差距,降低国产异构数控机床的整合难度,提升国产数控装备的竞争力,对中国制造业的智能化转型升级具备巨大的推动作用。
NC-Link 具备完全自主可控的软硬件技术,在我国国防安全方面具有重大意义。
一、项目概况1.项目背景随着德国“工业4.0”、美国“互联网+”计划、以及中国“智能制造2025”的推进与实施,发展智能制造已经上升为国家战略。
智能制造的实质是以数据驱动的全方位的数字化,关键基础是数控机床(包括机器人、量仪、传感器等)的智能互联互通。
但是,国内外主流数控系统大多数都是封闭专用的系统,具备特有的外部通讯接口与协议。
为推进数控机床的互联互通,国外已推出MTConnect 协议和OPC UA 协议,而我国在2016 年还没有统一的数控机床互联互通协议标准,数控机床和相关装备之间信息沟通不畅,对我国智能制造的发展造成了极大的阻碍,当时国内基本上所有的企业在进行智能工厂升级的时候都遇到相同的问题:如何将多种设备连接在一起,协同运作。
为解决我国异构工控设备互联互通的难题,2016 年 5 月17 日,华中数控联合其他14 家企事业单位、研究机构与高校成立数控机床互联通讯协议标准联盟,联盟的宗旨是:整合行业内优势企业和研究机构的技术资源,围绕智能制造的需求,制定具有国际先进水平的数控机床互联通讯协议标准,并加以验证与推广。
供应链
资产管理
人力资本
企业协同管理
销售管理与内部交易、销售价格、销售信用等管理组成集团销售分销解决方案,是集团销售分销解决方案的核心
内部交易与销售管理、采购管理、库存管理等组成集团销售分销解决方案,是集团销售分销解决方案的核心组成
质量管理通过灵活的质检流程配置及业务流程配置,支持大型集团企业多组织、多元化经营下,多种质检业务处通过电子采购后台,集团企业可以实现从需求采集、立项编制方案、方案执行、到交易的一个完整采购流程的处
人员信息管理为企业人力资源管理的重要部分,为企业人事管理提供标准、灵活的功能,以提高人事管理效率,
人员合同管理用于管理用人单位与劳动者之间签订的各类合同和协议,包括劳动合同、岗位协议、保密协议、培
员工自助是人力资本管理全员应用的重要组成部分,员工可通过员工自助完成一系列人力资本管理的业务,例如:提交各类申请;进行个人信息、工资信息、合同信息等查询业务;进行PBC的填报、进行考核评分等。
具体包括如下重要功能:
可通过自助提交的申请包括:时间管理中的签卡申请、休假申请、加班申请、出差申请;人员变动管理中的转正申请、调配申请、离职申请;招聘管理中的内聘职位申请、录用申请等。
组织发布的内聘信息、培训报名信息均可在员工自助当中查询,员工可通过自助直接进行内聘申请或培训报名。
可查询的数据包括:个人信息、合同信息、考勤信息、工资信息、能力素质信息。
可处理的业务包括:PBC填报、PBC审核、考核评分、考核结果审核等业务,绩效管理的多数业务是通。
语言建模和语义建模的介绍
语言建模和语义建模是自然语言处理领域中重要的概念,它们
在文本生成、语言理解和机器翻译等任务中起着关键作用。
首先,让我们来看一下语言建模。
语言建模是指根据已有的文
本数据,训练模型来预测下一个单词或字符的概率分布。
这种模型
可以是统计模型,也可以是基于神经网络的模型。
语言建模的目标
是捕捉语言的统计规律,使得模型能够生成具有语言风格的文本,
同时也可以用于语音识别、拼写检查和机器翻译等任务。
接下来,我们来谈谈语义建模。
语义建模关注的是语言中的含
义和语境。
它致力于将自然语言转化为计算机可以理解和处理的形式,以便进行语义分析、信息检索和问答系统等任务。
语义建模的
方法包括词嵌入(Word Embedding)、句子嵌入(Sentence Embedding)和语义表示学习(Semantic Representation Learning),这些方法可以帮助计算机更好地理解和处理自然语言。
总的来说,语言建模和语义建模在自然语言处理中扮演着不可
或缺的角色。
语言建模关注语言的统计规律和生成能力,而语义建
模则关注语言的含义和语境,帮助计算机更好地理解和处理自然语
言。
这两者的结合可以为文本生成、语言理解和机器翻译等任务提供强大的支持。
基于STEP-NC的数字化设计和制造喻佩佩(常州铁道高等职业技术学校江苏常州 213011)摘要:随着制造技术的飞速发展,对于CNC的要求越来越高,传统的G/M代码已经成为现代先进制造技术的瓶颈。
而基于STEP标准的STEP-NC将为现代CNC的高速和高精度加工提供条件。
关键词:STEP-NC;CAD/CAM;数字化制造1:当前NC系统面临的问题:自1952年世界上的第一台数控机床在美国MIT诞生以来,数控技术得到迅猛的发展,由初期的晶体管分立元件系统发展到了今天基于PC的开放式计算机数控系统。
尽管近年来硬件技术和软件技术的飞速发展给CNC的高速和高精度加工提供了保证,但由于目前在工业化应用中的NC所采用的编程方式还是基于50多年前开发的ISO6983(G/M代码)标准。
这种代码仅包括一些简单的运动指令和辅助指令,而不包含零件几何形状、刀具路径生成、刀具选择等信息,因此需人工干预确定这些数据,导致编程效率低等问题。
随着计算机辅助系统CAX技术、系统集成技术等的飞速发展和广泛应用,该标准已成为制约数控技术乃至自动化制造发展过程中的瓶颈问题。
2:STEP和CAD/CAM的集成:自上个世纪80年代以来,人们已开始通过采用统一的数据模型STEP(ISO10303)标准来实现CAD/CAM系统间的集成。
STEP标准中的应用协议AP203通过边界描述来定义零件实体模型,CAM系统通过读取CAD系统生成的AP203文件获取零件的信息内容,运用工艺设计知识,设计合理的加工工艺,选择优化的加工参数和加工设备,自动生成零件的NC加工程序。
3:STEP-NC的研究现状:虽然采用STEP标准实现了CAD/CAM间的产品数据共享,但是传输到CNC仍是单向流动,制造过程中下游的信息不能反馈给上游,而STEP-NC的出现和基于STEP-NC/STEP的全零件信息建模为系统集成提供了一条有效的途径,它是一个面向对象的新型NC编程数据接口国际标准(ISO 14649),包括13个部分,分3个阶段发布,目前已发布有:基本概念和原理规则、通用标准、数控铣削加工工艺、铣削刀具等几个部分。
语义关联模型1. 引言语义关联模型是自然语言处理(Natural Language Processing, NLP)中的一个重要任务,旨在判断两个句子之间的语义关系。
在计算机科学领域中,语义关联模型被广泛应用于问答系统、信息检索、机器翻译等任务中。
本文将从定义、应用、模型和评估等方面对语义关联模型进行全面详细的介绍。
2. 定义语义关联模型是指通过计算两个句子之间的相似度或相关性来判断它们之间的语义关系。
语义关联模型的输入通常是两个句子,输出是一个表示语义关系的分数或标签。
语义关系可以分为多种类型,例如同义关系、蕴含关系、矛盾关系等。
3. 应用语义关联模型在自然语言处理中有着广泛的应用。
3.1 问答系统问答系统是指通过计算机程序回答用户提出的问题。
在问答系统中,语义关联模型可以用于判断用户问题与已有问题的相似度,从而找到与用户问题最相似的已有问题的答案。
3.2 信息检索信息检索是指通过计算机程序从大量的文本中找到与用户查询相关的文档。
语义关联模型可以用于计算查询与文档之间的相似度,从而提高信息检索的准确性和效率。
3.3 机器翻译机器翻译是指通过计算机程序将一种语言的文本转换为另一种语言的文本。
语义关联模型可以用于判断源语言句子与目标语言句子之间的语义关系,从而提高翻译的质量。
4. 模型语义关联模型可以基于传统的机器学习方法或深度学习方法进行建模。
4.1 传统机器学习方法传统机器学习方法中常用的特征包括词袋模型、TF-IDF、Word2Vec等。
这些特征可以表示句子的语义信息。
传统机器学习方法通常使用支持向量机(SupportVector Machine, SVM)、随机森林(Random Forest)等算法进行分类或回归。
4.2 深度学习方法深度学习方法在语义关联模型中取得了显著的成果。
常用的深度学习模型包括卷积神经网络(Convolutional Neural Network, CNN)、循环神经网络(Recurrent Neural Network, RNN)和Transformer等。
语义数据建模语义数据建模是指将语义信息进行抽象和描述,将其转化为计算机可处理的数据模型的过程,其目的是为了更好地支持语义搜索、数据挖掘、自然语言处理等应用。
语义数据建模的关键在于如何统一地表示复杂的语义关系,以及如何将这些关系转化为计算机可处理的形式。
语义数据建模涉及到多个方面的知识,如本体论、认知语言学、领域知识、数据库等。
其中,本体论是语义数据建模的核心理论,它提供了一个形式化的描述语义知识的工具。
通过本体,我们可以描述实体、关系、属性等概念,在构建语义数据模型时,本体提供了统一的元语言和命名空间,保证了不同领域和不同组织之间的语义相容性和互操作性。
在语义数据建模中,常用的本体语言包括OWL、RDF/S、RDFS等。
不同的本体语言具有不同的优缺点,在选择本体语言时需要考虑应用的需求、本体库的复杂程度、以及本体的可扩展性等因素。
语义数据建模的过程一般包括以下几个步骤:1. 定义本体本体是语义数据建模的基础,它描述了实体、关系、属性等语义概念。
本体的定义应该清晰、准确、可重用。
在定义本体时,需要考虑应用场景、数据源、模型的粒度等因素。
2. 构建本体库本体库是组织和管理本体的系统,它包含了一组本体、实例数据以及推理规则等。
本体库可以被多个应用程序和系统共享,从而实现语义数据的互操作性。
3. 实例化本体实例化本体是将抽象的本体概念具体化,生成实例数据的过程。
实例数据是语义数据建模的核心,它描述了真实世界中的实体、关系和属性等。
实例化本体的过程需要考虑数据来源、数据结构、数据粒度等因素。
4. 推理推理是语义数据建模的关键环节,它基于本体和实例数据推导出新的语义关系。
推理可以使得语义数据更加精细化、一致化、准确化,进而增强语义数据的应用能力。
5. 应用语义数据建模的最终目的是为应用程序和系统提供语义数据支持,解决数据集成、数据查询、知识发现等问题。
应用方面的需求将决定语义数据建模的粒度、丰富度和实时性等。
常用的语义模型
语义模型通常用于自然语言处理和文本分析,以理解、解释和生成人类语言。
以下是一些常用的语义模型:
1. **词袋模型**:这是一种简单的语义模型,它将文本视为单词的集合,并使用每个单词作为特征。
2. **TF-IDF模型**:这是一种基于词袋模型的改进,通过计算每个单词的频率和逆文档频率来反映单词在文档中的重要性。
3. **Word2Vec模型**:这种模型通过训练神经网络来预测单词之间的上下文关系,从而学习单词的向量表示。
4. **BERT模型**:BERT是一种预训练的深度双向Transformer模型,能够理解和生成自然语言的文本。
5. **GPT模型**:GPT是自然语言处理领域中的一种生成式预训练模型,可以生成连贯的自然语言文本。
6. **图神经网络(GNNs)**:这是一种用于处理图结构数据的神经网络,可以将文本表示为图的节点和边,并学习节点之间的语义关系。
7. **主题模型**:如LDA(潜在狄利克雷分配)等主题模型可以帮助识别文本集中的主题或概念。
8. **语义角色标注**:这种方法用于理解句子中单词之间的语义关系,如主语、谓语、宾语等。
9. **概念向量**:这种方法将概念(通常是词或短语)表示为高维向量,以便于计算它们之间的相似性和关系。
10. **知识图谱**:这是一种用于表示实体、属性和它们之间关系的
语义模型,常用于构建大规模知识库。
以上信息仅供参考,如需了解更多信息,建议查阅计算机科学和人工智能领域的专业书籍或咨询该领域专家。
报表语义模型(数据加工:返回结果集方式)数据加工方式: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.新建一个语义模型文件,来到【语义模型设计器】界面,第一步“选择表”。
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没有此步骤。
报表语义模型(数据加工:返回结果集方式)数据加工方式: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.新建一个语义模型文件,来到【语义模型设计器】界面,第一步“选择表”。