产品数据管理PDM系统的实现

发布时间:18-06-07

产品数据管理PDM系统的实现

    在经过业务调研,系统的需求分析,技术架构、功能架构以及数据库的设计,最后对系统进行了编码实现,经过单元测试和集成测试后交付部署,运行情况良好。下面对系统的主要功能的实现进行介绍。
 
1.1系统总体实现
    系统的实现基于J2EE平台,对应前面系统软件体系结构设计中的三层架构方式,系统在编写程序代码时也遵循三层架构的模式,即Web展现层、业务逻辑层和数据访问控制层。以分层的方式实现代码,主要目的是对软件代码进行一个纵向划分,隔离每个层的代码实现,各层代码通过API接口调用的方式交互数据,分层实现有助于降低复杂程序之间的祸合性,以达到软件‘高内聚,低祸合”的目的,下面对软件的总体流程实现和代码分层实现分别进行说明。
 
1.1.1总体流程实现
    基于B/S架构实现的系统的特点是,前台用户展现是通过浏览器HTML页面完成的,HTML在展现系统数据的同时,还可以通过FORM表单收集用户提交的数据。当用户将FORM表单中的数据提交后,后端服务器的Java Servlet程序获取到用户提交的数据,并组装成JavaBean对象,然后交给Service层业务对象进行处理。Service层对象实现业务逻辑,业务计算后调用数据层的DAO对象访问数据库,读写数据并进行必要的事务处理,最终将数据保存到RDBMS数据库中,系统总体流程示意图如图4-1所示。

    如图4-1所示,用户通过浏览器进行的每一个查询或提交数据都要遵循上面的流程,各个模块的业务功能实现都是采用这种统一的模式,只是每个业务的页面URL,Service对象的逻辑和DAO对应的数据库表名等有所不同而己,所有层的对象都通过Spring容器进行统一的配置管理。
 
1.1.2软件分层实现
      通过分层实现可以使软件结构变得清晰和更具扩展性,下面对Web展现层、业务逻辑层和数据访问层的主要功能实现进行简要说明。
    Web层实现基于Struts2框架,框架通过配置不同的Action来接收处理用户提交的表单数据,对Action可以配置流程处理成功或失败的视图页面。另外,基于Struts2框架提供的扩展机制,通过配置拦截器实现用户Session控制和文件上传下载等功能
 
    业务逻辑层的Service对象通常是无状态的对象,其通过依赖DAO对象完成对数据库的读写及事务控制逻辑。对于DAO层对象,采用iBatis框架完成数据库表和JavaBean之间的映射。在DAO对象连接数据库时,需要为其提供用于连接数据库的数据源对象,包括数据库服务器连接地址、用户名和密码等参数。而为了提高数据库的读写性能,需要配置一个数据库连接池,通过数据库连接池得到数据源对象。对于事务处理,使用Spring框架提供的事务管理器和事务模板,并结合Spring AOP功能实现事务处理的自动代理,简化程序代码
1.2主要功能的实现
    本节对系统登录、系统管理、工程变更管理、图纸发行管理、通知书会签管理和基础数据维护每个模块的功能实现分别进行说明。
1.2.1登录
    在用户进入本系统时,输入用户名和用户密码进行登录,程序根据用户用户名检测该用户的用户权限,以确定用户所能进入的管理模块。程序实现的流程如图4-2所示。登陆后系统的主界面实现如图4-3所示。


