详细设计文档_详细设计文档范例

2020-02-27 其他范文 下载本文

详细设计文档由刀豆文库小编整理,希望给你工作、学习、生活带来方便,猜你可能喜欢“详细设计文档范例”。

详细设计文档

文档编号 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.模块设计......................................................................................................................................6 2.1 用例图................................................................................................................................6 2.2 功能设计说明....................................................................................................................8 3.数据库设计................................................................................................................................30......................................................................................................30 3.1 表................................3.2 视图..................................................................................................................................32 4.系统出错处理............................................................................................................................34 1.引言

1.1 编写目的和范围

企业内部的各类报表指标为是需要上报给上级领导进行查看,企业的掌舵者对企业将来发展的决策都是根据这些报表指标来进行的,尤其是企业内部的财务和资金数据更不能有一丝一毫的偏差。因此这些指标数据如果发生错误,将会对企业将来的发展造成很大影响,所

以对于此类数据,需要通过层层审批、确认正确后才能进行展示。本详细设计说明书编写的目的是说明程序模块的设计考虑,包括程序描述、输入/输出、算法和流程逻辑等,为软件编程和系统维护提供基础。本说明书的预期读者为系统设计人员、软件开发人员、软件测试人员和项目评审人员。1.2 术语表

序号 术语或缩略语 说明性定义 1 DW 数据仓库(Data Warehouse)2 BI 商业智能(Busine Intelligence)1.3 使用的文字处理和绘图工具 文字处理软件:WPS Office 2010 绘图工具:Visio 1.4 定义

AJAX:AJAX即“Asynchronous JavaScript and XML”(异步JavaScript和XML),AJAX并

Jee James Gaiiett创造的名词,是指一种创建交互式网页应用的网页开非缩写词,而是由

发技术。

1.5 BI系统总体架构(个人对BI系统理解)

2.模块设计 2.1 用例图

2.2 报表指标管理处理流程图

2.3 审核操作处理流程图

