`
xxp3369
  • 浏览: 151280 次
  • 性别: Icon_minigender_1
  • 来自: 深圳
社区版块
存档分类
最新评论
阅读更多
oa_20:

1、创建动态表单的领域模型

FieldInput.java
FieldItem.java
FieldType.java
FlowForm.java
FormField.java
FieldInput.hbm.xml
FieldType.hbm.xml
FlowForm.hbm.xml
FormField.hbm.xml

2、修改hibernate.cfg.xml,把动态表单相关的hbm.xml文件添加上去
3、创建动态表单定义的业务逻辑接口以及实现类
FormManager.java
FormManagerImpl.java

4、修改init_datas.xml和InitSystemDataImpl.java,
   添加动态表单相关数据的初始化代码
  
【请drop掉数据库,并重新创建数据库之后,运行InitSystemDatasTest.java,重新初始化数据】


package com.bjsxt.oa.manager;


public class InitSystemDatasTest extends BaseUnitTest {
	private InitSystemDatas initSystemDatas;
	public void testAddOrUpdateInitDatas() {
		initSystemDatas.addOrUpdateInitDatas("init_datas.xml");
		setComplete();
	}
	
	public void setInitSystemDatas(InitSystemDatas initSystemDatas) {
		this.initSystemDatas = initSystemDatas;
	}

}



package com.bjsxt.oa.manager.impl;

import java.util.Iterator;
import java.util.List;

import org.apache.commons.logging.Log;
import org.apache.commons.logging.LogFactory;
import org.dom4j.Document;
import org.dom4j.Element;
import org.dom4j.io.SAXReader;

import com.bjsxt.oa.manager.InitSystemDatas;
import com.bjsxt.oa.manager.OrgManager;
import com.bjsxt.oa.manager.Permission;
import com.bjsxt.oa.manager.SystemException;
import com.bjsxt.oa.manager.UserManager;
import com.bjsxt.oa.model.ACL;
import com.bjsxt.oa.model.FieldInput;
import com.bjsxt.oa.model.FieldType;
import com.bjsxt.oa.model.Module;
import com.bjsxt.oa.model.Organization;
import com.bjsxt.oa.model.Person;
import com.bjsxt.oa.model.Role;
import com.bjsxt.oa.model.User;

public class InitSystemDatasImpl extends AbstractManager implements
		InitSystemDatas {
	private static Log logger = LogFactory.getLog(InitSystemDatasImpl.class);
	private String file;
	private OrgManager orgManager;
	private UserManager userManager;
	
	public void addOrUpdateInitDatas(String xmlFilePath){
		try {
			String filePath = null;
			if(xmlFilePath == null || xmlFilePath.trim().equals("")){
				filePath = file;
			}else{
				filePath = xmlFilePath;
			}

			//DOM4J使用示例
			Document document = new SAXReader().read(
				Thread.currentThread().getContextClassLoader().getResourceAsStream(filePath)
			);
			
			importModules( document.selectNodes("//Modules/Module") ,null);
			importRoleAndAcl(document.selectNodes("//Roles/Role"));
			importOrgAndPerson(document.selectNodes("//Organizations/Org"),null);
			
			importFieldDefinition(document.selectNodes("//FieldTypes/FieldType"),document.selectNodes("//FieldInputs/FieldInput"));
		} catch (Exception e) {
			e.printStackTrace();
			throw new SystemException("初始化数据生成有误!");
		}
	}

	
	//导入模块信息
	protected void importModules(List modules,Module parent){
		
		for (Iterator iter = modules.iterator(); iter.hasNext();) {
			Element element = (Element) iter.next();
			Module module = new Module();
			module.setName(element.attributeValue("name"));
			module.setSn(element.attributeValue("sn"));
			module.setUrl(element.attributeValue("url"));
			module.setOrderNo(Integer.parseInt(element.attributeValue("orderNo")));
			module.setParent(parent);
			getHibernateTemplate().save(module);
			logger.info("导入模块【"+module.getName()+"】");
			importModules( element.selectNodes("Module") , module);
		}
	}
	
	protected void importRoleAndAcl(List roles){
		for (Iterator iter = roles.iterator(); iter.hasNext();) {
			Element element = (Element) iter.next();
			Role role = new Role();
			role.setName(element.attributeValue("name"));
			getHibernateTemplate().save(role);
			
			//给角色授权
			List acls = element.selectNodes("Acl");
			for (Iterator iterator = acls.iterator(); iterator.hasNext();) {
				Element aclElem = (Element) iterator.next();
				Integer moduleId = 
					(Integer)getSession()
					.createQuery("select m.id from Module m where m.name = ?")
					.setParameter(0, aclElem.attributeValue("module"))
					.uniqueResult();
				ACL acl = new ACL();
				acl.setPrincipalType(ACL.TYPE_ROLE);
				acl.setPrincipalId(role.getId());
				acl.setModuleId(moduleId);
				if("true".equals(aclElem.attributeValue("C"))){
					acl.setPermission(Permission.CREATE, true);
				}
				if("true".equals(aclElem.attributeValue("R"))){
					acl.setPermission(Permission.READ, true);
				}
				if("true".equals(aclElem.attributeValue("U"))){
					acl.setPermission(Permission.UPDATE, true);
				}
				if("true".equals(aclElem.attributeValue("D"))){
					acl.setPermission(Permission.DELETE, true);
				}
				getHibernateTemplate().save(acl);
			}
		}
	}
	
	protected void importOrgAndPerson(List orgs,Organization parent){
		for (Iterator iter = orgs.iterator(); iter.hasNext();) {
			Element element = (Element) iter.next();
			Organization org = new Organization();
			org.setName(element.attributeValue("name"));
			orgManager.addOrg(org, parent == null?0:parent.getId());
			
			//查找机构下的人员信息,并初始化
			List persons = element.selectNodes("Person");
			for (Iterator iterator = persons.iterator(); iterator.hasNext();) {
				Element personElem = (Element) iterator.next();
				Person person = new Person();
				person.setName(personElem.attributeValue("name"));
				person.setOrg(org);
				getHibernateTemplate().save(person);
				
				//给人员分配登陆帐号
				User user = new User();
				user.setUsername(personElem.attributeValue("username"));
				user.setPassword(personElem.attributeValue("password"));
				user.setPerson(person);
				getHibernateTemplate().save(user);
				
				//给用户分配角色
				String roles = personElem.attributeValue("roles");
				String[] roleNames = roles.split(",");
				for(int i=0; i<roleNames.length; i++){
					int roleId = 
						(Integer)getSession()
						.createQuery("select r.id from Role r where r.name = ?")
						.setParameter(0, roleNames[i])
						.uniqueResult();
					userManager.addOrUpdateUserRole(user.getId(), roleId, i+1);
				}
			}
			
			//初始化此机构下的子机构信息
			importOrgAndPerson( element.selectNodes("Org") , org);
		}
	}
	
	protected void importFieldDefinition(List fieldTypes,List fieldInputs){
		//首先导入fieldInputs
		for (Iterator iter = fieldInputs.iterator(); iter.hasNext();) {
			Element element = (Element) iter.next();
			FieldInput input = new FieldInput();
			input.setName(element.attributeValue("name"));
			input.setTemplate(element.attributeValue("template"));
			getHibernateTemplate().save(input);
		}
		
		for (Iterator iter = fieldTypes.iterator(); iter.hasNext();) {
			Element element = (Element) iter.next();
			FieldType type = new FieldType();
			type.setName(element.attributeValue("name"));
			type.setType(element.attributeValue("type"));
			getHibernateTemplate().save(type);
		}
	}
	
	
	public void setFile(String file) {
		this.file = file;
	}


	public void setOrgManager(OrgManager orgManager) {
		this.orgManager = orgManager;
	}


	public void setUserManager(UserManager userManager) {
		this.userManager = userManager;
	}

}
分享到:
评论

相关推荐

    OA.rar_C# OA_OA ASP.NET sql20_OA Explor_oa_oa 办公

    【OA.rar】是一个压缩包文件,其中包含了C#语言开发的OA(Office Automation,办公自动化)系统的源代码和相关资源。这个系统是基于ASP.NET框架构建的,这意味着它使用了微软的.NET Framework来运行和处理Web应用...

    通达OA_2015_免注册_20人_不稳定版 .zip

    总之,"通达OA_2015_免注册_20人_不稳定版"是一个有价值的参考资料,无论是对于初学者熟悉OA系统,还是开发者探索系统架构,都能提供宝贵的学习机会。但要注意,由于其不稳定性和潜在的安全风险,不建议在生产环境中...

    OA工作流配套课程代码

    "oa_20"和"oa_18"可能涉及到数据库操作,这是为了存储和检索工作流实例和任务的相关信息,确保数据的安全性和一致性。 7. **异常处理与日志** "oa_4"和"oa_3"可能包含了错误处理和日志记录的代码,这些对于系统的...

    abon_oa_代码需求1

    20. **代码质量**:代码要求清晰、简洁,易于阅读和维护,同时具备良好的扩展性和高复用性,提高执行效率和安全性。 21. **文档记录**:每个功能的实现和修改都需要有相应的文档记录,便于后期的查阅和维护。 通过...

    OA_ICESat2_guide.pdf

    《OA_ICESat2_guide.pdf》使用说明详细解读 该文档是关于如何使用开放测高系统(OpenAltimetry)的指南,特别是针对ICESat-2(冰川卫星2号)的数据处理和分析。ICESat-2是美国国家航空航天局(NASA)发射的一颗卫星...

    o_A一个很好试验过的OA项目,自己

    根据压缩包子文件的文件名称列表"oa_20",我们可以推测这可能是项目的版本号或者数据库文件名的一部分。例如,它可能是项目源代码的第20个迭代版本,或者包含有系统数据的第20个数据库备份。不过,没有具体的文件...

    OAactiviti5

    在“oa_20”这个压缩包文件中,很可能包含了OA系统Activiti5的源代码、配置文件、数据库脚本、部署说明等相关资料。开发者可以通过这些资源,深入了解OA系统Activiti5的架构设计、开发实践以及具体应用场景。通过...

    Using Origin from LabVIEW.pdf

    20. **OA_PlotWksCols**:根据工作表中的列绘制图形。 21. **OA_Save**:保存Origin项目或工作簿。 22. **OA_Wks-Get-2Cols**:获取两个列的数据。 23. **OA_Wks-GetCell(numeric/string)**:获取单元格的数值或字符...

    OA.rar_oa

    本压缩包"OA.rar_oa"中的"JavaPrj_20"可能是一个基于Java开发的OA系统项目,我们可以从这个项目中学习到许多关于OA系统开发的知识点。 1. **Java编程基础**:OA系统通常使用Java作为后端开发语言,因为Java具有跨...

    OA.rar_OA通俗简介

    OA系统的基本概念源于20世纪70年代,当时主要以电子邮件、文档管理等基础功能为主。随着技术的发展,现代OA系统已演变成一个综合性的平台,涵盖了事务处理、信息管理、协同工作等多个方面。它通过提供各种工作模块,...

    致远OA V8.1 数据字典

    - **EXT_ATTR_11 至 EXT_ATTR_20**: 类型为`DECIMAL(19,4)`,表示数字类型的扩展字段。这些字段可以用于存储数值信息,例如评分、数量等。 - **EXT_ATTR_21 至 EXT_ATTR_30**: 类型为`DATETIME`,表示日期类型的扩展...

    全能通用OA办公系统 V20

    全能通用OA办公系统 V20 是一款专为企事业单位设计的高效、全面的办公自动化解决方案。这款系统旨在提升组织内部的工作效率,优化流程管理,实现信息化办公,减少纸张浪费,提高协同工作的能力。OA(Office ...

    T-SQL基本语句与使用方法

    IF EXISTS (SELECT * FROM sysobjects WHERE [name] = 'OA_UserInfo') DROPTABLE OA_UserInfo; CREATETABLE OA_UserInfo ( [Id] SMALLINT IDENTITY(1,1), UserName VARCHAR(20) NOT NULL, UserPwd VARCHAR(150...

    OA数据结构

    - **conTact_phone**: 联系电话,使用`nvarchar(20)`类型。 - **User_Name**: 发送人编号,采用`nvarchar(50)`类型。 通过以上对OA办公系统数据结构的详细解析,我们可以清晰地了解到OA系统是如何组织和管理各种...

    oa系统调研报告.pdf

    购买 ERP 接口约 4 万元,打开 OA 与 ERP 数据接口实现管理流程,需投入约 15-20 万。合计约需万元。 如果要求尽快使用OA 系统实现审批采购订单、采购三方报价、生产订单,建议请南京千度软件公司开发OA 系统。因为...

    通达OA数据结构说明.doc

    通达OA(Office Automation System)是一款企业级的协同办公软件,其数据结构是支撑系统运行的基础,用于存储和管理各种业务数据。以下是对文件中提到的一些核心数据表及其字段的详细说明: 1. **address** 表:...

    通达oa加载扩展无法启动的dll php_oci8.dll

    oci8.statement_cache_size = 20 oci8.old_oci_close_semantics = Off ``` 4. **更新系统路径**:将php_oci8.dll及其依赖项所在的目录添加到系统环境变量PATH中。 5. **重启服务**:完成上述操作后,重启Web...

    第20-21周_MyBatis实现OA系统项目实战-RBAC部分源代码_imooc-oa-rbac.zip

    第20-21周_MyBatis实现OA系统项目实战-RBAC部分源代码_imooc-oa-rbac

    通达OA数据库数据字典.docx

    - **USER_ID**:记录创建该地址条目的用户的ID,是varchar类型,长度为20,不允许为空。 - **GROUP_ID**:表示所属的组别,用于分组管理,int类型,长度为11,可为空。 - **PSN_NAME**:联系人的姓名,varchar...

Global site tag (gtag.js) - Google Analytics