1.2.2系统管理
    系统根据完成功能需要的操作流程,动态管理每个阶段任务的执行者,对人员的角色进行授权,每一个用户可参与多个操作流程的任务,用户授权根据所担任的角色对产品数据具有不同的操作权限。根据操作流程来安排任务、分配角色、设置人员权限使得管理和实现上更为容易和方便。产品数据实现了共享,同时也带来了数据安全的问题,本系统通过角色管理、科室管理、用户管理及人员权限管理对访问产品数据进行控制,通过日志管理对人员的操作信息进行记录,从而确保了数据的安全性。
    1)对角色设计权限
    基于产品的设计发行流程,产品数据管理的任务是分阶段进行的,各类人员对数据具有不同的操作权限。根据职责的不同和使用产品数据目的的不同,每个访问数据的人,对产品数据的操作都不一样,因此权限管理要根据用户分配的任务及职责还有他使用产品数据的目的定制有关的权限,给予角色对应的操作范围,设置时只需在所要的权限旁打勾即可,可以对角色进行新增、查询、修改、删除操作。用户角色的权限设计界面如图4-4所示。

    2)用户角色分配
    对每一个具体用户进行角色的分配,使用户根据自身角色对数据具有不同的操作权限,通过角色与用户的一一对应,可以方便地管理系统的权限,保证系统的安全。用户角色分配的界面实现如图4-5所示。

    3)日志管理
    在企业的运行中,可能会有一些工作人员对数据进行恶意破坏,为了有限记录下这种破坏,特意设计了日志管理的功能。日志管理对于一个系统而言非常重要,从用户进入系统到离开系统,它记录下使用系统的每个用户在权限范围内所做的每步操作,系统管理员对系统日志所做的记录是无法修改的,因此只要通过查询操作日志的记录就能得到进行恶意破坏或者误操作的用户和操作的时间,根据记录给予相应的处理措施。用户日志管理功能的界面实现如图4-6所示。
 
1.2.3工程变更管理
    工程变更管理主要是对规格更改的管理,包括规格更改文件上传、规格更改通知书做成、规格更改文件审批和规格更改通知管理查询等,下面对几个主要功能实现进行说明。
    1)规格更改文件审批
    规格更改发起科室通过系统上传规格更改文件,规格更改文件是Excel文件,文件中包括规格更改所需的项目,填好后通过浏览器上传到系统。后台得到上传的规格更改Excel文件后,并不能直接对文件进行审批操作,而是解析里面的数据并保存到数据库中,然后建立与规格变更通知书关联的表来保存审批状态等数据。通过数据库就可以方便地对规格变更进行审批和发行等操作,并可以根据各种条件查询数据并通过页面进行展现,规格更改文件查询和审批功能的实现界面如图4-7所示。

    如图4-7所示,规格更改文件查询和审批在同一个页面上实现,上面是一个组合条件查询区域,可以根据通知书号、版本号、机种、等级和时间范围来组合查询,下方通过列表展示查询待审批的规格更改文件。通过复选框和审批按钮结合的方式提供审批的功能,提高了审核人员的工作效率。针对一个规格更改文件的审核包括三种,即申请审批、法规审批和发行审批,上面描述的是申请本身的审批,其他两步审批的实现功能和界面的方式类似。
 
    2)规格更改通知管理表查询
    在规格更改完成审批并发行后,将规格更改通知书信息和审批发行信息记录到规格更改通知管理表中,并可以根据通知书号、版本号和受领时间范围来查询,规格更改通知管理表查询的界面实现如图4-8所示。

    如图4-8所示,规格变更通知管理表不但可以根据组合条件进行查询,还具有查询结果导出功能,点击[导出]按钮可将产品技术通知书管理表查询列表导出成EXCEL文件,方便阅览统计。
 
1.2.4图纸发行管理
    图纸发行管理实现包括对产品图纸申请、产品图纸申请审批、产品图纸申请报表、己发行图纸查询、图纸依赖书查询和现有图纸清单维护等功能的实现,对其主要功能的实现描述如下。
 
    1)产品图纸申请
产品图纸申请通过上传Excel文件完成,Excel文件需要使用固定的图纸申请模板,按照模板填写申请数据后,浏览选择文件并上传到服务器。产品图纸申请上传的实现界面如图4-9所示。

 
    2)产品图纸申请审批
    产品图纸申请书上传成功后,需要对申请书进行审批,审批需要申请科室和QP科室都进行审批。对产品图纸申请进行审批时,可以根据组合条件查询待审批的申请,然后对查询结果进行审批,该功能的具体实现结果如图4-10所示。

 
    如图4-10所示,界面实现包含两个部分,上面是一个组合条件查询区域,可以根据图纸号、机种、类型、供应商和上传时间范围等条件查询,查询得到的产品图纸申请在下方通过表格进行展现。每条图纸申请数据前面都配有复选框,勾选复选框可以对申请数据进行批量审批。同样,产品图纸申请也具有将查询结果列表导出为Excel报表文件的功能。
 
