1、详细设计文档详细设计文档文档编号 V1.0 版本 密级 研发生产中心 项目名称 报表审批发布功能 项目来源 报表审批发布功能 详细设计说明书 2011-03-26 编 写: 范屹 日 期: 检 查: 日 期: 审 核: 日 期: 批 准: 日 期: 版权所有 不得复制 文档变更记录 序号 变更(+/-)说明 作者 版本号 日期 批准 1 新建文档 范屹 V1.0 2011-03-26 2 1. 引言. 4 1.1 编写目的和范围 . 4 1.2 术语表. 4 1.3 使用的文字处理和绘图工具 . 4 1.4 定义. 4 1.5 BI系统总体架构(基于已有的BI系统上进行开发) . 4 2. 模
2、块设计. 6 2.1 用例图. 6 2.2 功能设计说明 . 8 3. 数据库设计 . 30 . 30 3.1 表.3.2 视图. 32 4. 系统出错处理 . 34 1. 引言 1.1 编写目的和范围 企业内部的各类报表指标为是需要上报给上级领导进行查看,企业的掌舵者对企业将来发展的决策都是根据这些报表指标来进行的,尤其是企业内部的财务和资金数据更不能有一丝一毫的偏差。因此这些指标数据如果发生错误,将会对企业将来的发展造成很大影响,所以对于此类数据,需要通过层层审批、确认正确后才能进行展示。 本详细设计说明书编写的目的是说明程序模块的设计考虑,包括程序描述、输入/输出、算法和流程逻辑等,为软
3、件编程和系统维护提供基础。本说明书的预期读者为系统设计人员、软件开发人员、软件测试人员和项目评审人员。 1.2 术语表 序号 术语或缩略语 说明性定义 1 DW 数据仓库(Data Warehouse) 2 BI 商业智能(Business Intelligence) 1.3 使用的文字处理和绘图工具 文字处理软件:WPS Office 2010 绘图工具:Visio 1.4 定义 AJAX:AJAX即“Asynchronous JavaScript and XML”(异步JavaScript和XML),AJAX并Jesse James Gaiiett创造的名词,是指一种创建交互式网页应用的网
4、页开非缩写词,而是由发技术。1.5 BI系统总体架构(个人对BI系统理解) 2. 模块设计 2.1 用例图 2.2 报表指标管理处理流程图 2.3 审核操作处理流程图 2.4 功能设计说明 用例名称:查看报表模块 用例标识号:101 参与者:操作人员 简要说明: 操作人员在相关主题树状菜单中选择需要查看的报表 前置条件: 操作人员已经成功登录M1BI系统。 基本事件流: 1(操作人员鼠标点击某主题树形菜单中的报表 2(如果报表审核能过,则可以正常显示 3(如果报表未能被审核能过,则不会显示报表,且显示提示信息 4(用例终止 其他事件流A1: 异常事件流: 后置条件: 操作人员可以查看所需要的报
5、表 主要程序代码清单: 清单1:是否有特权可以访问报表 private boolean isExtraPrivilege(TreeNode node,TDmGyUser User)throws Exception /获取报表负责人所在的单位 因为不通过报表数据的维度来看这个问题而是通过报表对象来看这个问题 String gnDm = this.pzgl.getReportUserOrg(node.getNodeid(); /取出当前登录用户所在的组织和节点信息 UserOrgMapping mapping = this.pzgl.getOrgMappingByUser(User.getMc()
6、; if(mapping != null) /如果当前 的登录用户是报表负责人的上级,则也可以 查看此报表 if(isMyBoss(mapping.getGnDm(),gnDm) return true; else /如果当前查看用户(或者 是登录用户) 已经被授过权了,则也能查看些报表 List matchUsers = this.pzgl.getCanViewThisReportUsers(node.getNodeid(); if(matchUsers.contains(User.getMc() return true; else return false; else return fal
7、se; 清单2:判断是否能显示报 public boolean canDisplayReport(TreeNode node)throws Exception int count = 0; /判断当前报表是下属子公司 是否都 已经审核发布完成 count = this.pzgl.countNotPubAudit(node.getNodeid(); if(count 0) return false; else /判断当前报表是否存在一个指标,此指标也同时存在于其它未发布的报表中的 count = this.pzgl.countNotPubWithIndex(node.getNodeid(); i
8、f(count 0) return false; else /判断是否当前报表中的指标是否都被审核过了 count = this.pzgl.countReportNotAudit(node.getNodeid(); if(count 0) return false; else /判断当前报表中是否还有没有审核通过的指标 count = this.pzgl.countReportIndexNotAudit(node.getNodeid(); if(count 0) return false; else return true; 清单3:通过回逆的方法,判断当前登录用户是不是报表创建者的组织的上级
9、 如果是就返回true,如果不是就返回false public boolean isMyBoss(String my,String comparator)throws Exception OrgInfo info = this.pzgl.getOrgInfo(comparator); if(my.trim().equals(info.getSjgnDm().trim() return true; else if(0.equals(info.getSjgnDm().trim() return false; else return isMyBoss(my,info.getSjgnDm(); 用例名
10、称:报表展现页面审核操作 用例标识号:102 参与者:操作人员 简要说明: 在报表展现页面内提供页面的审核操作 由于目前存在上级公司可以查看下级公司的未审核通过的报表,或者授过权的用户也可以直接查看未经审核的报表。 前置条件: 操作人员已经成功登录M1BI系统。 查看的报表,报表本身及内部指标必须经过审核 如果未能通过审核,当且仅当登录用户必须属于上级公司人员或者已授权用户才能正常访问报表 基本事件流: 1(如果是已经发布的报表,可以点击报表顶部的反发布按钮 2(点击“反发布”按钮后,则报表进入待审核状态,则报表顶部会出现当然的报表状态,以及“审核”,“打回”二个操作按钮 3(当点击“审核”操
11、作按钮,则报表状态变更为已审核,则会出现“发布”及“反审核”操作按钮 4(点击反审核后,报表状态变更为待审核状态,页面可参照第2步骤 5、点击“发布”按钮后,报表状态变更为发布状态,页面可参照第1步骤 6、接第2步骤,如果点击“打回”操作按钮,则报表状态变更为未审核状态,页面会出现“审核”操作按钮 其他事件流A1: 状态变更图: 后置条件: 如果进行报表展现页面审核操作后 如果报表状态为发布,则操作人员可以正常访问报表 如果未能通过审核,当且仅当登录用户必须属于上级公司人员或者已授权用户才能查看报表,反之不能正常访问报表 主要程序代码清单: 清单1:AJAX调用的js方法,处理页面展现时的审核
12、操作 function handlerAudit(userid,nodeid,operation) /alert(operation); var returnValue = xmlhttpsend($appPath/changeAuditStatus.action,&NodeID= + nodeid + &operation= + operation); var str = ; var buttonStr = ; if(returnValue!=null & returnValue!=) if(returnValue = 1) str += 未审批; buttonStr += ; else i
13、f (returnValue = 2) str += 待审批; buttonStr += ; buttonStr += ; else if (returnValue = 3) str += 已审批; buttonStr += ; buttonStr += ; else if (returnValue = 4) str += 已发布; buttonStr += ; else str += 审批 操作有误; document.getElementById(ajaxHandlerResult).innerHTML = str; document.getElementById(ajaxTakeIn).
14、innerHTML = buttonStr; 清单2:报表审核状态的枚举类 public enum ReportAuditStatus NOAUDIT(1),/未审核 WAITAUDIT(2),/待审核 AUDITED(3),/审核过 PUBLISHED(4);/发布 private String value; private ReportAuditStatus(String value) this.value = value; public String getValue() return value; 用例名称:报表数据组织检索(审核管理) 用例标识号:103 参与者:操作人员 简要说明:
15、 每个报表下面存在着多个不同的数据组织,我们需要根据状态及数据组织名称(也就是公司名称)进行检查 前置条件: 操作人员已经成功登录M1BI系统,且必须有审核管理权限 基本事件流: 1(点击“系统管理”下面的“审核管理”菜单项 2(然后选择右边的树状菜单项中的具体报表 3(在右边的查询页面,选则过滤条件,然后点击查询按钮,然后会出现查询结果。查询字段中会出现“审批公司”,“状态”信息项以及操作铵钮s 4(用例终止 其他事件流A1: 异常事件流: 后置条件: 操作人员可以查看所需要的报表数据组织 主要程序代码清单: 清单1:审核管理页面查询 public String shglQuery() th
16、rows Exception /公共属性 start ActionContext ctx = ActionContext.getContext(); HttpServletRequest request = (HttpServletRequest) ctx.get(ServletActionContext.HTTP_REQUEST); HttpSession session = request.getSession(); TDmGyUser users = (TDmGyUser)session.getAttribute(USER); HttpServletResponse response =
17、 (HttpServletResponse) ctx.get(ServletActionContext.HTTP_RESPONSE); /end /审核状态 String status=request.getParameter(status); /报表中文名称 String Text=request.getParameter(Text); /审核公司名称 String company=request.getParameter(company); /报表节点ID String NodeID=request.getParameter(NodeID); /如果报表节点ID不存在,则直接返回 if(S
18、tringUtils.isBlank(NodeID) return ; List list = pzgl.getAuditUnit(NodeID, status, company); if(list != null & !list.isEmpty() UserOrgMapping mapping = this.pzgl.getOrgMappingByUser(users.getMc(); for(int index=0;indexlist.size();index+) Shgl shgl = (Shgl)list.get(index); if(mapping.getGnDm().equals(
19、shgl.getJgDm() shgl.setCanDisplay(true); else if(isMyBoss(mapping.getGnDm(),shgl.getJgDm() shgl.setCanDisplay(true); else shgl.setCanDisplay(false); request.setAttribute(auditJgList, list); request.setAttribute(Text, Text); request.setAttribute(NodeID, NodeID); request.setAttribute(company, company)
20、; request.setAttribute(status, status); return suc; 用例名称:报表数据组织审核(审核管理) 用例标识号:104 参与者:操作人员 简要说明: 操作人员可以对报表下面的数据组织进行审核操作 前置条件: 操作人员已经成功登录M1BI系统,且必须有审核管理权限 报表下面的数据组织只能由组织对应岗位人员进行审核操作 基本事件流: 1(接用例103,当然用户属于物产集团下岗位,则可以对物产集团数据进行审核,目前物产集团数据当前状态为未审核。 2(如果点击通过按钮后,则页面相应变更,而且查询结果会聚集到物产集团数据上,方便操作人员查看 3(如果点击发布操
21、作按钮,则页面变更为 4(具体操作可以参照用例202. 5、用例结束 其他事件流A1: 异常事件流: 后置条件: 主要程序代码清单: 清单1:是否有特权可以访问报表 public void getAjaxInfo() throws Exception /公共属性 start ActionContext ctx = ActionContext.getContext(); HttpServletRequest request = (HttpServletRequest) ctx.get(ServletActionContext.HTTP_REQUEST); HttpServletResponse
22、response = (HttpServletResponse) ctx.get(ServletActionContext.HTTP_RESPONSE); /end String appPath=(String)request.getSession().getAttribute(appPath); if(appPath=null) appPath=/M1BI; response.setCharacterEncoding(utf-8); response.setContentType(text/xml); response.setHeader(Cache-Control, no-cache); TDmGyUser User=(TDmGyUser)request.getSession().getAttribute(USER); String userid=User.ge
copyright@ 2008-2022 冰豆网网站版权所有
经营许可证编号:鄂ICP备2022015515号-1