2.4 功能设计说明 用例名称:查看报表模块 用例标识号:101 参与者:操作人员 简要说明: 操作人员在相关主题树状菜单中选择需要查看的报表 前置条件: 操作人员已经成功登录M1BI系统。基本事件流: 1(操作人员鼠标点击某主题树形菜单中的报表

2(如果报表审核能过,则可以正常显示

3(如果报表未能被审核能过,则不会显示报表,且显示提示信息

4(用例终止 其他事件流A1: 异常事件流: 后置条件: 操作人员可以查看所需要的报表 主要程序代码清单: 清单1:是否有特权可以访问报表

private boolean isExtraPrivilege(TreeNode node,TDmGyUser User)throws Exception{ //获取报表负责人所在的单位 因为不通过报表数据的维度来看这个问题而是通过报表对象来看这个问题

String gnDm = this.pzgl.getReportUserOrg(node.getNodeid());//取出当前登录用户所在的组织和节点信息

UserOrgMapping mapping = this.pzgl.getOrgMappingByUser(User.getMc());if(mapping!= null){ //如果当前 的登录用户是报表负责人的上级,则也可以 查看此报表 if(isMyBo(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 false;} } 清单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());if(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:通过回逆的方法,判断当前登录用户是不是报表创建者的组织的上级 如果是就返回true,如果不是就返回false public boolean isMyBo(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 isMyBo(my,info.getSjgnDm());} } } 用例名称:报表展现页面审核操作 用例标识号:102 参与者:操作人员 简要说明: 在报表展现页面内提供页面的审核操作

由于目前存在上级公司可以查看下级公司的未审核通过的报表,或者授过权的用户也可以直接查看未经审核的报表。

前置条件: 操作人员已经成功登录M1BI系统。

查看的报表,报表本身及内部指标必须经过审核

如果未能通过审核,当且仅当登录用户必须属于上级公司人员或者已授权用户才能正常访问报表

基本事件流: 1(如果是已经发布的报表,可以点击报表顶部的反发布按钮

2(点击“反发布”按钮后,则报表进入待审核状态,则报表顶部会出现当然的报表状态,以及“审核”,“打回”二个操作按钮

3(当点击“审核”操作按钮,则报表状态变更为已审核,则会出现“发布”及“反审核”操作按钮

4(点击“反审核”后,报表状态变更为待审核状态,页面可参照第2步骤

5、点击“发布”按钮后,报表状态变更为发布状态,页面可参照第1步骤

6、接第2步骤,如果点击“打回”操作按钮,则报表状态变更为未审核状态,页面会出现“审核”操作按钮

其他事件流A1: 状态变更图:

后置条件: 如果进行报表展现页面审核操作后

如果报表状态为发布,则操作人员可以正常访问报表

如果未能通过审核,当且仅当登录用户必须属于上级公司人员或者已授权用户才能查看报表,反之不能正常访问报表 主要程序代码清单: 清单1:AJAX调用的js方法,处理页面展现时的审核操作 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 += “

onclick=”javascript:handlerAudit('“ + userid + ”','“ + nodeid + ”','audit');“ />”;}else if(returnValue == “2”){ str += “待审批”;buttonStr += “

onclick=”javascript:handlerAudit('“ + userid + ”','“ + nodeid + ”','tbd');“ />”;buttonStr += “

onclick=”javascript:handlerAudit('“ + userid + ”','“ + nodeid + ”','audit');“ />”;}else if(returnValue == “3”){ str += “已审批”;buttonStr += “

onclick=”javascript:handlerAudit('“ + userid + ”','“ + nodeid + ”','publish');“ />”;buttonStr += “

核 onclick=”javascript:handlerAudit('“ + userid + ”','“ + nodeid + ”','reverseAudit');“ />”;}else if(returnValue == “4”){ str += “已发布”;buttonStr += “

布 onclick=”javascript:handlerAudit('“ + userid + ”','“ + nodeid + ”','reversePublish');“ />”;}else{ str += “审批 操作有误”;} document.getElementById(“ajaxHandlerResult”).innerHTML = str;document.getElementById(“ajaxTakeIn”).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 参与者:操作人员 简要说明: 每个报表下面存在着多个不同的数据组织,我们需要根据状态及数据组织名称(也就是公司

名称)进行检查 前置条件: 操作人员已经成功登录M1BI系统,且必须有审核管理权限 基本事件流: 1(点击“系统管理”下面的“审核管理”菜单项

2(然后选择右边的树状菜单项中的具体报表

3(在右边的查询页面,选则过滤条件,然后点击查询按钮,然后会出现查询结果。查询字段

中会出现“审批公司”,“状态”信息项以及操作铵钮s

4(用例终止 其他事件流A1: 异常事件流: 后置条件: 操作人员可以查看所需要的报表数据组织 主要程序代码清单: 清单1:审核管理页面查询

public String shglQuery()throws Exception{ //公共属性 start ActionContext ctx = ActionContext.getContext();HttpServletRequest request =(HttpServletRequest)ctx.get(ServletActionContext.HTTP_REQUEST);HttpSeion seion = request.getSeion();TDmGyUser users =(TDmGyUser)seion.getAttribute(USER);HttpServletResponse response =(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(StringUtils.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;index

集团数据当前状态为未审核。

2(如果点击通过按钮后,则页面相应变更,而且查询结果会聚集到物产集团数据上,方便操

作人员查看

3(如果点击发布操作按钮,则页面变更为

4(具体操作可以参照用例202.5、用例结束 其他事件流A1: 异常事件流: 后置条件: 主要程序代码清单: 清单1:是否有特权可以访问报表

public void getAjaxInfo()throws Exception{ //公共属性 start ActionContext ctx = ActionContext.getContext();HttpServletRequest request =(HttpServletRequest)ctx.get(ServletActionContext.HTTP_REQUEST);HttpServletResponse response =(HttpServletResponse)ctx.get(ServletActionContext.HTTP_RESPONSE);//end String appPath=(String)request.getSeion().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.getSeion().getAttribute(“USER”);String userid=User.getMc();//获取USERID PrintWriter out = null;String nodeId = request.getParameter(“NodeID”);try { UserOrgMapping mapping = this.pzgl.getOrgMappingByUser(userid);StringBuffer sb = new StringBuffer(“”);String status = this.pzgl.getOrgCurrentAuditStatus(mapping.getOrgMc(), nodeId);if(ReportAuditStatus.NOAUDIT.getValue().equals(status)){ sb.append(“”);}else if(ReportAuditStatus.WAITAUDIT.getValue().equals(status)){ sb.append(“”);sb.append(“”);}else if(ReportAuditStatus.AUDITED.getValue().equals(status)){ sb.append(“”);sb.append(“

onclick=”javascript:handlerAudit('“ + userid + ”','“ + nodeId + ”','reverseAudit');“ />”);}else if(ReportAuditStatus.PUBLISHED.getValue().equals(status)){ sb.append(“

onclick=”javascript:handlerAudit('“ + userid + ”','“ + nodeId + ”','reversePublish');“ />”);}else{ sb.append(“”);} out = response.getWriter();out.write(sb.toString());out.close();} catch(Exception e){ LogWritter.sysDebug(e.getMeage());} } 用例名称:查询报表指标 用例标识号:105 参与者:操作人员 简要说明: 操作人员可以查看相关报表的所包含指标 前置条件: 操作人员已经成功登录M1BI系统,且拥有指标管理的权限 基本事件流: 1(操作人员鼠标点击系统管理下面的指标管理

2(然后选择右边的树状菜单项中的具体报表

3(然后就会显示此报表所包含指标

4(用例终止 其他事件流A1: 异常事件流: 后置条件: 操作人员可以从指标字典中引用指标,并审核指标状态 用例名称:报表指标引用指标设置 用例标识号:106 参与者:操作人员 简要说明: 操作人员在指标管理页面中引用指标字典中的指标。并对报表中的指标进行审核。

前置条件: 操作人员已经成功登录M1BI系统,且有指标管理的权限 基本事件流: 1(接用例205,点击指标引用操作的修改按钮

2(报表选择窗口中,操作人员可以在输入框中进行指标名称的模糊查询。

3(选择你所需要的指标项后,点击选择按钮,引用指标就显示刚刚选择的指标了

4(如果指标项没有被审核通过,则会显示未通过审核,并能进行审核操作

5(如果报表其中有没有审核通过的指标,则报表是不能被正常访问,操作人员可以点击审核

按钮来审核此指标

5(用例结束 其他事件流A1: 异常事件流: 后置条件: 主要程序代码清单: 清单1:报表指标管理方法

public void indexManage()throws Exception{ ActionContext ctx = ActionContext.getContext();HttpServletRequest request =(HttpServletRequest)ctx.get(ServletActionContext.HTTP_REQUEST);HttpServletResponse response =(HttpServletResponse)ctx.get(ServletActionContext.HTTP_RESPONSE);//end String appPath=(String)request.getSeion().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.getSeion().getAttribute(“USER”);String userid=User.getMc();//获取USERID PrintWriter out = null;String likeStr = request.getParameter(“likeStr”);StringBuffer sb = new StringBuffer(“”);try { List list = this.pzgl.queryReportIndex(likeStr);if(list!= null &&!list.isEmpty()){ for(ReportIndex index : list){ sb.append(“” + index.getDescription()+ “”);} sb.append(“”);} } catch(Exception e){ LogWritter.sysDebug(e.getMeage());} out = response.getWriter();out.write(sb.toString());out.close();} 清单2:AJAX实现的,指标审核页面生成方法 public void insertIndexHTML()throws Exception{ ActionContext ctx = ActionContext.getContext();HttpServletRequest request =(HttpServletRequest)ctx.get(ServletActionContext.HTTP_REQUEST);HttpServletResponse response =(HttpServletResponse)ctx.get(ServletActionContext.HTTP_RESPONSE);//end String appPath=(String)request.getSeion().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.getSeion().getAttribute(“USER”);String userid=User.getMc();//获取USERID PrintWriter out = null;String NodeID = request.getParameter(“NodeID”);StringBuffer sb = new StringBuffer(“”);try { List list = this.pzgl.queryReportIndexByNodeId(NodeID);if(list!= null &&!list.isEmpty()){ sb.append(“”);sb.append(“指标代码指标详细描述引用指标指标引

用操作状态”);int ii = 0;for(ReportIndex index : list){ sb.append(“”);sb.append(“”);sb.append(“” +index.getIndexDm()+ “”);sb.append(“”);sb.append(“”);sb.append(“” + index.getDescription()+ “”);sb.append(“”);sb.append(“”);String str = index.getRefIndexDesc()==null ? “” : index.getRefIndexDesc();sb.append(“” + str + “”);sb.append(“”);sb.append(“”);sb.append(“”);sb.append(“”);sb.append(“”);if(StringUtils.isBlank(index.getStatus())|| “1”.equals(index.getStatus())){ sb.append(“通过审核”);}else{ sb.append(“未通过审核”);sb.append(“”);sb.append(“”);} sb.append(“”);sb.append(“”);ii ++;} sb.append(“”);} } catch(Exception e){ LogWritter.sysDebug(e.getMeage());} out = response.getWriter();out.write(sb.toString());out.close();} 3.数据库设计 3.1 表

T_XT_REPORT_JG 数据表名称 中文名 报表机构数据审核表

RPT_DM 关键字段 索引字段 设计者 范屹 简要说明 描述报表中机构数据审核情况

表关联

字段名称 中文名 类型 长度 允许null 说明 报表的功能代RPT_DM 报表代码 字符型 码

JG 机构名称 字符型 报表机构名称

机构数据审核机构数据审核STATUS 字符型 null 状态 状态 JG_DM 机构代码 字符型 null 报表机构代码 T_XT_REPORT_GRANT 数据表名称 中文名 报表授权表

NODEID 关键字段 索引字段 设计者 范屹 简要说明 描述报表查看权限被授于相关人员

表关联

字段名称 中文名 类型 长度 允许null 说明 NODEID 节点标识 字符型 报表节点功能id 被授权查看此USERMC 人员名称 字符型 报表的用户名 称

T_XT_REPORT_INDEX 数据表名称 中文名 报表指标表

RPT_DM 关键字段 索引字段 设计者 范屹 简要说明 描述报表中包含了哪些商业指标

表关联

字段名称 中文名 类型 长度 允许null 说明 报表的功能代RPT_DM 报表代码 字符型 码

报表的指标代IMDEX_DM 指标代码 字符型

码 INDEX_DESC 指标描述 字符型 null 指标描述 REF_RPT 指标状态 字符型 null 指标审核状态

报表的指标字REF_INDEX 外部引用指标 字符型 null 典引用外码

REF_INDEX_DESC 外部指标描述 字符型 null 外部指标描述 T_XT_REPORT_CREATOR 数据表名称 中文名 报表创建人关系表

NODEID 关键字段 索引字段 设计者 范屹 简要说明 提供报表与创建人(归属者)的关系维护

表关联

字段名称 中文名 类型 长度 允许null 说明 NODEID 节点标识 字符型 报表节点功能id 报表所属人或CREATOR 创建人 字符型 者报表创建人 3.2 视图

T_USER_ORG_MAPPING 数据表名称 中文名 人员组织对应表 USER_ID 关键字段 索引字段 设计者 简要说明 描述人员与组织的一一对应关系 表关联

字段名称 中文名 类型 长度 允许null 说明 USER_ID 用户标识 字符型 用户标识 USER_MC 用户名称 字符型 用户名称 USER_NAME 用户姓名 字符型 用户姓名 JS_DM 角色代码 字符型 角色代码 JS_MC 角色名称 字符型 角色名称 GN_DM 功能代码 字符型 功能代码 ORG_MC 组织名称 字符型 组织名称 ORG_ID 组织标识 字符型 组织标识

CODETYPE 代码类型 字符型 代码类型 T_USER_ORG_MAPPING视图代码 CREATE OR REPLACE VIEW T_USER_ORG_MAPPING(user_id, user_mc, user_name, js_dm, js_mc, gn_dm, org_mc, org_id, codetype)AS SELECT F, G, H, D, E, A, B, O, CT FROM(SELECT DISTINCT T1.GN_DM A, T1.MC B, T1.SJGN_DM C, T1.CODETYPE CT, T1.ORGID O, T3.JS_DM D, T3.MC E, T6.USER_DM F, T6.MC G, T6.USER_NAME H FROM T_XT_GNS T1, T_XT_JS_GNS T2, T_XT_JS T3, T_XT_USER_JGGW T5, T_DM_GY_USER T6, T_XT_JS_GW T7 WHERE T1.GN_DM = T2.GN_DM AND T2.JS_DM = T3.JS_DM AND T1.CODETYPE = '1'--以人力树为模板--AND T1.CODETYPE!= '0'--考虑多组织结构树情况 AND T3.JSLX!= '0'--查找数据级角色 AND T7.JS_DM = T2.JS_DM AND T7.JS_DM = T3.JS_DM AND T7.GW_DM = T5.GW_DM AND T5.SWRY_DM = T6.USER_DM)A1 WHERE NOT EXISTS(SELECT 1 FROM(SELECT DISTINCT T1.GN_DM, T1.MC, T1.SJGN_DM, T3.JS_DM, T3.MC, T6.USER_DM, T6.MC, T6.USER_NAME FROM T_XT_GNS T1, T_XT_JS_GNS T2, T_XT_JS T3, T_XT_USER_JGGW T5, T_DM_GY_USER T6, T_XT_JS_GW T7 WHERE T1.GN_DM = T2.GN_DM AND T2.JS_DM = T3.JS_DM AND T1.CODETYPE = '1'--以人力树为模板--AND T1.CODETYPE!='0'--考虑多组织结构树情况 AND T3.JSLX!= '0'--查找数据级角色 AND T7.JS_DM = T2.JS_DM AND T7.JS_DM = T3.JS_DM AND T7.GW_DM = T5.GW_DM AND T5.SWRY_DM = T6.USER_DM)A2 WHERE A2.GN_DM = A1.C AND A2.USER_DM = A1.F)UNION SELECT 'administrator','administrator','BOE管理员','2891','系统管理员-数据角色 ','51000034','物产集团','10000000','1' FROM DUAL 4.系统出错处理

通过log4j,进行错误日志输出 配置代码如下: log4j.rootLogger=info, stdout log4j.appender.stdout=org.apache.log4j.ConsoleAppender log4j.appender.stdout.layout=org.apache.log4j.PatternLayout log4j.appender.stdout.layout.ConversionPattern=%d %p [%c]meage log4j.appender.logfile.layout=org.apache.log4j.PatternLayout log4j.appender.logfile.layout.ConversionPattern=%d %p [%c]-%m%n 5.与原有需求的区别 需求 原有需求 目前实现 原因 开发工期短,如有实

现报表数据层面上的操作对象 报表数据及指标 报表及指标 操作需要重构系统,开发工作量极大 由于目前实现的部门 在不同的主题间是相报表查看权限是否同需要在不同的主题间只在驾驶舱中实现审通的,所以只需求实主题 对报表进行审核查看 核查看 现一个主题就可以说

明问题 报表查看权限是否同需求区别组织是否为没有引入是否为上市开发工作量的问题 上市公司 上市公司 公司这个概念

《详细设计文档.docx》
将本文的Word文档下载,方便收藏和打印
推荐度:
详细设计文档
点击下载文档
相关专题 详细设计文档范例 设计 文档 详细 详细设计文档范例 设计 文档 详细
[其他范文]相关推荐
    [其他范文]热门文章
      下载全文