1.2.5通知书会签管理
    通知书会签管理实现主要包括产品技术通知书作成、产品技术通知书会签、产品技术通知书审批和发行管理表查询等功能,对其主要功能的实现描述如下。
    1)产品技术通知书管理表查询
    起票科室上传产品技术通知书和相关附件,并填写本科室会签人员和其他科室会签人员,由起票科室和相关科室会签人进行会签和审批,审批通过后将产品技术通知书信息记录到产品技术通知书管理表中,记录发行科室和发行时间,然后通过前台页面对产品技术通知书管理表进行查询浏览和报表导出,具体实现界面如图4-11所示。

 
    如图4-11所示,产品技术通知书查询和导出功能在同一个页面上实现,上面是一个组合条件查询区域,可以根据通知书号和发行日期范围来组合查询,下方通过列表展示查询得到的结果列表,包括通知书名称、适用车型、发行科室和发行日期等信息。点击[导出]按钮可将产品技术通知书管理表的查询列表导出成EXCEL文件,导出结果界面如图4-12所示。

1.2.6基础数据维护
    基础数据维护功能包括机种维护、阶段维护和级别维护,三种基础数据具有相同的数据结构和形式,因此实现的方式比较类似。每种数据的维护管理都具有基本的新增、查询、修改和删除的功能。其中机种维护功能的实现如图4-13和4-14所示,前者为机种数据的新增功能,后者为机种数据的查询、修改和删除。

1.3关键问题分析及解决
1.3.1 Excel文档解析
    在系统的工程变更管理、图纸发行管理和通知书会签管理三个功能中,业务逻辑处理的主要核心数据就是Excel文档,每个功能的业务流程都是通过上传Excel文档开始的,因为Excel作为一个企业在日常办公中广泛使用的工具,具有很强大的文档处理和数据统计的功能。为了适应企业现行办公使用数据的方式,系统需求在设计时需要将企业己有Excel形式的文档和新系统做对接,所以这就要求系统必须具备解析和处理业务Excel文件的功能。例如,工程变更管理中的规格变更通知书和产品图纸申请书就是企业现有的业务文件,系统需要对这些文件进行处理。
 
    在Java开源领域,解析Excel文件最常用的组件是Apache POI。Apache POI是Apache软件基金会的开放源码组件,POI提供API给Java程序对Microsoft Office格式文档的读和写的功能,其中就包括对Microsoft Excel文档的解析,而且完全适用于多个不同版本的 Excel。
 
    系统在对Apache POI的使用上,既运用了POI读取解析Excel文档的功能,也用到了通过程序生成Excel文档的功能。例如产品图纸申请维护功能中,需要上传企业产品图纸申请表模板,该模板就是一个Excel表格形式的文件,一个产品图纸申请书的Excel表格文档结构如图4-15所示。

如图4-15所示,后台程序在得到用户上传的己填好的产品图纸申请表,需要对其中的表格数据进行提取。程序使用Apache POI组件对表格数据解析,逐步读取表格的每行每列的数据,并组装成业务对应的JavaBean对象,最终通过Service接口将解析得到的数据保存到数据库的产品图纸申请表中,完成产品图纸申请表的解析入库的操作,该部分功能的主要实现代码如下。
// Excel文件取得
POIFSFileSystem file=new POIFSFileSystem(new FileInputStream(
        fileDirecotryPath));
// Excel工作簿取得
HSSFWorkbook book=new HSSFWorkbook(file);
// Excel表sheet取得
HSSFSheet sheetl=book.getSheetAt(0);
HSSFRow titleRow=sheetl .getRow(4);
//开始循环sheet中所有行
for(int i=5;i<=aheetl.ged,astRowNumQ; i++){
    //产品图纸申请Bean
    ProdPaperApply prodPaperApply=new ProdPaperApply();
    //取得Excel行
    HSSFRow row=sheetl.getRow(i);
    //起始列索引
      int colIndex=1;
    //行数据是否为空判断
    //规格更改号取得
    HSSFCell cell=row.getCell(colIndex++);
    prodPaperApply.setSpecChgNo(" ");
    //图纸号取得
    cell=row.getCell(colIndex++);
    prodPaperApply. setPaperNo(cell. toS tringQ. trim());
    //图纸名称取得
    cell=row.getCell(colIndex++);
    prodPaperApply. setPaperName(cell. toS tringQ. trimQ) ;
    //图幅取得
    cell=row.getCell(colIndex++);
    prodPaperApply. setPicS ize(ExcelOperHelpler.getCelV alue(cell)) ;
    //类型取得
    cell=row.getCell(colIndex++);
    prodPaperApply.setType(cell.toS tring().trim());
    //申请科室取得
prodPaperApply. setApplyDept(this.getV istor().getDepartment()) ;
//申请理由取得
cell=row.getCell(colIndex++);
prodPaperApply. setApplyReason(cell. toS tring(). trim());
//机种取得
cell=row.getCell(colIndex++);
prodPaperApply. setModel(cell. toS tring(). trim());
//设置图纸申请状态
prodPaperApply.setApplyStatus("01 ");
//设置创建用户
prodPaperApply.setCreateUser(this.getVistor().getUserCode());
prodPaperApplys.add(prodPaperApply);
 
1.3.2定时任务处理
    在系统的业务功能中,有些流程或任务不是通过用户操作触发的,而是异步的根据需求在某个时间点或时间段由系统自动执行,即定时执行任务,由操作系统时钟触发。例如,在规格更改文件合并功能中,在规格更改审批通过并成功发行之后,需要对在整个规格更改处理流程中产生的文件进行合并,包括规格更改通知书说明(EXCEL)、规格更改通知书(TIF)和规格更改通知附表(PDF,文件名以BOM开头)等文件,所有文件需要合并成一个PDF文件。
 
    由于文件合并操作消耗的时间比较长,而且不需要立刻完成,因此采用在每天夜间22:00批处理自动合并的方式实现。同样还有,在产品图纸申请功能中,审批通过后的图纸申请状态为“己发行”,系统在每天夜间22:00将当天所有审批通过的图纸申请汇入当天的己发行图纸清单中,对于这些功能,需要一种定时触发的机制来实现。JDK中自带了一种原生的定时器类,可以设置每隔多长时间自动重复执行一个任务,但是其实现比较简单,不具备设定具体时间点触发执行的功能,因此需要一个能够实现定时调度任务的框架。
 
    系统采用Quartz来解决这个问题,Quartz是一个开源的任务调度框架,它完全由Java编写,被设计用于J2SE和J2EE应用中,它提供了巨大的灵活性而又不牺牲简单性,能够用来为执行一个任务而创建简单的或复杂的调度。
 
    Quartz中一个最重要的概念就是Cron表达式,其利用Cron表达式来定义任务启动的时间。一个Quartz的Cron表达式是一个由6或7个字段组合而成的字符串,字段之间用空格符分隔,其字段说明如表4-1所示。
 
    在Cron表达式中,哪个字段上配置了值,就表明任务会在这个时间单位上按照所配置的值自动执行,其中特殊字符“*”代表该时间单位在所有可能的值上触发执行,“?”字符仅被用于天(月)和天(星期)两个子表达式,表示不指定值。例如,表达式01510?**表示在每
天10:15时触发执行。
 
    系统在实现需要定时调度任务的功能时,都是采用Quartz架提供了对Quartz的支持,本系统中的几个定时调度任务功能,式的方式实现如下所示。
来实现的,Spring框
通过配置Cron表达
a)己发行图纸清单批处理操作,01022**?*,每天22: 10触发执行;
b)部品表导入功能,03410**?*,每天10: 34触发执行;
c)己发行规格更改的文件合并,0 29 13**?*,每天13: 29触发执行;
d)产品技术通知书文件合并,0022**?*,每天22: 00触发执行;
e)科室落点判定操作,01310**?*,每天10: 13触发执行。


本文为御云清软英泰PLM软件原创文章,如想转载,请注明原文网址
http://www.plmsoft.com.cn/news/gsxw/165.html;否则,禁止转载;谢谢配合!