Преглед изворни кода

Merge branch 'feature/organization_import' into 'develop'

人员组织导入导出服务Feature/organization import

See merge request o2oa/o2oa!654
o2null пре 5 година
родитељ
комит
1007ece770
34 измењених фајлова са 3337 додато и 20 уклоњено
  1. 495 0
      o2server/x_organization_assemble_control/src/main/java/com/x/organization/assemble/control/jaxrs/export/ActionExportAll.java
  2. 18 0
      o2server/x_organization_assemble_control/src/main/java/com/x/organization/assemble/control/jaxrs/export/ExportAction.java
  3. 1159 0
      o2server/x_organization_assemble_control/src/main/java/com/x/organization/assemble/control/jaxrs/inputperson/ActionInputAll.java
  4. 123 9
      o2server/x_organization_assemble_control/src/main/java/com/x/organization/assemble/control/jaxrs/inputperson/ActionTemplate.java
  5. 300 0
      o2server/x_organization_assemble_control/src/main/java/com/x/organization/assemble/control/jaxrs/inputperson/ActionWipeAll.java
  6. 2 2
      o2server/x_organization_assemble_control/src/main/java/com/x/organization/assemble/control/jaxrs/inputperson/BaseAction.java
  7. 64 0
      o2server/x_organization_assemble_control/src/main/java/com/x/organization/assemble/control/jaxrs/inputperson/DutyItem.java
  8. 118 0
      o2server/x_organization_assemble_control/src/main/java/com/x/organization/assemble/control/jaxrs/inputperson/DutySheetConfigurator.java
  9. 12 0
      o2server/x_organization_assemble_control/src/main/java/com/x/organization/assemble/control/jaxrs/inputperson/ExceptionDutyCodeColumnEmpty.java
  10. 12 0
      o2server/x_organization_assemble_control/src/main/java/com/x/organization/assemble/control/jaxrs/inputperson/ExceptionDutyNameColumnEmpty.java
  11. 12 0
      o2server/x_organization_assemble_control/src/main/java/com/x/organization/assemble/control/jaxrs/inputperson/ExceptionEmployeeColumnEmpty.java
  12. 12 0
      o2server/x_organization_assemble_control/src/main/java/com/x/organization/assemble/control/jaxrs/inputperson/ExceptionGroupCodeColumnEmpty.java
  13. 12 0
      o2server/x_organization_assemble_control/src/main/java/com/x/organization/assemble/control/jaxrs/inputperson/ExceptionGroupNameColumnEmpty.java
  14. 12 0
      o2server/x_organization_assemble_control/src/main/java/com/x/organization/assemble/control/jaxrs/inputperson/ExceptionIdNumberColumnEmpty.java
  15. 12 0
      o2server/x_organization_assemble_control/src/main/java/com/x/organization/assemble/control/jaxrs/inputperson/ExceptionTypeCodeColumnEmpty.java
  16. 12 0
      o2server/x_organization_assemble_control/src/main/java/com/x/organization/assemble/control/jaxrs/inputperson/ExceptionTypeNameColumnEmpty.java
  17. 12 0
      o2server/x_organization_assemble_control/src/main/java/com/x/organization/assemble/control/jaxrs/inputperson/ExceptionUniqueColumnEmpty.java
  18. 12 0
      o2server/x_organization_assemble_control/src/main/java/com/x/organization/assemble/control/jaxrs/inputperson/ExceptionUnitNameColumnEmpty.java
  19. 12 0
      o2server/x_organization_assemble_control/src/main/java/com/x/organization/assemble/control/jaxrs/inputperson/ExceptionUnitSHortNameColumnEmpty.java
  20. 12 0
      o2server/x_organization_assemble_control/src/main/java/com/x/organization/assemble/control/jaxrs/inputperson/ExceptionUnitTypeCodeColumnEmpty.java
  21. 12 0
      o2server/x_organization_assemble_control/src/main/java/com/x/organization/assemble/control/jaxrs/inputperson/ExceptionUnitUniqueColumnEmpty.java
  22. 102 0
      o2server/x_organization_assemble_control/src/main/java/com/x/organization/assemble/control/jaxrs/inputperson/GroupItem.java
  23. 150 0
      o2server/x_organization_assemble_control/src/main/java/com/x/organization/assemble/control/jaxrs/inputperson/GroupSheetConfigurator.java
  24. 109 0
      o2server/x_organization_assemble_control/src/main/java/com/x/organization/assemble/control/jaxrs/inputperson/IdentityItem.java
  25. 134 0
      o2server/x_organization_assemble_control/src/main/java/com/x/organization/assemble/control/jaxrs/inputperson/IdentitySheetConfigurator.java
  26. 20 3
      o2server/x_organization_assemble_control/src/main/java/com/x/organization/assemble/control/jaxrs/inputperson/InputPersonAction.java
  27. 9 0
      o2server/x_organization_assemble_control/src/main/java/com/x/organization/assemble/control/jaxrs/inputperson/PersonItem.java
  28. 14 5
      o2server/x_organization_assemble_control/src/main/java/com/x/organization/assemble/control/jaxrs/inputperson/PersonSheetConfigurator.java
  29. 94 0
      o2server/x_organization_assemble_control/src/main/java/com/x/organization/assemble/control/jaxrs/inputperson/UnitItem.java
  30. 149 0
      o2server/x_organization_assemble_control/src/main/java/com/x/organization/assemble/control/jaxrs/inputperson/UnitSheetConfigurator.java
  31. 118 0
      o2server/x_organization_assemble_control/src/main/java/com/x/organization/assemble/control/jaxrs/inputperson/UnitTypeSheetConfigurator.java
  32. 1 0
      o2web/source/o2_core/o2/xAction/services/x_organization_assemble_control.json
  33. 1 1
      o2web/source/x_component_Org/Main.js
  34. 1 0
      o2web/source/x_component_Org/lp/zh-cn.js

+ 495 - 0
o2server/x_organization_assemble_control/src/main/java/com/x/organization/assemble/control/jaxrs/export/ActionExportAll.java

@@ -0,0 +1,495 @@
+package com.x.organization.assemble.control.jaxrs.export;
+
+import java.io.ByteArrayOutputStream;
+import java.util.ArrayList;
+import java.util.Date;
+import java.util.List;
+
+import javax.persistence.EntityManager;
+import javax.persistence.criteria.CriteriaBuilder;
+import javax.persistence.criteria.CriteriaQuery;
+import javax.persistence.criteria.Predicate;
+import javax.persistence.criteria.Root;
+import javax.servlet.http.HttpServletRequest;
+
+import com.x.base.core.project.tools.DateTools;
+import com.x.base.core.project.tools.ListTools;
+import com.x.organization.assemble.control.Business;
+import com.x.organization.core.entity.Group;
+import com.x.organization.core.entity.Identity;
+import com.x.organization.core.entity.Person;
+import com.x.organization.core.entity.PersonAttribute;
+import com.x.organization.core.entity.PersonAttribute_;
+import com.x.organization.core.entity.Unit;
+import com.x.organization.core.entity.UnitDuty;
+import com.x.organization.core.entity.UnitDuty_;
+import com.x.organization.core.entity.Unit_;
+
+import org.apache.commons.lang3.StringUtils;
+import org.apache.poi.xssf.usermodel.XSSFWorkbook;
+import org.apache.poi.ss.usermodel.Row;
+import org.apache.poi.ss.usermodel.Sheet;
+import org.apache.poi.ss.usermodel.Workbook;
+
+import com.x.base.core.container.EntityManagerContainer;
+import com.x.base.core.container.factory.EntityManagerContainerFactory;
+import com.x.base.core.project.http.ActionResult;
+import com.x.base.core.project.http.EffectivePerson;
+import com.x.base.core.project.jaxrs.WoFile;
+import com.x.base.core.project.logger.Logger;
+import com.x.base.core.project.logger.LoggerFactory;
+
+/**
+ * 导入的文件没有用到文件存储器,是直接放在数据库中的BLOB列
+ */
+public class ActionExportAll extends BaseAction {
+	
+	private static  Logger logger = LoggerFactory.getLogger(ActionExportAll.class);
+	List<Unit> allUnitList = new ArrayList<>();
+	List<Person> allPersonList = new ArrayList<>();
+	List<Identity> allIdentityList = new ArrayList<>();
+	List<UnitDuty> allDutyList = new ArrayList<>();
+	List<Group> allGroupList = new ArrayList<>();
+	//Workbook wb = new HSSFWorkbook();
+	Workbook wb = new XSSFWorkbook();
+	
+	protected ActionResult<Wo> execute( HttpServletRequest request, EffectivePerson effectivePerson, Boolean stream ) throws Exception {
+		ActionResult<Wo> result = new ActionResult<>();
+		//Workbook wb = null;
+		Wo wo = null;
+		String fileName = null;
+		Business business = null;
+		
+		
+		// 先获取需要导出的数据
+		try (EntityManagerContainer emc = EntityManagerContainerFactory.instance().create()) {
+			 business = new Business(emc);
+			this.listUnit(business);
+			this.listPerson(business);
+			this.listIdentity(business);
+			this.listDuty(business);
+			this.listGroup(business);
+		} catch (Exception e) {
+			logger.info("系统在查询所有组织人员信息时发生异常。" );
+			e.printStackTrace();
+		}
+		
+		fileName = "person_export_" + DateTools.formatDate(new Date()) + ".xlsx";
+		//创建说明sheet
+		this.createNoticeSheet();
+		
+		// 将组织信息结果组织成EXCEL		
+		if( ListTools.isNotEmpty(allUnitList) ) {
+			this.composeUnit( business, "组织信息", allUnitList );
+		}
+		
+		// 将人员基础信息结果组织成EXCEL		
+		if( ListTools.isNotEmpty(allPersonList) ) {
+			this.composePerson( business, "人员基本信息", allPersonList );
+		}
+
+		// 将人员身份信息结果组织成EXCEL		
+		if( ListTools.isNotEmpty(allPersonList) ) {
+			this.composeIdentity( business, "人员身份信息", allIdentityList );
+		}
+		
+		// 将职务信息结果组织成EXCEL		
+		if( ListTools.isNotEmpty(allDutyList) ) {
+			this.composeDuty( business, "职务信息", allDutyList );
+		}
+		
+		// 将群组信息结果组织成EXCEL		
+		if( ListTools.isNotEmpty(allGroupList) ) {
+			this.composeGroup( business, "群组信息", allGroupList );
+		}
+		
+		if( wb != null ) {
+			ByteArrayOutputStream bos = new ByteArrayOutputStream();
+			try {
+			    wb.write(bos);
+			    wo = new Wo(bos.toByteArray(), 
+						this.contentType(stream, fileName), 
+						this.contentDisposition(stream, fileName));
+			} finally {
+			    bos.close();
+			}
+		}		
+		result.setData(wo);
+		return result;
+	}
+	
+	private void listUnit(Business business) throws Exception {
+		List<Unit> topUnitList = new ArrayList<>();
+		topUnitList = this.listTopUnit(business);
+		if(ListTools.isNotEmpty(topUnitList)){
+			allUnitList.addAll(topUnitList);
+			for (Unit unitItem : topUnitList) {
+				List<Unit> ulist= this.listSubNested(business, unitItem);
+				if(ListTools.isNotEmpty(ulist)){
+					allUnitList.addAll(ulist);
+				}
+			}
+		}
+		
+		if(ListTools.isNotEmpty(allUnitList)){
+			allUnitList = business.unit().sort(allUnitList);
+		}
+	}
+	
+	private void listPerson(Business business) throws Exception {
+		EntityManager em = business.entityManagerContainer().get(Person.class);
+		CriteriaBuilder cb = em.getCriteriaBuilder();
+		CriteriaQuery<Person> cq = cb.createQuery(Person.class);
+		Root<Person> root = cq.from(Person.class);
+		allPersonList = em.createQuery(cq.select(root)).getResultList();
+	}
+	
+	private void listIdentity(Business business) throws Exception {
+		EntityManager em = business.entityManagerContainer().get(Identity.class);
+		CriteriaBuilder cb = em.getCriteriaBuilder();
+		CriteriaQuery<Identity> cq = cb.createQuery(Identity.class);
+		Root<Identity> root = cq.from(Identity.class);
+		allIdentityList = em.createQuery(cq.select(root)).getResultList();
+	}
+	
+	private void listDuty(Business business) throws Exception {
+		EntityManager em = business.entityManagerContainer().get(UnitDuty.class);
+		CriteriaBuilder cb = em.getCriteriaBuilder();
+		CriteriaQuery<UnitDuty> cq = cb.createQuery(UnitDuty.class);
+		Root<UnitDuty> root = cq.from(UnitDuty.class);
+		allDutyList = em.createQuery(cq.select(root)).getResultList();
+	}
+	
+	private void listGroup(Business business) throws Exception {
+		EntityManager em = business.entityManagerContainer().get(Group.class);
+		CriteriaBuilder cb = em.getCriteriaBuilder();
+		CriteriaQuery<Group> cq = cb.createQuery(Group.class);
+		Root<Group> root = cq.from(Group.class);
+		allGroupList = em.createQuery(cq.select(root)).getResultList();
+	}
+
+	private List<Unit> listTopUnit(Business business) throws Exception {
+		EntityManager em = business.entityManagerContainer().get(Unit.class);
+		CriteriaBuilder cb = em.getCriteriaBuilder();
+		CriteriaQuery<Unit> cq = cb.createQuery(Unit.class);
+		Root<Unit> root = cq.from(Unit.class);
+		Predicate p = cb.equal(root.get(Unit_.level), 1);
+		List<Unit> os = em.createQuery(cq.select(root).where(p)).getResultList();
+		return os;
+	}
+	
+	private List<Unit> listSubNested(Business business,Unit unit) throws Exception {
+		List<Unit> os = business.unit().listSubNestedObject(unit);
+		return os;
+	}
+	
+	private void createNoticeSheet() throws Exception {
+		
+			Row row = null;
+			// 创建新的表格
+			Sheet sheet = wb.createSheet("注意事项");
+			
+			// 先创建表头
+			row = sheet.createRow(2);
+			row.createCell(0).setCellValue("注意事项:");
+
+			row = sheet.createRow(4);
+			row.createCell(0).setCellValue("1. 表格内不要做合并(拆分)单元格操作,各列顺序不能变动,更不能删除,否则会造成数据混乱;");
+			
+			row = sheet.createRow(6);
+			row.createCell(0).setCellValue("2. * 为必填项");
+			
+			row = sheet.createRow(8);
+			row.createCell(0).setCellValue("3. 如有特殊要求的格式,详见列名批注;");
+			
+			row = sheet.createRow(10);
+			row.createCell(0).setCellValue("4. 表中示例数据用于示范,实际导入时需删除;");
+			
+			row = sheet.createRow(12);
+			row.createCell(0).setCellValue("5. 每个Sheet页顺序不能变动,本Sheet页不能删除。");
+
+	}
+	
+	private void composeUnit(Business business, String sheetName, List<Unit> unitList) throws Exception {
+		Unit unit = null;
+		EntityManagerContainer em = business.entityManagerContainer();
+		
+		Row row = null;
+		if (ListTools.isNotEmpty(unitList) ) {
+			// 创建新的表格
+			Sheet sheet = wb.createSheet(sheetName);
+			
+			// 先创建表头
+			row = sheet.createRow(0);
+			row.createCell(0).setCellValue("组织名称 *");
+			row.createCell(1).setCellValue("组织编号 *");
+			row.createCell(2).setCellValue("组织级别名称 *");
+			row.createCell(3).setCellValue("上级组织编号");
+			row.createCell(4).setCellValue("描述");
+			row.createCell(5).setCellValue("排序号");
+
+			for (int i = 0; i < unitList.size(); i++) {
+				unit = unitList.get(i);
+				row = sheet.createRow(i + 1);
+				row.createCell(0).setCellValue(unit.getName());
+				row.createCell(1).setCellValue(unit.getUnique());
+				if(ListTools.isNotEmpty(unit.getTypeList())){
+					row.createCell(2).setCellValue(unit.getTypeList().get(0));
+				}else{
+					row.createCell(2).setCellValue("");
+				}
+				
+				String superior = unit.getSuperior();
+				if(StringUtils.isEmpty(superior)){
+					row.createCell(3).setCellValue("");
+				}else{
+					Unit u = null;
+					u = em.flag(unit.getSuperior(), Unit.class);
+					if(u != null){
+						row.createCell(3).setCellValue(u.getUnique());
+					}else{
+						row.createCell(3).setCellValue(unit.getSuperior());
+					}
+					
+				}
+				row.createCell(4).setCellValue(unit.getDescription());
+				row.createCell(5).setCellValue(unit.getOrderNumber()+"");
+				
+			}
+		}
+	}
+	
+	private void composePerson(Business business, String sheetName, List<Person> personList) throws Exception {
+		Person person = null;
+		
+		Row row = null;
+		if (ListTools.isNotEmpty(personList) ) {
+			// 创建新的表格
+			Sheet sheet = wb.createSheet(sheetName);
+			
+			// 先创建表头
+			row = sheet.createRow(0);
+			row.createCell(0).setCellValue("人员姓名 *");
+			row.createCell(1).setCellValue("员工账号 *");
+			row.createCell(2).setCellValue("手机号码 *");
+			row.createCell(3).setCellValue("人员编号");
+			row.createCell(4).setCellValue("办公电话");
+			row.createCell(5).setCellValue("性别");
+			row.createCell(6).setCellValue("邮件");
+
+			for (int i = 0; i < personList.size(); i++) {
+				person = personList.get(i);
+				row = sheet.createRow(i + 1);
+				row.createCell(0).setCellValue(person.getName());
+				row.createCell(1).setCellValue(person.getUnique());
+				row.createCell(2).setCellValue(person.getMobile());
+				row.createCell(3).setCellValue(person.getEmployee());
+				row.createCell(4).setCellValue(person.getOfficePhone());
+				row.createCell(5).setCellValue(person.getGenderType().toString());
+				row.createCell(6).setCellValue(person.getMail());
+				
+			}
+		}
+	}
+	
+	private void composeIdentity(Business business, String sheetName, List<Identity> identityList) throws Exception {
+		Identity identity = null;
+		EntityManagerContainer emc = business.entityManagerContainer();
+		Row row = null;
+		if (ListTools.isNotEmpty(identityList) ) {
+			// 创建新的表格
+			Sheet sheet = wb.createSheet(sheetName);
+			
+			// 先创建表头
+			row = sheet.createRow(0);
+			row.createCell(0).setCellValue("员工账号 *");
+			row.createCell(1).setCellValue("组织编号 *");
+			row.createCell(2).setCellValue("职务编号");
+			row.createCell(3).setCellValue("主兼职");
+
+			for (int i = 0; i < identityList.size(); i++) {
+				identity = identityList.get(i);
+				row = sheet.createRow(i + 1);
+				Person person = emc.flag(identity.getPerson(), Person.class);
+				Unit unit = emc.flag(identity.getUnit(), Unit.class);
+				if(person != null){
+					row.createCell(0).setCellValue(person.getUnique());
+					if(unit != null){
+						String iduty = "";
+						String unitId = "";
+						unitId = unit.getId();
+						row.createCell(1).setCellValue(unit.getUnique());
+						List<UnitDuty> unitDutyList =  this.listDutyWithIdentity(business,identity.getId());
+						
+						if(ListTools.isNotEmpty(unitDutyList)){
+							for(UnitDuty duty :unitDutyList){
+								if(unitId.equals(duty.getUnit())){
+									iduty = duty.getUnique();
+								}
+							}
+							
+						}
+						row.createCell(2).setCellValue(iduty);
+						row.createCell(3).setCellValue(String.valueOf(identity.getMajor()));
+					}
+				}	
+				
+			}
+		}
+	}
+	
+	private void composeDuty(Business business, String sheetName, List<UnitDuty> dutyList) throws Exception {
+		UnitDuty duty = null;
+		
+		Row row = null;
+		if (ListTools.isNotEmpty(dutyList) ) {
+			// 创建新的表格
+			Sheet sheet = wb.createSheet(sheetName);
+			
+			// 先创建表头
+			row = sheet.createRow(0);
+			row.createCell(0).setCellValue("职务编号 *");
+			row.createCell(1).setCellValue("职务名称 *");
+			row.createCell(2).setCellValue("职务描述");
+
+			for (int i = 0; i < dutyList.size(); i++) {
+				duty = dutyList.get(i);
+				row = sheet.createRow(i + 1);
+				row.createCell(0).setCellValue(duty.getUnique());
+				row.createCell(1).setCellValue(duty.getName());
+				row.createCell(2).setCellValue(duty.getDescription());
+			}
+		}
+	}
+	
+	private void composeGroup(Business business, String sheetName, List<Group> groupList) throws Exception {
+		Group group = null;
+		
+		Row row = null;
+		if (ListTools.isNotEmpty(groupList) ) {
+			EntityManagerContainer emc = business.entityManagerContainer();
+			// 创建新的表格
+			Sheet sheet = wb.createSheet(sheetName);
+			
+			// 先创建表头
+			row = sheet.createRow(0);
+			row.createCell(0).setCellValue("群组名称 *");
+			row.createCell(1).setCellValue("群组编号 *");
+			row.createCell(2).setCellValue("人员编号");
+			row.createCell(3).setCellValue("组织编号");
+			row.createCell(4).setCellValue("群组编号");
+			row.createCell(5).setCellValue("描述");
+
+			for (int i = 0; i < groupList.size(); i++) {
+				group = groupList.get(i);
+				row = sheet.createRow(i + 1);
+				int forNumber = i+1;
+				List<String> personList = group.getPersonList();
+				List<String> unitList = group.getUnitList();
+				List<String> groupsList = group.getGroupList();
+				/*System.out.println("personList="+personList.size());
+				System.out.println("unitList="+unitList.size());
+				System.out.println("groupsList="+groupsList.size());*/
+				if(ListTools.isEmpty(personList) && ListTools.isEmpty(unitList) && ListTools.isEmpty(groupsList)){
+					row.createCell(0).setCellValue(group.getName());
+					row.createCell(1).setCellValue(group.getUnique());
+					row.createCell(2).setCellValue("");
+					row.createCell(3).setCellValue("");
+					row.createCell(4).setCellValue("");
+					row.createCell(5).setCellValue(group.getDescription());
+				}else{
+					if(ListTools.isNotEmpty(personList)){
+						for(String personId : personList){
+							Person person = emc.flag(personId, Person.class);
+							if(person != null){
+								row.createCell(0).setCellValue(group.getName());
+								row.createCell(1).setCellValue(group.getUnique());
+								row.createCell(2).setCellValue(person.getUnique());
+								row.createCell(3).setCellValue("");
+								row.createCell(4).setCellValue("");
+							}else{
+								row.createCell(0).setCellValue(group.getName());
+								row.createCell(1).setCellValue(group.getUnique());
+								row.createCell(2).setCellValue("");
+								row.createCell(3).setCellValue("");
+								row.createCell(4).setCellValue("");
+							}
+							row.createCell(5).setCellValue(group.getDescription());
+						} 
+						
+					}
+					if(ListTools.isNotEmpty(unitList)){
+						for(String unitId : unitList){
+							forNumber++;
+							row = sheet.createRow(forNumber);
+							Unit unit = emc.flag(unitId, Unit.class);
+							if(unit != null){
+								row.createCell(0).setCellValue(group.getName());
+								row.createCell(1).setCellValue(group.getUnique());
+								row.createCell(2).setCellValue("");
+								row.createCell(3).setCellValue(unit.getUnique());
+								row.createCell(4).setCellValue("");
+							}else{
+								row.createCell(0).setCellValue(group.getName());
+								row.createCell(1).setCellValue(group.getUnique());
+								row.createCell(2).setCellValue("");
+								row.createCell(3).setCellValue("");
+								row.createCell(4).setCellValue("");
+							}
+							row.createCell(5).setCellValue(group.getDescription());
+						} 
+					}
+					if(ListTools.isNotEmpty(groupsList)){
+						for(String groupId : groupsList){
+							forNumber++;
+							row = sheet.createRow(forNumber);
+							Group grouptemp = emc.flag(groupId, Group.class);
+							if(grouptemp != null){
+								row.createCell(0).setCellValue(group.getName());
+								row.createCell(1).setCellValue(group.getUnique());
+								row.createCell(2).setCellValue("");
+								row.createCell(3).setCellValue("");
+								row.createCell(4).setCellValue(grouptemp.getUnique());
+							}else{
+								row.createCell(0).setCellValue(group.getName());
+								row.createCell(1).setCellValue(group.getUnique());
+								row.createCell(2).setCellValue("");
+								row.createCell(3).setCellValue("");
+								row.createCell(4).setCellValue("");
+							}
+							row.createCell(5).setCellValue(group.getDescription());
+						} 
+					}
+				}
+				
+			}
+		}
+	}
+	
+	private List<PersonAttribute> listAttributeWithPerson(Business business,String personId) throws Exception{
+		EntityManager em = business.entityManagerContainer().get(PersonAttribute.class);
+		CriteriaBuilder cb = em.getCriteriaBuilder();
+		CriteriaQuery<PersonAttribute> cq = cb.createQuery(PersonAttribute.class);
+		Root<PersonAttribute> root = cq.from(PersonAttribute.class);
+		Predicate p = cb.equal(root.get(PersonAttribute_.person), personId);
+		List<PersonAttribute> os = em.createQuery(cq.select(root).where(p)).getResultList();
+		return os;
+	}
+	
+	private List<UnitDuty> listDutyWithIdentity(Business business,String identityId) throws Exception{
+		EntityManager em = business.entityManagerContainer().get(UnitDuty.class);
+		CriteriaBuilder cb = em.getCriteriaBuilder();
+		CriteriaQuery<UnitDuty> cq = cb.createQuery(UnitDuty.class);
+		Root<UnitDuty> root = cq.from(UnitDuty.class);
+		Predicate p = cb.isMember(identityId, root.get(UnitDuty_.identityList));
+		List<UnitDuty> os = em.createQuery(cq.select(root).where(p)).getResultList();
+		return os;
+	}
+
+	public static class Wo extends WoFile {
+		public Wo(byte[] bytes, String contentType, String contentDisposition) {
+			super(bytes, contentType, contentDisposition);
+		}
+	}
+
+}

+ 18 - 0
o2server/x_organization_assemble_control/src/main/java/com/x/organization/assemble/control/jaxrs/export/ExportAction.java

@@ -62,4 +62,22 @@ public class ExportAction extends StandardJaxrsAction {
 		}
 		}
 		asyncResponse.resume(ResponseFactory.getEntityTagActionResultResponse(request, result));
 		asyncResponse.resume(ResponseFactory.getEntityTagActionResultResponse(request, result));
 	}
 	}
+	
+	@JaxrsMethodDescribe(value = "导出人员组织信息", action = ActionExportAll.class)
+	@GET
+	@Path("export/all")
+	@Consumes(MediaType.APPLICATION_JSON)
+	public void exportAllPerson(@Suspended final AsyncResponse asyncResponse, 
+			@Context HttpServletRequest request, 
+			@JaxrsParameterDescribe("用.APPLICATION_OCTET_STREAM头输出") @PathParam("stream") Boolean stream) {
+		ActionResult<ActionExportAll.Wo> result = new ActionResult<>();
+		EffectivePerson effectivePerson = this.effectivePerson(request);
+		try {
+			result = new ActionExportAll().execute(request, effectivePerson, stream);
+		} catch (Exception e) {
+			logger.error(e, effectivePerson, request, null);
+			result.error(e);
+		}
+		asyncResponse.resume(ResponseFactory.getEntityTagActionResultResponse(request, result));
+	}
 }
 }

+ 1159 - 0
o2server/x_organization_assemble_control/src/main/java/com/x/organization/assemble/control/jaxrs/inputperson/ActionInputAll.java

@@ -0,0 +1,1159 @@
+package com.x.organization.assemble.control.jaxrs.inputperson;
+
+import java.io.ByteArrayInputStream;
+import java.io.ByteArrayOutputStream;
+import java.io.InputStream;
+import java.util.ArrayList;
+import java.util.Date;
+import java.util.HashMap;
+import java.util.List;
+import java.util.Map;
+import java.util.Map.Entry;
+import java.util.Random;
+import java.util.regex.Matcher;
+import java.util.regex.Pattern;
+
+import javax.persistence.EntityManager;
+import javax.persistence.criteria.CriteriaBuilder;
+import javax.persistence.criteria.CriteriaQuery;
+import javax.persistence.criteria.Predicate;
+import javax.persistence.criteria.Root;
+import javax.script.Bindings;
+import javax.script.ScriptContext;
+import javax.script.SimpleScriptContext;
+
+import org.apache.commons.lang3.BooleanUtils;
+import org.apache.commons.lang3.StringUtils;
+import org.apache.commons.text.StringEscapeUtils;
+import org.apache.poi.ss.usermodel.Cell;
+import org.apache.poi.ss.usermodel.Row;
+import org.apache.poi.ss.usermodel.Sheet;
+import org.apache.poi.ss.util.CellUtil;
+import org.apache.poi.xssf.usermodel.XSSFWorkbook;
+import org.glassfish.jersey.media.multipart.FormDataContentDisposition;
+
+import com.x.base.core.container.EntityManagerContainer;
+import com.x.base.core.container.factory.EntityManagerContainerFactory;
+import com.x.base.core.entity.type.GenderType;
+import com.x.base.core.project.x_organization_assemble_control;
+import com.x.base.core.project.annotation.FieldDescribe;
+import com.x.base.core.project.cache.ApplicationCache;
+import com.x.base.core.project.config.Config;
+import com.x.base.core.project.connection.ActionResponse;
+import com.x.base.core.project.gson.GsonPropertyObject;
+import com.x.base.core.project.http.ActionResult;
+import com.x.base.core.project.http.EffectivePerson;
+import com.x.base.core.project.logger.Logger;
+import com.x.base.core.project.logger.LoggerFactory;
+import com.x.base.core.project.script.ScriptFactory;
+import com.x.base.core.project.tools.Crypto;
+import com.x.base.core.project.tools.DateTools;
+import com.x.base.core.project.tools.ListTools;
+import com.x.base.core.project.tools.StringTools;
+import com.x.organization.assemble.control.Business;
+import com.x.organization.assemble.control.ThisApplication;
+import com.x.organization.core.entity.Group;
+import com.x.organization.core.entity.Identity;
+import com.x.organization.core.entity.Identity_;
+import com.x.organization.core.entity.Person;
+import com.x.organization.core.entity.PersonAttribute;
+import com.x.organization.core.entity.Role;
+import com.x.organization.core.entity.Unit;
+import com.x.organization.core.entity.UnitDuty;
+
+import net.sf.ehcache.Element;
+
+class ActionInputAll extends BaseAction {
+
+	private static Logger logger = LoggerFactory.getLogger(ActionInputAll.class);
+	
+	private  boolean dutyFlag = false;
+	
+	private  boolean wholeFlag = false;
+	
+	private static Map<String, String> dutyMap = new HashMap<String,String>();
+	
+	List<UnitItem> unit = new ArrayList<>();
+	List<PersonItem> person = new ArrayList<>();
+	List<IdentityItem> identity = new ArrayList<>();
+	List<DutyItem> duty = new ArrayList<>();
+	List<UnitDuty> editduty = new ArrayList<>();
+	List<GroupItem> group = new ArrayList<>();
+	UnitSheetConfigurator configuratorUnit = null;
+	PersonSheetConfigurator configuratorPerson = null;
+	IdentitySheetConfigurator configuratorIdentity = null;
+	DutySheetConfigurator configuratorDuty = null;
+	GroupSheetConfigurator configuratorGroup = null;
+
+	ActionResult<Wo> execute(EffectivePerson effectivePerson, byte[] bytes, FormDataContentDisposition disposition)
+			throws Exception {
+		try (EntityManagerContainer emc = EntityManagerContainerFactory.instance().create();
+				InputStream is = new ByteArrayInputStream(bytes);
+				XSSFWorkbook workbook = new XSSFWorkbook(is);
+				ByteArrayOutputStream os = new ByteArrayOutputStream()) { 
+			Business business = new Business(emc);
+			ActionResult<Wo> result = new ActionResult<>();
+			this.scanUnit(business, workbook);
+			String name = "person_input_" + DateTools.formatDate(new Date()) + ".xlsx";
+			workbook.write(os);
+			CacheInputResult cacheInputResult = new CacheInputResult();
+			cacheInputResult.setName(name);
+			cacheInputResult.setBytes(os.toByteArray());
+			String flag = StringTools.uniqueToken();
+			cache.put(new Element(flag, cacheInputResult));
+			ApplicationCache.notify(Person.class);
+			ApplicationCache.notify(Group.class);
+			ApplicationCache.notify(Role.class);
+			ApplicationCache.notify(Identity.class);
+			ApplicationCache.notify(PersonAttribute.class);
+			ApplicationCache.notify(Unit.class);
+			ApplicationCache.notify(UnitDuty.class);
+			Wo wo = new Wo();
+			wo.setFlag(flag);
+			result.setData(wo);
+			return result;
+		}
+	}
+
+	
+	
+	private void scanUnit(Business business, XSSFWorkbook workbook) throws Exception {
+	//导入组织信息
+		System.out.println("开始导入人员组织所有数据--------start");
+			Sheet sheet = workbook.getSheetAt(1);
+			configuratorUnit = new UnitSheetConfigurator(workbook, sheet);
+			unit = this.scanUnitList(configuratorUnit, sheet);
+			wholeFlag = this.checkUnit(business, workbook, configuratorUnit, unit); 
+			if(wholeFlag){
+				//this.persistUnit(workbook, configurator, unit);
+				this.scanPerson(business, workbook);
+			}
+	}
+	
+	private void scanPerson(Business business, XSSFWorkbook workbook) throws Exception {
+	//导入人员信息	
+		Sheet sheet = workbook.getSheetAt(2);
+		configuratorPerson = new PersonSheetConfigurator(workbook, sheet);
+		person = this.scanPersonList(configuratorPerson, sheet);
+		System.out.println("person="+person.size());
+		wholeFlag = this.checkPerson(business, workbook, configuratorPerson, person); 
+		if(wholeFlag){
+			this.scanIdentity(business, workbook,person,unit);
+		}
+	}
+	
+	private void scanIdentity(Business business, XSSFWorkbook workbook ,List<PersonItem> persons,List<UnitItem> units) throws Exception {
+		//导入身份信息	
+			Sheet sheet = workbook.getSheetAt(3);
+			configuratorIdentity = new IdentitySheetConfigurator(workbook, sheet);
+			//校验导入的职务信息
+			this.scanDuty(business,workbook);
+			if(!dutyFlag){
+				wholeFlag = this.checkIdentity(business, workbook, configuratorIdentity, sheet,persons,units); 
+				if(wholeFlag){
+						
+						if(wholeFlag){
+							//保存组织,人员
+							System.out.println("开始导入组织信息--------");
+							this.persistUnit(workbook, configuratorUnit, unit);
+							System.out.println("开始导入人员信息--------");
+							this.persistPerson(business,workbook, configuratorPerson, person);
+							System.out.println("开始导入身份信息--------");
+							identity = this.scanIdentityList(business,configuratorIdentity, sheet);
+							//保存身份
+							this.persistIdentity(workbook, configuratorIdentity, identity);
+							System.out.println("开始导入职务信息--------");
+							//保存职务
+							duty = this.scanDutyList(business,identity, sheet);
+							//this.persistDuty(workbook, configuratorDuty, duty);
+							this.persistDuty(workbook, configuratorDuty, duty,business);
+							
+							//保存群组
+							//校验群组
+							wholeFlag = this.checkGroup(business,workbook,person,unit);
+							System.out.println("开始导入群组信息--------");
+							this.scanGroup(business,workbook,person,unit);
+							this.persistGroup(business,workbook, configuratorGroup, group);
+							System.out.println("开始导入人员组织所有数据--------end");
+						}
+													
+				}
+			}
+			
+			
+	}
+	
+	private void scanDuty(Business business, XSSFWorkbook workbook) throws Exception  {
+		//导入职务信息	
+			Sheet sheet = workbook.getSheetAt(4);
+			DutySheetConfigurator configurator = new DutySheetConfigurator(workbook, sheet);
+			for (int i = configurator.getFirstRow(); i <= configurator.getLastRow(); i++) {
+				Row row = sheet.getRow(i);
+				if (null != row) {
+					String name = configurator.getCellStringValue(row.getCell(configurator.getNameColumn()));
+					String key = configurator.getCellStringValue(row.getCell(configurator.getUniqueColumn()));
+					//System.out.println("职务name="+name+"_职务value="+key);
+					if(StringUtils.isNotEmpty(name) && StringUtils.isNotEmpty(key)){
+						dutyMap.put(key, name);
+						
+					}else{
+						dutyFlag = true;
+					}
+				}
+			}
+	}
+	private void scanGroup(Business business, XSSFWorkbook workbook ,List<PersonItem> persons,List<UnitItem> units) throws Exception {
+		//导入群组信息	
+			Sheet sheet = workbook.getSheetAt(5);
+			configuratorGroup = new GroupSheetConfigurator(workbook, sheet);
+			group = this.scanGroupList(business,configuratorGroup, sheet);
+		
+	}
+
+	private List<UnitItem> scanUnitList(UnitSheetConfigurator configurator, Sheet sheet) throws Exception {
+		if (null == configurator.getNameColumn()) {
+			throw new ExceptionUnitNameColumnEmpty();
+		}
+		if (null == configurator.getUniqueColumn()) {
+			throw new ExceptionUnitUniqueColumnEmpty();
+		}
+		if (null == configurator.getUnitTypeColumn()) {
+			throw new ExceptionTypeCodeColumnEmpty();
+		}
+		List<UnitItem> units = new ArrayList<>();
+		for (int i = configurator.getFirstRow(); i <= configurator.getLastRow(); i++) {
+			Row row = sheet.getRow(i);
+			if (null != row) {
+				String name = configurator.getCellStringValue(row.getCell(configurator.getNameColumn()));
+				UnitItem unitItem = new UnitItem();
+				//if (StringUtils.isNotEmpty(name)) {
+					unitItem.setRow(i);
+					name = StringUtils.trimToEmpty(name);
+					unitItem.setName(name);
+					if (null != configurator.getUniqueColumn()) {
+						String unique = configurator.getCellStringValue(row.getCell(configurator.getUniqueColumn()));
+						unique = StringUtils.trimToEmpty(unique);
+						unitItem.setUnique(unique);
+					}
+					if (null != configurator.getUnitTypeColumn()) {
+						String typeList = configurator.getCellStringValue(row.getCell(configurator.getUnitTypeColumn()));
+						typeList = StringUtils.trimToEmpty(typeList);
+						/*typeList = typeMap.get(typeList);
+						System.out.println("typeListx="+typeList);*/
+						List<String> typeListStr = new ArrayList<>();
+						typeListStr.add(typeList);
+						unitItem.setTypeList(typeListStr);
+					}
+					if (null != configurator.getSuperiorColumn()) {
+						String superior = configurator.getCellStringValue(row.getCell(configurator.getSuperiorColumn()));
+						superior = StringUtils.trimToEmpty(superior);
+						unitItem.setSuperior(superior);
+					}
+					if (null != configurator.getOrderNumberColumn()) {
+						String orderNumber = configurator.getCellStringValue(row.getCell(configurator.getOrderNumberColumn()));
+						orderNumber = StringUtils.trimToEmpty(orderNumber);
+						Integer order = null;
+						if(orderNumber!=null){
+							order = Integer.valueOf(orderNumber);
+						}
+						unitItem.setOrderNumber(order);
+					}
+					if (null != configurator.getDescriptionColumn()) {
+						String description = configurator.getCellStringValue(row.getCell(configurator.getDescriptionColumn()));
+						description = StringUtils.trimToEmpty(description);
+						unitItem.setDescription(description);
+					}
+					
+					if (!configurator.getAttributes().isEmpty()) {
+						for (Entry<String, Integer> en : configurator.getAttributes().entrySet()) {
+							String value = configurator.getCellStringValue(row.getCell(en.getValue()));
+							value = StringUtils.trimToEmpty(value);
+							unitItem.getAttributes().put(en.getKey(), value);
+						}
+					}
+					//unit.add(unitItem);
+					logger.debug("scan unit:{}.", unitItem);
+				//}
+				units.add(unitItem);
+			}
+		}
+		return units;
+	}
+	
+	private List<PersonItem> scanPersonList(PersonSheetConfigurator configurator, Sheet sheet) throws Exception {
+		if (null == configurator.getNameColumn()) {
+			throw new ExceptionNameColumnEmpty();
+		}
+		/*if (null == configurator.getUniqueColumn()) {
+			throw new ExceptionUniqueColumnEmpty();
+		}*/
+		if (null == configurator.getEmployeeColumn()) {
+			throw new ExceptionEmployeeColumnEmpty();
+		}
+		if (null == configurator.getMobileColumn()) {
+			throw new ExceptionMobileColumnEmpty();
+		}
+		//System.out.println(configurator.getAttributes().get(""));
+		/*if (configurator.getAttributes().isEmpty()) {
+			throw new ExceptionIdNumberColumnEmpty();
+		}*/
+		List<PersonItem> peoples = new ArrayList<>();
+		for (int i = configurator.getFirstRow(); i <= configurator.getLastRow(); i++) {
+			Row row = sheet.getRow(i);
+			if (null != row) {
+				String name = configurator.getCellStringValue(row.getCell(configurator.getNameColumn()));
+				String mobile = configurator.getCellStringValue(row.getCell(configurator.getMobileColumn()));
+				//if (StringUtils.isNotEmpty(name) && StringUtils.isNotEmpty(mobile)) {
+					PersonItem personItem = new PersonItem();
+					personItem.setRow(i);
+					name = StringUtils.trimToEmpty(name);
+					//mobile = StringUtils.trimToEmpty(mobile);
+					GenderType genderType = GenderType.d;
+					if (null != configurator.getGenderTypeColumn()) {
+						String gender = configurator
+								.getCellStringValue(row.getCell(configurator.getGenderTypeColumn()));
+						gender = StringUtils.trimToEmpty(gender);
+						if (genderTypeMaleItems.contains(gender)) {
+							genderType = GenderType.m;
+						}
+						if (genderTypeFemaleItems.contains(gender)) {
+							genderType = GenderType.f;
+						}
+					}
+					personItem.setName(name);
+					personItem.setGenderType(genderType);
+					
+					if(StringUtils.isNotEmpty(mobile)){
+						personItem.setMobile(mobile);
+					}else{
+						personItem.setMobile("139"+this.getCard());
+					}
+					
+			
+					if (null != configurator.getEmployeeColumn()) {
+						String employee = configurator
+								.getCellStringValue(row.getCell(configurator.getEmployeeColumn()));
+						employee = StringUtils.trimToEmpty(employee);
+						personItem.setEmployee(employee);
+					}
+					if (null != configurator.getUniqueColumn()) {
+						String unique = configurator.getCellStringValue(row.getCell(configurator.getUniqueColumn()));
+						unique = StringUtils.trimToEmpty(unique);
+						personItem.setUnique(unique);
+						
+						if(null == configurator.getEmployeeColumn()){
+							personItem.setEmployee(unique);
+						}
+					}
+					if (null != configurator.getOfficePhoneColumn()) {
+						String officePhone = configurator.getCellStringValue(row.getCell(configurator.getOfficePhoneColumn()));
+						officePhone = StringUtils.trimToEmpty(officePhone);
+						personItem.setOfficePhone(officePhone);
+					}
+					if (null != configurator.getMailColumn()) {
+						String mail = configurator.getCellStringValue(row.getCell(configurator.getMailColumn()));
+						mail = StringUtils.trimToEmpty(mail);
+						personItem.setMail(mail);
+					}
+					if (!configurator.getAttributes().isEmpty()) {
+						for (Entry<String, Integer> en : configurator.getAttributes().entrySet()) {
+							String value = configurator.getCellStringValue(row.getCell(en.getValue()));
+							value = StringUtils.trimToEmpty(value);
+							personItem.getAttributes().put(en.getKey(), value);
+						}
+					}
+					peoples.add(personItem);
+					logger.debug("scan person:{}.", personItem);
+				//}
+			}
+		}
+		return peoples;
+	}
+	
+	private List<IdentityItem> scanIdentityList(Business business,IdentitySheetConfigurator configurator, Sheet sheet) throws Exception {
+
+		if (null == configurator.getUniqueColumn()) {
+			throw new ExceptionUniqueColumnEmpty();
+		}
+		if (null == configurator.getUnitCodeColumn()) {
+			throw new ExceptionUnitUniqueColumnEmpty();
+		}
+
+		List<IdentityItem> identitys = new ArrayList<>();
+		for (int i = configurator.getFirstRow(); i <= configurator.getLastRow(); i++) {
+			Row row = sheet.getRow(i);
+			if (null != row) {
+				String unique = configurator.getCellStringValue(row.getCell(configurator.getUniqueColumn()));
+				String unitCode = configurator.getCellStringValue(row.getCell(configurator.getUnitCodeColumn()));
+				String dutyCode = configurator.getCellStringValue(row.getCell(configurator.getDutyCodeColumn()));
+				String majorStr = configurator.getCellStringValue(row.getCell(configurator.getMajorColumn()));
+				Boolean major = false;
+				if(majorStr.equals("true")){
+					major = BooleanUtils.toBooleanObject(majorStr);
+				}
+				//if (StringUtils.isNotEmpty(name) && StringUtils.isNotEmpty(mobile)) {
+					IdentityItem identityItem = new IdentityItem();
+					identityItem.setRow(i);
+					identityItem.setPersonCode(unique);
+					identityItem.setUnitCode(unitCode);
+					identityItem.setMajor(major);
+					
+					if(StringUtils.isNotEmpty(dutyCode)){
+						identityItem.setDutyCode(dutyCode);
+					}
+					
+					EntityManagerContainer emc = business.entityManagerContainer();
+					Person personobj = null;
+					personobj = emc.flag(unique, Person.class);
+					if(personobj != null){
+						identityItem.setName(StringUtils.trimToEmpty(personobj.getName()));
+						identityItem.setPerson(StringUtils.trimToEmpty(personobj.getId()));					
+					}
+					
+					Unit u = null;
+					u = emc.flag(unitCode, Unit.class);
+					if(u != null){
+						identityItem.setUnit(u.getId());
+						identityItem.setUnitLevel(u.getLevel());
+						identityItem.setUnitLevelName(u.getLevelName());
+						identityItem.setUnitName(u.getName());					
+					}
+					identitys.add(identityItem);
+					
+					int idcount = 0;
+					for(IdentityItem idItem : identitys){
+						if(unique.equals(idItem.getPersonCode()) && unitCode.equals(idItem.getUnitCode())){
+							idcount = idcount+1;
+						}
+					}
+					if(idcount>1){
+						identitys.remove(identityItem);
+					}
+					logger.debug("scan identity:{}.", identityItem);
+				//}
+			}
+		}
+		return identitys;
+	}
+	
+	private List<GroupItem> scanGroupList(Business business,GroupSheetConfigurator configurator, Sheet sheet) throws Exception {
+
+		List<GroupItem> groups = new ArrayList<>();
+		for (int i = configurator.getFirstRow(); i <= configurator.getLastRow(); i++) {
+			Row row = sheet.getRow(i);
+			if (null != row) {
+				String name = configurator.getCellStringValue(row.getCell(configurator.getNameColumn()));
+				String unique = configurator.getCellStringValue(row.getCell(configurator.getUniqueColumn()));
+				String personCode = configurator.getCellStringValue(row.getCell(configurator.getPersonCodeColumn()));
+				String unitCode = configurator.getCellStringValue(row.getCell(configurator.getUnitCodeColumn()));
+				String groupCode = configurator.getCellStringValue(row.getCell(configurator.getGroupCodeColumn()));
+				
+				//if (StringUtils.isNotEmpty(name) && StringUtils.isNotEmpty(mobile)) {
+					GroupItem groupItem = new GroupItem();
+					groupItem.setRow(i);
+					groupItem.setPersonCode(personCode);
+					groupItem.setUnitCode(unitCode);
+					groupItem.setName(name);
+					groupItem.setUnique(unique);
+					
+					EntityManagerContainer emc = business.entityManagerContainer();
+					Person personobj = null;
+					personobj = emc.flag(personCode, Person.class);
+					if(personobj != null){
+						List<String> personList = new ArrayList<>();
+						personList.add(personobj.getId());
+						groupItem.setPersonList(personList);			
+					}
+					
+					Unit u = null;
+					u = emc.flag(unitCode, Unit.class);
+					
+					if(u != null){
+						List<String> unitList = new ArrayList<>();
+						unitList.add(u.getId());
+						groupItem.setUnitList(unitList);
+					}
+					if(StringUtils.isNotEmpty(groupCode)){
+						groupItem.setGroupCode(groupCode);
+						Group groupobj = emc.flag(groupCode, Group.class);
+						 if(groupobj != null){
+							 List<String> groupList = new ArrayList<>();
+							 groupList.add(groupobj.getId());
+							 groupItem.setGroupList(groupList);
+						 }else{
+							 
+						 }
+					}
+					
+					groups.add(groupItem);
+					logger.debug("scan group:{}.", groupItem);
+				//}
+			}
+		}
+		return groups;
+	}
+	
+	private List<DutyItem> scanDutyList(Business business,List<IdentityItem> identityItems, Sheet sheet) throws Exception {
+		
+		List<DutyItem> dutys = new ArrayList<>();
+		for (int i = 0; i < identityItems.size(); i++) {
+			IdentityItem identutyIt = identityItems.get(i);
+			if (null != identutyIt) {
+				String dutyCode = identutyIt.getDutyCode();
+				String unitCode = identutyIt.getUnitCode();
+				String personCode = identutyIt.getPersonCode();
+				List<Identity> identitys = new ArrayList<>();
+				
+				if(StringUtils.isNotEmpty(dutyCode)){
+					DutyItem dutyItem = new DutyItem();
+					dutyItem.setRow(i+1);
+					dutyItem.setName(dutyMap.get(dutyCode));
+					EntityManagerContainer emc = business.entityManagerContainer();
+					
+					Unit u = null;
+					String unitId = null;
+					u = emc.flag(unitCode, Unit.class);
+					if(u != null){
+						dutyItem.setUnit(u.getId());
+						unitId = u.getId();
+						dutyItem.setUnique(dutyCode+unitId);
+					}
+					
+					Person personObj = null;
+					personObj = emc.flag(personCode, Person.class);
+					if(personObj != null){
+						EntityManager em = business.entityManagerContainer().get(Identity.class);
+						CriteriaBuilder cb = em.getCriteriaBuilder();
+						CriteriaQuery<Identity> cq = cb.createQuery(Identity.class);
+						Root<Identity> root = cq.from(Identity.class);
+						//System.out.println("personid="+personObj.getId());
+						Predicate p = cb.equal(root.get(Identity_.person), personObj.getId());	
+						p = cb.and(p,cb.equal(root.get(Identity_.unit), u.getId()));
+						identitys = em.createQuery(cq.select(root).where(p)).getResultList();
+						
+						if(personCode.equals("zhengping2")){
+							System.out.println("identitys="+identitys.size());
+						}
+					}
+					
+					
+					if(ListTools.isNotEmpty(identitys)){
+						List<String> didylist = new ArrayList<>();
+						/*for (Identity identity : identitys) {
+							if(unitId.equals(identity.getUnit())){
+								//System.out.println("unitCode="+unitCode);
+								didylist.add(identity.getDistinguishedName());
+							}
+						}*/
+						didylist.add(identitys.get(0).getId());
+						dutyItem.setIdentityList(didylist);
+					}
+					
+					logger.debug("scan duty:{}.", dutyItem);
+					dutys.add(dutyItem);
+				}
+				
+					
+				
+			}
+		}
+		return dutys;
+	}
+
+	private boolean checkUnit(Business business, XSSFWorkbook workbook, UnitSheetConfigurator configurator,
+			List<UnitItem> unit) throws Exception {
+		//校验导入的组织
+		EntityManagerContainer emc = business.entityManagerContainer();
+		boolean validate = true;
+		for (UnitItem o : unit) {
+			//System.out.println("正在校验组织:{}."+ o.getName());
+			if (StringUtils.isEmpty(o.getName())) {
+				this.setUnitMemo(workbook, configurator, o, "组织名称不能为空.");
+				validate = false;
+				continue;
+			}
+			if (StringUtils.isEmpty(o.getUnique())) {
+				this.setUnitMemo(workbook, configurator, o, "组织编号不能为空.");
+				validate = false;
+				continue;
+			}
+			if (ListTools.isEmpty(o.getTypeList())) {
+				this.setUnitMemo(workbook, configurator, o, "组织级别名称不能为空.");
+				validate = false;
+				continue;
+			}
+			this.setUnitMemo(workbook, configurator, o, "校验通过.");
+		}
+		if (validate) {
+			for (UnitItem o : unit) {
+				for (UnitItem item : unit) {
+					if (o != item) {
+						if (StringUtils.isNotEmpty(o.getUnique()) && StringUtils.equals(o.getUnique(), item.getUnique())) {
+							this.setUnitMemo(workbook, configurator, o, "唯一编码冲突,本次导入中不唯一.");
+							validate = false;
+							continue;
+						}
+					}
+				}
+				
+				Unit p = null;
+				p = emc.flag(o.getUnique(), Unit.class);
+				if (null != p) {
+					this.setUnitMemo(workbook, configurator, o, "组织编号: " + o.getUnique() + " 与已经存在组织: " + p.getName() + " 冲突.");
+					validate = false;
+					continue;
+				}
+				this.setUnitMemo(workbook, configurator, o, "校验通过.");
+			}
+		}
+		return validate;
+	}
+	
+	private boolean checkPerson(Business business, XSSFWorkbook workbook, PersonSheetConfigurator configurator,
+			List<PersonItem> person) throws Exception {
+		//校验导入的人员
+		EntityManagerContainer emc = business.entityManagerContainer();
+		boolean validate = true;
+		for (PersonItem o : person) {
+			//System.out.println("正在校验用户:{}."+ o.getName());
+			if (StringUtils.isEmpty(o.getName())) {
+				this.setPersonMemo(workbook, configurator, o, "人员姓名不能为空.");
+				validate = false;
+				continue;
+			}
+			/*if (StringUtils.isEmpty(o.getUnique())) {
+				this.setPersonMemo(workbook, configurator, o, "人员编号不能为空.");
+				validate = false;
+				continue;
+			}*/
+			if (StringUtils.isEmpty(o.getUnique())) {
+				this.setPersonMemo(workbook, configurator, o, "员工账号不能为空.");
+				validate = false;
+				continue;
+			}
+			if (StringUtils.isEmpty(o.getMobile())) {
+				this.setPersonMemo(workbook, configurator, o, "手机号码不能为空.");
+				validate = false;
+				continue;
+			}
+			this.setPersonMemo(workbook, configurator, o, "校验通过.");
+			/*if(o.getAttributes().isEmpty()|| StringUtils.isEmpty(o.getAttributes().get("idNumber"))){
+				this.setPersonMemo(workbook, configurator, o, "身份证号不能为空.");
+				validate = false;
+				continue;
+			}*/
+		}
+		if (validate) {
+			for (PersonItem o : person) {
+				for (PersonItem item : person) {
+					if (o != item) {
+						if (StringUtils.isNotEmpty(o.getUnique()) && StringUtils.equals(o.getUnique(), item.getUnique())) {
+							this.setPersonMemo(workbook, configurator, o, "员工账号冲突,本次导入中不唯一.");
+							validate = false;
+							continue;
+						}
+					}
+				}
+				Person p = null;
+				p = emc.flag(o.getUnique(), Person.class);
+				if (null != p) {
+					this.setPersonMemo(workbook, configurator, o, "员工账号: " + o.getUnique() + " 与已经存在人员: " + p.getName() + " 冲突.");
+					validate = false;
+					continue;
+				}
+				this.setPersonMemo(workbook, configurator, o, "校验通过.");
+			}
+		}
+		return validate;
+	}
+	
+	private boolean checkIdentity(Business business, XSSFWorkbook workbook, IdentitySheetConfigurator configurator,
+			 Sheet sheet ,List<PersonItem> persons,List<UnitItem> units) throws Exception {
+		//校验导入的身份
+		if (null == configurator.getUniqueColumn()) {
+			throw new ExceptionUniqueColumnEmpty();
+		}
+		if (null == configurator.getUnitCodeColumn()) {
+			throw new ExceptionUnitUniqueColumnEmpty();
+		}
+		List<IdentityItem> identitys = new ArrayList<>();	
+		EntityManagerContainer emc = business.entityManagerContainer();
+		boolean validate = true;
+		for (int i = configurator.getFirstRow(); i <= configurator.getLastRow(); i++) {
+			Row row = sheet.getRow(i);
+			if (null != row) {
+				String unique = configurator.getCellStringValue(row.getCell(configurator.getUniqueColumn()));
+				String unitCode = configurator.getCellStringValue(row.getCell(configurator.getUnitCodeColumn()));
+				String dutyCode = configurator.getCellStringValue(row.getCell(configurator.getDutyCodeColumn()));
+				//System.out.println("正在校验人员身份 :{}."+ unique);
+				boolean personcheck = false;
+				boolean unitcheck = false;
+				IdentityItem identityItem = new IdentityItem();
+				identityItem.setRow(i);
+				identitys.add(identityItem);
+				if (StringUtils.isEmpty(unique)) {
+					this.setIdentityMemo(workbook, configurator, identityItem, "员工账号不能为空.");
+					validate = false;
+					continue;
+				}
+				if (StringUtils.isEmpty(unitCode)) {
+					this.setIdentityMemo(workbook, configurator, identityItem, "组织编号不能为空.");
+					validate = false;
+					continue;
+				}
+				if (StringUtils.isNotEmpty(dutyCode)) {
+					String dutyName = dutyMap.get(dutyCode);
+					if (StringUtils.isEmpty(dutyName)) {
+						this.setIdentityMemo(workbook, configurator, identityItem, "系统没有对应的职务.");
+						validate = false;
+						continue;
+					}
+					
+				}
+				
+				Person person = null;
+				person = emc.flag(unique, Person.class);
+				if(person != null){
+					personcheck = true;
+				}else{
+					for (PersonItem personItem : persons) {
+						if (StringUtils.isNotEmpty(personItem.getUnique()) && StringUtils.equals(personItem.getUnique(), unique)) {
+							personcheck = true;
+						}
+					}
+				}
+				
+				Unit unit = null;
+				unit = emc.flag(unitCode, Unit.class);
+				if(unit != null){
+					unitcheck = true;
+				}else{
+					for (UnitItem unitItem : units) {
+						if (StringUtils.isNotEmpty(unitItem.getUnique()) && StringUtils.equals(unitItem.getUnique(), unitCode)) {
+							unitcheck = true;
+						}
+					}
+				}
+				
+				if (!personcheck) {
+					this.setIdentityMemo(workbook, configurator, identityItem, "系统不存在该人员.");
+					validate = false;
+					continue;
+				}
+				if (!unitcheck) {
+					this.setIdentityMemo(workbook, configurator, identityItem, "系统不存在该组织.");
+					validate = false;
+					continue;
+				}
+				
+				//if (validate) {
+					this.setIdentityMemo(workbook, configurator, identityItem, "校验通过.");
+				//}
+				
+			}
+		}
+		
+		/*if (validate) {
+			for (IdentityItem o : identitys) {
+				this.setIdentityMemo(workbook, configurator, o, "校验通过.");
+			}
+		}*/
+		return validate;
+	}
+	
+	private boolean checkGroup(Business business, XSSFWorkbook workbook, List<PersonItem> persons,List<UnitItem> units) throws Exception {
+		//校验导入的群组
+		Sheet sheet = workbook.getSheetAt(5);
+		configuratorGroup = new GroupSheetConfigurator(workbook, sheet);
+		GroupSheetConfigurator configurator = configuratorGroup;
+		
+		if (null == configurator.getNameColumn()) {
+			throw new ExceptionGroupNameColumnEmpty();
+		}
+		if (null == configurator.getUniqueColumn()) {
+			throw new ExceptionGroupCodeColumnEmpty();
+		}
+		
+		List<GroupItem> groups = new ArrayList<>();	
+		EntityManagerContainer emc = business.entityManagerContainer();
+		boolean validate = true;
+		for (int i = configurator.getFirstRow(); i <= configurator.getLastRow(); i++) {
+			Row row = sheet.getRow(i);
+			if (null != row) {
+				String name = configurator.getCellStringValue(row.getCell(configurator.getNameColumn()));
+				String unique = configurator.getCellStringValue(row.getCell(configurator.getUniqueColumn()));
+				String personCode = configurator.getCellStringValue(row.getCell(configurator.getPersonCodeColumn()));
+				String unitCode = configurator.getCellStringValue(row.getCell(configurator.getUnitCodeColumn()));
+				
+				//System.out.println("正在校验群组 :{}."+ name);
+				boolean personcheck = false;
+				boolean unitcheck = false;
+				GroupItem groupItem = new GroupItem();
+				groupItem.setRow(i);
+				groups.add(groupItem);
+				if (StringUtils.isEmpty(name)) {
+					this.setGroupMemo(workbook, configurator, groupItem, "群组名称不能为空.");
+					validate = false;
+					continue;
+				}
+				if (StringUtils.isEmpty(unique)) {
+					this.setGroupMemo(workbook, configurator, groupItem, "群组编号不能为空.");
+					validate = false;
+					continue;
+				}
+				
+				Person person = null;
+				person = emc.flag(personCode, Person.class);
+				if(person != null){
+					personcheck = true;
+				}else{
+					for (PersonItem personItem : persons) {
+						if (StringUtils.isNotEmpty(personItem.getUnique()) && StringUtils.equals(personItem.getUnique(), personCode)) {
+							personcheck = true;
+						}
+					}
+				}
+				
+				if(StringUtils.isEmpty(unitCode)){
+					unitcheck = true;
+				}else{
+					Unit unit = null;
+					unit = emc.flag(unitCode, Unit.class);
+					if(unit != null){
+						unitcheck = true;
+					}else{
+						for (UnitItem unitItem : units) {
+							if (StringUtils.isNotEmpty(unitItem.getUnique()) && StringUtils.equals(unitItem.getUnique(), unitCode)) {
+								unitcheck = true;
+							}
+						}
+					}
+				}
+				
+				
+				if (!personcheck) {
+					this.setGroupMemo(workbook, configurator, groupItem, "系统不存在该人员.");
+					validate = false;
+					continue;
+				}
+				if (!unitcheck) {
+					this.setGroupMemo(workbook, configurator, groupItem, "系统不存在该组织.");
+					validate = false;
+					continue;
+				}
+				
+				//if (validate) {
+					this.setGroupMemo(workbook, configurator, groupItem, "校验通过.");
+				//}
+				
+			}
+		}
+		
+		/*if (validate) {
+			for (GroupItem o : groups){
+				this.setGroupMemo(workbook, configurator, o, "校验通过.");
+			}
+		}*/
+		return validate;
+	}
+	
+	
+	private void persistUnit(XSSFWorkbook workbook, UnitSheetConfigurator configurator, List<UnitItem> unitItems) throws Exception {
+		for (List<UnitItem> list : ListTools.batch(unitItems, 200)) {
+			for (UnitItem o : list) {
+				logger.debug("正在保存组织:{}.", o.getName());
+				Unit unitObject = new Unit();
+				o.copyTo(unitObject);
+				
+				String resp = this.saveUnit("unit", unitObject);
+				
+				if("".equals(resp)){
+					this.setUnitMemo(workbook, configurator, o, "已导入.");
+				}else{
+					System.out.println("respMass="+resp);
+					this.setUnitMemo(workbook, configurator, o, resp);
+				}
+				
+			}
+		}
+	}
+	private void persistPerson(Business business,XSSFWorkbook workbook, PersonSheetConfigurator configurator, List<PersonItem> personItems) throws Exception {
+		//EntityManagerContainer emc = business.entityManagerContainer();
+		for (List<PersonItem> list : ListTools.batch(personItems, 200)) {
+			for (PersonItem o : list) {
+				logger.debug("正在保存人员:{}.", o.getName());
+				Person personObject = new Person();
+				o.copyTo(personObject);
+				
+				String resp = this.savePerson("person", personObject);
+				
+				if("".equals(resp)){
+					this.setPersonMemo(workbook, configurator, o, "已导入.");
+				}else{
+					System.out.println("respMass="+resp);
+					this.setPersonMemo(workbook, configurator, o, resp);
+				}
+				
+			}
+		}
+	}
+	
+	private void persistIdentity(XSSFWorkbook workbook, IdentitySheetConfigurator configurator, List<IdentityItem> identityItems) throws Exception {
+		for (List<IdentityItem> list : ListTools.batch(identityItems, 200)) {
+			for (IdentityItem o : list) {
+				logger.debug("正在保存人员:{}.", o.getName());
+				Identity identityObject = new Identity();
+				o.copyTo(identityObject);
+				
+				String resp = this.saveIdentity("identity", identityObject);
+				
+				if("".equals(resp)){
+					this.setIdentityMemo(workbook, configurator, o, "已导入.");
+				}else{
+					System.out.println("respMass="+resp);
+					this.setIdentityMemo(workbook, configurator, o, resp);
+				}
+				
+			}
+		}
+	}
+	
+	private void persistDuty(XSSFWorkbook workbook, DutySheetConfigurator configurator, List<DutyItem> dutyItems,Business business) throws Exception {
+		EntityManagerContainer emc = business.entityManagerContainer();
+		for (List<DutyItem> list : ListTools.batch(dutyItems, 200)) {
+			for (DutyItem o : list) {
+				if(StringUtils.isNotEmpty(o.getUnique()) && this.getDuty(emc,o)){
+				}else{
+					logger.debug("正在保存职务:{}.", o.getName());
+					UnitDuty dutyObject = new UnitDuty();
+					o.copyTo(dutyObject);
+					String resp = this.saveDuty("unitduty", dutyObject);
+					if("".equals(resp)){
+					}else{
+						System.out.println("respMassduty="+resp);
+					}
+					
+				}
+				
+			}
+		}
+		
+	}
+	
+	private void persistGroup(Business business,XSSFWorkbook workbook, GroupSheetConfigurator configurator, List<GroupItem> groupItems) throws Exception {
+		EntityManagerContainer emc = business.entityManagerContainer();
+		for (List<GroupItem> list : ListTools.batch(groupItems, 200)) {
+			for (GroupItem o : list) {
+				Group g = emc.flag(o.getUnique(), Group.class);
+				if(g != null){
+					List<String> personList = g.getPersonList();
+					List<String> unitList = g.getUnitList();
+					List<String> groupList = g.getGroupList();
+					if(ListTools.isNotEmpty(o.getPersonList())){
+						personList.addAll(o.getPersonList());
+					}
+					if(ListTools.isNotEmpty(o.getUnitList())){
+						unitList.addAll(o.getUnitList());
+					}
+					if(ListTools.isNotEmpty(o.getGroupList())){
+						groupList.addAll(o.getGroupList());
+					}
+					if(StringUtils.isNotEmpty(o.getGroupCode())){
+						Group gp = emc.flag(o.getGroupCode(), Group.class);
+						groupList.add(gp.getId());
+					}
+					
+					g.setPersonList(personList);
+					g.setUnitList(unitList);
+					g.setGroupList(groupList);
+					
+					String respEdit = this.editGroup("group/"+g.getId(), g);
+					
+					if("".equals(respEdit)){
+						this.setGroupMemo(workbook, configurator, o, "已导入.");
+					}else{
+						System.out.println("respEditMass="+respEdit);
+						this.setGroupMemo(workbook, configurator, o, respEdit);
+					}
+					
+				}else{
+					logger.debug("正在保存群组:{}.", o.getName());
+					if(StringUtils.isNotEmpty(o.getGroupCode())){
+						List<String> groupList = o.getGroupList();
+						if(ListTools.isEmpty(groupList)){
+							Group groupobj = emc.flag(o.getGroupCode(), Group.class);
+							if(groupobj != null){
+								List<String> glist = new ArrayList<>();
+								glist.add(groupobj.getId());
+								 o.setGroupList(glist);
+							}
+						}
+					}
+					
+					Group groupObject = new Group();
+					o.copyTo(groupObject);
+					
+					String resp = this.saveGroup("group", groupObject);
+					
+					if("".equals(resp)){
+						this.setGroupMemo(workbook, configurator, o, "已导入.");
+					}else{
+						System.out.println("respMass="+resp);
+						this.setGroupMemo(workbook, configurator, o, resp);
+					}
+				}
+				
+			}
+		}
+		/*for(List<Group> unitlist : ListTools.batch(group, 200)){
+			for (Group uo : unitlist) {
+				this.editGroup("group/"+uo.getId(),uo);
+			}
+		}*/
+	}
+
+	private void setUnitMemo(XSSFWorkbook workbook, UnitSheetConfigurator configurator, UnitItem unitItem,
+			String memo) {
+		Sheet sheet = workbook.getSheetAt(configurator.getSheetIndex());
+		Row row = sheet.getRow(unitItem.getRow());
+		Cell cell = CellUtil.getCell(row, configurator.getMemoColumn());
+		cell.setCellValue(memo);
+	}
+	private void setPersonMemo(XSSFWorkbook workbook, PersonSheetConfigurator configurator, PersonItem personItem,
+			String memo) {
+		Sheet sheet = workbook.getSheetAt(configurator.getSheetIndex());
+		Row row = sheet.getRow(personItem.getRow());
+		Cell cell = CellUtil.getCell(row, configurator.getMemoColumn());
+		cell.setCellValue(memo);
+	}
+	private void setIdentityMemo(XSSFWorkbook workbook, IdentitySheetConfigurator configurator, IdentityItem identityItem,
+			String memo) {
+		Sheet sheet = workbook.getSheetAt(configurator.getSheetIndex());
+		Row row = sheet.getRow(identityItem.getRow());
+		Cell cell = CellUtil.getCell(row, configurator.getMemoColumn());
+		cell.setCellValue(memo);
+	}
+	
+	private void setGroupMemo(XSSFWorkbook workbook, GroupSheetConfigurator configurator, GroupItem groupItem,
+			String memo) {
+		Sheet sheet = workbook.getSheetAt(configurator.getSheetIndex());
+		Row row = sheet.getRow(groupItem.getRow());
+		Cell cell = CellUtil.getCell(row, configurator.getMemoColumn());
+		cell.setCellValue(memo);
+	}
+	
+	private String saveUnit(String path ,Unit unitObj) throws Exception{
+		ActionResponse resp =  ThisApplication.context().applications()
+				.postQuery(x_organization_assemble_control.class, path, unitObj);
+		return resp.getMessage();
+	}
+	
+	private String savePerson(String path ,Person personObj) throws Exception{
+		ActionResponse resp =  ThisApplication.context().applications()
+				.postQuery(x_organization_assemble_control.class, path, personObj);
+		return resp.getMessage();
+	}
+	
+	private String savePersonAttribute(String path ,PersonAttribute personAttribute) throws Exception{
+		ActionResponse resp =  ThisApplication.context().applications()
+				.postQuery(x_organization_assemble_control.class, path, personAttribute);
+		return resp.getMessage();
+	}
+	
+	private String saveIdentity(String path ,Identity identityObj) throws Exception{
+		ActionResponse resp =  ThisApplication.context().applications()
+				.postQuery(x_organization_assemble_control.class, path, identityObj);
+		return resp.getMessage();
+	}
+	
+	private String saveDuty(String path ,UnitDuty dutyObj) throws Exception{
+		ActionResponse resp =  ThisApplication.context().applications()
+				.postQuery(x_organization_assemble_control.class, path, dutyObj);
+		return resp.getMessage();
+	}
+	
+	private String editDuty(String path ,UnitDuty dutyObj) throws Exception{
+		ActionResponse resp =  ThisApplication.context().applications()
+				.putQuery(x_organization_assemble_control.class, path, dutyObj);
+		return resp.getMessage();
+	}
+	
+	private String saveGroup(String path ,Group groupObj) throws Exception{
+		ActionResponse resp =  ThisApplication.context().applications()
+				.postQuery(x_organization_assemble_control.class, path, groupObj);
+		return resp.getMessage();
+	}
+	
+	private String editGroup(String path ,Group groupObj) throws Exception{
+		ActionResponse resp =  ThisApplication.context().applications()
+				.putQuery(x_organization_assemble_control.class, path, groupObj);
+		return resp.getMessage();
+	}
+	
+	private boolean getDuty(EntityManagerContainer emc, DutyItem dutyItem) throws Exception{
+		boolean checkduty = false;
+		UnitDuty unitDuty = null;
+		unitDuty= emc.flag(dutyItem.getUnique(), UnitDuty.class);
+		if(unitDuty != null){
+			checkduty = true;
+			List<String> identityList = new ArrayList<>();
+			identityList = unitDuty.getIdentityList();
+			identityList.addAll(dutyItem.getIdentityList());
+			unitDuty.setIdentityList(identityList);
+			//editduty.add(unitDuty);
+			this.editDuty("unitduty/"+unitDuty.getId(),unitDuty);
+		}
+		
+		return checkduty;
+	}
+	
+	   //生成随机数
+	private String getCard(){
+	       Random rand=new Random();//生成随机数
+	        String cardNnumer="";
+	        for(int a=0;a<8;a++){
+	        cardNnumer+=rand.nextInt(10);//生成6位数字
+	        }
+	       return cardNnumer;
+
+
+	  }
+	
+	private void concretePassword(List<PersonItem> people) throws Exception {
+		Pattern pattern = Pattern.compile(com.x.base.core.project.config.Person.REGULAREXPRESSION_SCRIPT);
+		Matcher matcher = pattern.matcher(Config.person().getPassword());
+		if (matcher.matches()) {
+			String eval = ScriptFactory.functionalization(StringEscapeUtils.unescapeJson(matcher.group(1)));
+			ScriptContext scriptContext = new SimpleScriptContext();
+			Bindings bindings = scriptContext.getBindings(ScriptContext.ENGINE_SCOPE);
+			for (PersonItem o : people) {
+				bindings.put("person", o);
+				String pass = ScriptFactory.scriptEngine.eval(eval, scriptContext).toString();
+				o.setPassword(pass);
+			}
+		} else {
+			for (PersonItem o : people) {
+				o.setPassword(Config.person().getPassword());
+			}
+		}
+		for (PersonItem o : people) {
+			o.setPassword(Crypto.encrypt(o.getPassword(), Config.token().getKey()));
+		}
+	}
+	
+	public static class Wo extends GsonPropertyObject {
+
+		@FieldDescribe("返回的结果标识")
+		private String flag;
+
+		public String getFlag() {
+			return flag;
+		}
+
+		public void setFlag(String flag) {
+			this.flag = flag;
+		}
+
+	}
+
+}

+ 123 - 9
o2server/x_organization_assemble_control/src/main/java/com/x/organization/assemble/control/jaxrs/inputperson/ActionTemplate.java

@@ -24,7 +24,14 @@ public class ActionTemplate extends BaseAction {
 	protected ActionResult<Wo> execute(EffectivePerson effectivePerson) throws Exception {
 	protected ActionResult<Wo> execute(EffectivePerson effectivePerson) throws Exception {
 		try (XSSFWorkbook workbook = new XSSFWorkbook(); ByteArrayOutputStream os = new ByteArrayOutputStream()) {
 		try (XSSFWorkbook workbook = new XSSFWorkbook(); ByteArrayOutputStream os = new ByteArrayOutputStream()) {
 			ActionResult<Wo> result = new ActionResult<>();
 			ActionResult<Wo> result = new ActionResult<>();
-			this.template(workbook);
+			
+			this.templateRemark(workbook);
+			this.templateUnit(workbook);
+			this.templatePerson(workbook);
+			this.templateIdentity(workbook);
+			this.templateDuty(workbook);
+			this.templateGroup(workbook);
+			
 			workbook.write(os);
 			workbook.write(os);
 			Wo wo = new Wo(os.toByteArray(), this.contentType(true, name), this.contentDisposition(true, name));
 			Wo wo = new Wo(os.toByteArray(), this.contentType(true, name), this.contentDisposition(true, name));
 			result.setData(wo);
 			result.setData(wo);
@@ -32,23 +39,130 @@ public class ActionTemplate extends BaseAction {
 		}
 		}
 	}
 	}
 
 
-	private void template(XSSFWorkbook workbook) throws Exception {
-		XSSFSheet sheet = workbook.createSheet("人员");
+	private void templateRemark(XSSFWorkbook workbook) throws Exception {
+		XSSFSheet sheet = workbook.createSheet("注意事项");
+		Row row = sheet.createRow(0);
+		// 先创建表头
+		row = sheet.createRow(2);
+		row.createCell(0).setCellValue("注意事项:");
+
+		row = sheet.createRow(4);
+		row.createCell(0).setCellValue("1. 表格内不要做合并(拆分)单元格操作,各列顺序不能变动,更不能删除,否则会造成数据混乱;");
+		
+		row = sheet.createRow(6);
+		row.createCell(0).setCellValue("2. * 为必填项");
+		
+		row = sheet.createRow(8);
+		row.createCell(0).setCellValue("3. 如有特殊要求的格式,详见列名批注;");
+		
+		row = sheet.createRow(10);
+		row.createCell(0).setCellValue("4. 表中示例数据用于示范,实际导入时需删除;");
+		
+		row = sheet.createRow(12);
+		row.createCell(0).setCellValue("5. 每个Sheet页顺序不能变动,本Sheet页不能删除。");
+		
+		CellStyle cellStyle = workbook.createCellStyle();
+		cellStyle.setWrapText(true);
+		IntStream.rangeClosed(0, 6).forEach(i -> {
+			sheet.setDefaultColumnStyle(i, cellStyle);
+		});
+	}
+	
+	private void templateUnit(XSSFWorkbook workbook) throws Exception {
+		XSSFSheet sheet = workbook.createSheet("组织信息");
+		Row row = sheet.createRow(0);
+		Cell cell = row.createCell(0);
+		cell.setCellValue("组织名称 *");
+		cell = row.createCell(1);
+		cell.setCellValue("组织编号 *");
+		cell = row.createCell(2);
+		cell.setCellValue("组织级别名称 *");
+		cell = row.createCell(3);
+		cell.setCellValue("上级组织编号");
+		cell = row.createCell(4);
+		cell.setCellValue("描述");
+		cell = row.createCell(5);
+		cell.setCellValue("排序号");
+		CellStyle cellStyle = workbook.createCellStyle();
+		cellStyle.setWrapText(true);
+		IntStream.rangeClosed(0, 6).forEach(i -> {
+			sheet.setDefaultColumnStyle(i, cellStyle);
+		});
+	}
+	
+	private void templatePerson(XSSFWorkbook workbook) throws Exception {
+		XSSFSheet sheet = workbook.createSheet("人员基本信息");
 		Row row = sheet.createRow(0);
 		Row row = sheet.createRow(0);
 		Cell cell = row.createCell(0);
 		Cell cell = row.createCell(0);
-		cell.setCellValue("姓名");
+		cell.setCellValue("人员姓名 *");
 		cell = row.createCell(1);
 		cell = row.createCell(1);
-		cell.setCellValue("手机号");
+		cell.setCellValue("员工账号 *");
 		cell = row.createCell(2);
 		cell = row.createCell(2);
-		cell.setCellValue("电子邮件");
+		cell.setCellValue("手机号码 *");
 		cell = row.createCell(3);
 		cell = row.createCell(3);
-		cell.setCellValue("唯一编码");
+		cell.setCellValue("人员编号");
 		cell = row.createCell(4);
 		cell = row.createCell(4);
-		cell.setCellValue("员工号");
+		cell.setCellValue("办公电话");
 		cell = row.createCell(5);
 		cell = row.createCell(5);
 		cell.setCellValue("性别");
 		cell.setCellValue("性别");
 		cell = row.createCell(6);
 		cell = row.createCell(6);
-		cell.setCellValue("(地址)");
+		cell.setCellValue("邮件");
+		CellStyle cellStyle = workbook.createCellStyle();
+		cellStyle.setWrapText(true);
+		IntStream.rangeClosed(0, 6).forEach(i -> {
+			sheet.setDefaultColumnStyle(i, cellStyle);
+		});
+	}
+	
+	private void templateIdentity(XSSFWorkbook workbook) throws Exception {
+		XSSFSheet sheet = workbook.createSheet("人员身份信息");
+		Row row = sheet.createRow(0);
+		Cell cell = row.createCell(0);
+		cell.setCellValue("员工账号 *");
+		cell = row.createCell(1);
+		cell.setCellValue("组织编号 *");
+		cell = row.createCell(2);
+		cell.setCellValue("职务编号");
+		cell = row.createCell(3);
+		cell.setCellValue("主兼职");
+		CellStyle cellStyle = workbook.createCellStyle();
+		cellStyle.setWrapText(true);
+		IntStream.rangeClosed(0, 6).forEach(i -> {
+			sheet.setDefaultColumnStyle(i, cellStyle);
+		});
+	}
+	
+	private void templateDuty(XSSFWorkbook workbook) throws Exception {
+		XSSFSheet sheet = workbook.createSheet("职务信息");
+		Row row = sheet.createRow(0);
+		Cell cell = row.createCell(0);
+		cell.setCellValue("职务账号 *");
+		cell = row.createCell(1);
+		cell.setCellValue("职务名称 *");
+		cell = row.createCell(2);
+		cell.setCellValue("职务描述");
+		CellStyle cellStyle = workbook.createCellStyle();
+		cellStyle.setWrapText(true);
+		IntStream.rangeClosed(0, 6).forEach(i -> {
+			sheet.setDefaultColumnStyle(i, cellStyle);
+		});
+	}
+	
+	private void templateGroup(XSSFWorkbook workbook) throws Exception {
+		XSSFSheet sheet = workbook.createSheet("群组信息");
+		Row row = sheet.createRow(0);
+		Cell cell = row.createCell(0);
+		cell.setCellValue("群组名称 *");
+		cell = row.createCell(1);
+		cell.setCellValue("群组编号 *");
+		cell = row.createCell(2);
+		cell.setCellValue("人员编号");
+		cell = row.createCell(3);
+		cell.setCellValue("组织编号");
+		cell = row.createCell(4);
+		cell.setCellValue("群组编号");
+		cell = row.createCell(5);
+		cell.setCellValue("描述");
 		CellStyle cellStyle = workbook.createCellStyle();
 		CellStyle cellStyle = workbook.createCellStyle();
 		cellStyle.setWrapText(true);
 		cellStyle.setWrapText(true);
 		IntStream.rangeClosed(0, 6).forEach(i -> {
 		IntStream.rangeClosed(0, 6).forEach(i -> {

+ 300 - 0
o2server/x_organization_assemble_control/src/main/java/com/x/organization/assemble/control/jaxrs/inputperson/ActionWipeAll.java

@@ -0,0 +1,300 @@
+package com.x.organization.assemble.control.jaxrs.inputperson;
+
+import java.util.ArrayList;
+import java.util.Comparator;
+import java.util.List;
+import java.util.stream.Collectors;
+
+import javax.persistence.EntityManager;
+import javax.persistence.criteria.CriteriaBuilder;
+import javax.persistence.criteria.CriteriaQuery;
+import javax.persistence.criteria.Predicate;
+import javax.persistence.criteria.Root;
+
+import com.x.base.core.project.tools.ListTools;
+import com.x.organization.assemble.control.Business;
+import com.x.organization.assemble.control.ThisApplication;
+import com.x.organization.core.entity.Group;
+import com.x.organization.core.entity.Group_;
+import com.x.organization.core.entity.Identity;
+import com.x.organization.core.entity.Person;
+import com.x.organization.core.entity.PersonAttribute;
+import com.x.organization.core.entity.PersonAttribute_;
+import com.x.organization.core.entity.Unit;
+import com.x.organization.core.entity.UnitDuty;
+import com.x.organization.core.entity.UnitDuty_;
+import com.x.organization.core.entity.Unit_;
+import com.x.base.core.container.EntityManagerContainer;
+import com.x.base.core.container.factory.EntityManagerContainerFactory;
+import com.x.base.core.entity.annotation.CheckPersistType;
+import com.x.base.core.entity.annotation.CheckRemoveType;
+import com.x.base.core.project.x_organization_assemble_control;
+import com.x.base.core.project.annotation.FieldDescribe;
+import com.x.base.core.project.cache.ApplicationCache;
+import com.x.base.core.project.connection.ActionResponse;
+import com.x.base.core.project.gson.GsonPropertyObject;
+import com.x.base.core.project.http.ActionResult;
+import com.x.base.core.project.http.EffectivePerson;
+import com.x.base.core.project.logger.Logger;
+import com.x.base.core.project.logger.LoggerFactory;
+
+/**
+ * 清空人员组织数据
+ */
+public class ActionWipeAll extends BaseAction {
+	
+	private static  Logger logger = LoggerFactory.getLogger(ActionWipeAll.class);
+	List<Unit> allUnitList = new ArrayList<>();
+	List<Person> allPersonList = new ArrayList<>();
+	List<Identity> allIdentityList = new ArrayList<>();
+	List<UnitDuty> allDutyList = new ArrayList<>();
+	List<Group> allGroupList = new ArrayList<>();
+	
+	protected ActionResult<Wo> execute(  EffectivePerson effectivePerson ) throws Exception {
+		ActionResult<Wo> result = new ActionResult<>();
+		Wo wo = new Wo();
+		Business business = null;
+		
+		// 先获取需要删除的数据
+		try (EntityManagerContainer emc = EntityManagerContainerFactory.instance().create()) {
+			System.out.println("开始删除人员组织所有数据--------start");
+			 business = new Business(emc);
+			this.listUnit(business);
+			this.listPerson(business);
+			this.listIdentity(business);
+			this.listDuty(business);
+			this.listGroup(business);
+			
+			emc.beginTransaction( UnitDuty.class );
+			emc.beginTransaction( Group.class );
+			emc.beginTransaction( Identity.class );
+			emc.beginTransaction( Person.class );
+			//emc.beginTransaction( Unit.class );
+			System.out.println("开始删除职务--------");
+			this.deleteDutys(emc,business);
+			System.out.println("开始删除群组--------");
+			this.deleteGroups(emc,business);
+			System.out.println("开始删除身份--------");
+			this.deleteIdentitys(emc,business);
+			System.out.println("开始删除人员--------");
+			this.deletePersons(emc,business);
+			System.out.println("开始删除组织--------");
+			this.deleteUnits(emc,business);
+			emc.commit();
+			
+			ApplicationCache.notify(UnitDuty.class);
+			ApplicationCache.notify(Group.class);
+			ApplicationCache.notify(Identity.class);
+			ApplicationCache.notify(Person.class);
+			ApplicationCache.notify(Unit.class);
+			
+			wo.setFlag("清空人员数据成功");
+			System.out.println("开始删除人员组织所有数据--------end");
+		} catch (Exception e) {
+			logger.info("系统在查询所有组织人员信息时发生异常。" );
+			wo.setFlag("清空人员数据失败");
+			e.printStackTrace();
+		}
+		
+			
+		result.setData(wo);
+		return result;
+	}
+	
+	private void listUnit(Business business) throws Exception {
+		List<Unit> topUnitList = new ArrayList<>();
+		topUnitList = this.listTopUnit(business);
+		if(ListTools.isNotEmpty(topUnitList)){
+			allUnitList.addAll(topUnitList);
+			for (Unit unitItem : topUnitList) {
+				List<Unit> ulist= this.listSubNested(business, unitItem);
+				if(ListTools.isNotEmpty(ulist)){
+					allUnitList.addAll(ulist);
+				}
+			}
+		}
+		
+		if(ListTools.isNotEmpty(allUnitList)){
+			//allUnitList = business.unit().sort(allUnitList);
+			allUnitList = allUnitList.stream().sorted(Comparator.comparing(Unit::getLevel).reversed()).collect(Collectors.toList());
+		}
+	}
+	
+	private void listPerson(Business business) throws Exception {
+		EntityManager em = business.entityManagerContainer().get(Person.class);
+		CriteriaBuilder cb = em.getCriteriaBuilder();
+		CriteriaQuery<Person> cq = cb.createQuery(Person.class);
+		Root<Person> root = cq.from(Person.class);
+		allPersonList = em.createQuery(cq.select(root)).getResultList();
+	}
+	
+	private void listIdentity(Business business) throws Exception {
+		EntityManager em = business.entityManagerContainer().get(Identity.class);
+		CriteriaBuilder cb = em.getCriteriaBuilder();
+		CriteriaQuery<Identity> cq = cb.createQuery(Identity.class);
+		Root<Identity> root = cq.from(Identity.class);
+		allIdentityList = em.createQuery(cq.select(root)).getResultList();
+	}
+	
+	private void listDuty(Business business) throws Exception {
+		EntityManager em = business.entityManagerContainer().get(UnitDuty.class);
+		CriteriaBuilder cb = em.getCriteriaBuilder();
+		CriteriaQuery<UnitDuty> cq = cb.createQuery(UnitDuty.class);
+		Root<UnitDuty> root = cq.from(UnitDuty.class);
+		allDutyList = em.createQuery(cq.select(root)).getResultList();
+	}
+	
+	private void listGroup(Business business) throws Exception {
+		EntityManager em = business.entityManagerContainer().get(Group.class);
+		CriteriaBuilder cb = em.getCriteriaBuilder();
+		CriteriaQuery<Group> cq = cb.createQuery(Group.class);
+		Root<Group> root = cq.from(Group.class);
+		allGroupList = em.createQuery(cq.select(root)).getResultList();
+	}
+
+	private List<Unit> listTopUnit(Business business) throws Exception {
+		EntityManager em = business.entityManagerContainer().get(Unit.class);
+		CriteriaBuilder cb = em.getCriteriaBuilder();
+		CriteriaQuery<Unit> cq = cb.createQuery(Unit.class);
+		Root<Unit> root = cq.from(Unit.class);
+		Predicate p = cb.equal(root.get(Unit_.level), 1);
+		List<Unit> os = em.createQuery(cq.select(root).where(p)).getResultList();
+		return os;
+	}
+	
+	private List<Unit> listSubNested(Business business,Unit unit) throws Exception {
+		List<Unit> os = business.unit().listSubNestedObject(unit);
+		return os;
+	}
+	
+	private void deleteUnits(EntityManagerContainer emc,Business business) throws Exception{
+		if(ListTools.isNotEmpty(allUnitList)){
+			/*for(Unit unit : allUnitList){
+				//this.deleteEntity("unit/"+unit.getId());
+				//emc.remove( unit , CheckRemoveType.all );
+			}*/
+			for(int i=0; i<allUnitList.size();i++){
+				Unit unit = allUnitList.get(i);
+				business.entityManagerContainer().beginTransaction(Unit.class);
+				business.entityManagerContainer().remove(unit, CheckRemoveType.all);
+				business.entityManagerContainer().commit();
+			}
+		}
+		
+	}
+	
+	private void deletePersons(EntityManagerContainer emc,Business business) throws Exception{
+		if(ListTools.isNotEmpty(allPersonList)){
+			for(Person person : allPersonList){
+				business.entityManagerContainer().beginTransaction(Person.class);
+				business.entityManagerContainer().remove(person, CheckRemoveType.all);
+				//emc.remove( person , CheckRemoveType.all );
+			}
+			business.entityManagerContainer().commit();
+		}
+		
+	}
+	
+	private void deleteIdentitys(EntityManagerContainer emc,Business business) throws Exception{
+		if(ListTools.isNotEmpty(allIdentityList)){
+			for(Identity identity : allIdentityList){
+				//this.deleteEntity("identity/"+identity.getId());
+				//emc.remove( identity , CheckRemoveType.all );
+				business.entityManagerContainer().beginTransaction(Identity.class);
+				business.entityManagerContainer().remove(identity, CheckRemoveType.all);
+			}
+			business.entityManagerContainer().commit();
+		}
+		
+	}
+	
+	private void deleteDutys(EntityManagerContainer emc,Business business) throws Exception{
+		if(ListTools.isNotEmpty(allDutyList)){
+			for(UnitDuty unitDuty : allDutyList){
+				//this.deleteEntity("unitduty/"+unitDuty.getId());
+				//emc.remove( unitDuty , CheckRemoveType.all );
+				business.entityManagerContainer().beginTransaction(UnitDuty.class);
+				business.entityManagerContainer().remove(unitDuty, CheckRemoveType.all);
+				business.entityManagerContainer().commit();
+			}
+		}
+		
+	}
+	
+	private void deleteGroups(EntityManagerContainer emc,Business business) throws Exception{
+		if(ListTools.isNotEmpty(allGroupList)){
+			for(Group group : allGroupList){
+				if(group != null){
+					//this.deleteEntity("group/"+group.getId());
+					//emc.remove( group , CheckRemoveType.all );
+					this.removeGroupMember(business,group);
+					
+					business.entityManagerContainer().beginTransaction(Group.class);
+					business.entityManagerContainer().remove(group, CheckRemoveType.all);
+					business.entityManagerContainer().commit();
+				}
+				
+			}
+		}
+		
+	}
+	
+	private void removeGroupMember(Business business, Group group) throws Exception {
+		EntityManager em = business.entityManagerContainer().get(Group.class);
+		CriteriaBuilder cb = em.getCriteriaBuilder();
+		CriteriaQuery<Group> cq = cb.createQuery(Group.class);
+		Root<Group> root = cq.from(Group.class);
+		Predicate p = cb.isMember(group.getId(), root.get(Group_.groupList));
+		List<Group> os = em.createQuery(cq.select(root).where(p)).getResultList();
+		
+		for (Group o : os) {
+			o.getGroupList().remove(group.getId());
+			business.entityManagerContainer().beginTransaction(Group.class);
+			business.entityManagerContainer().remove(o, CheckRemoveType.all);
+		}
+		business.entityManagerContainer().commit();
+		
+	}
+	
+	private String deleteEntity(String path) throws Exception{
+		ActionResponse resp =  ThisApplication.context().applications()
+				.deleteQuery(x_organization_assemble_control.class, path);
+		return resp.getMessage();
+	}
+	
+	private List<PersonAttribute> listAttributeWithPerson(Business business,String personId) throws Exception{
+		EntityManager em = business.entityManagerContainer().get(PersonAttribute.class);
+		CriteriaBuilder cb = em.getCriteriaBuilder();
+		CriteriaQuery<PersonAttribute> cq = cb.createQuery(PersonAttribute.class);
+		Root<PersonAttribute> root = cq.from(PersonAttribute.class);
+		Predicate p = cb.equal(root.get(PersonAttribute_.person), personId);
+		List<PersonAttribute> os = em.createQuery(cq.select(root).where(p)).getResultList();
+		return os;
+	}
+	
+	private List<UnitDuty> listDutyWithIdentity(Business business,String identityId) throws Exception{
+		EntityManager em = business.entityManagerContainer().get(UnitDuty.class);
+		CriteriaBuilder cb = em.getCriteriaBuilder();
+		CriteriaQuery<UnitDuty> cq = cb.createQuery(UnitDuty.class);
+		Root<UnitDuty> root = cq.from(UnitDuty.class);
+		Predicate p = cb.isMember(identityId, root.get(UnitDuty_.identityList));
+		List<UnitDuty> os = em.createQuery(cq.select(root).where(p)).getResultList();
+		return os;
+	}
+
+	public static class Wo extends GsonPropertyObject {
+
+		@FieldDescribe("返回的结果标识")
+		private String flag;
+
+		public String getFlag() {
+			return flag;
+		}
+
+		public void setFlag(String flag) {
+			this.flag = flag;
+		}
+
+	}
+
+}

+ 2 - 2
o2server/x_organization_assemble_control/src/main/java/com/x/organization/assemble/control/jaxrs/inputperson/BaseAction.java

@@ -10,8 +10,8 @@ import net.sf.ehcache.Ehcache;
 
 
 abstract class BaseAction extends StandardJaxrsAction {
 abstract class BaseAction extends StandardJaxrsAction {
 
 
-	protected static List<String> genderTypeFemaleItems = Arrays.asList(new String[] { "f", "女", "female" });
-	protected static List<String> genderTypeMaleItems = Arrays.asList(new String[] { "m", "男", "male" });
+	protected static List<String> genderTypeFemaleItems = Arrays.asList(new String[] { "f","F" ,"女", "female" });
+	protected static List<String> genderTypeMaleItems = Arrays.asList(new String[] { "m", "M", "男", "male" });
 
 
 	protected Ehcache cache = ApplicationCache.instance().getCache(CacheInputResult.class);
 	protected Ehcache cache = ApplicationCache.instance().getCache(CacheInputResult.class);
 
 

+ 64 - 0
o2server/x_organization_assemble_control/src/main/java/com/x/organization/assemble/control/jaxrs/inputperson/DutyItem.java

@@ -0,0 +1,64 @@
+package com.x.organization.assemble.control.jaxrs.inputperson;
+
+import java.util.List;
+
+import com.x.base.core.project.gson.GsonPropertyObject; 
+
+public class DutyItem extends GsonPropertyObject {
+
+	private String name;
+	private String unique;
+	private String description;
+	private String unit;
+	private List<String> identityList;
+
+	private Integer row;
+
+	public String getName() {
+		return name;
+	}
+
+	public void setName(String name) {
+		this.name = name;
+	}
+
+	public String getUnique() {
+		return unique;
+	}
+
+	public void setUnique(String unique) {
+		this.unique = unique;
+	}
+
+	public String getDescription() {
+		return description;
+	}
+
+	public void setDescription(String description) {
+		this.description = description;
+	}
+	
+	public String getUnit() {
+		return unit;
+	}
+
+	public void setUnit(String unit) {
+		this.unit = unit;
+	}
+	
+	public List<String> getIdentityList() {
+		return identityList;
+	}
+
+	public void setIdentityList(List<String> identityList) {
+		this.identityList = identityList;
+	}
+
+	public Integer getRow() {
+		return row;
+	}
+
+	public void setRow(Integer row) {
+		this.row = row;
+	}
+}

+ 118 - 0
o2server/x_organization_assemble_control/src/main/java/com/x/organization/assemble/control/jaxrs/inputperson/DutySheetConfigurator.java

@@ -0,0 +1,118 @@
+package com.x.organization.assemble.control.jaxrs.inputperson;
+
+import java.util.Arrays;
+import java.util.HashMap;
+import java.util.List;
+import java.util.Map;
+import java.util.regex.Matcher;
+import java.util.regex.Pattern;
+
+import org.apache.commons.lang3.BooleanUtils;
+import org.apache.commons.lang3.StringUtils;
+import org.apache.poi.ss.usermodel.Cell;
+import org.apache.poi.ss.usermodel.Row;
+import org.apache.poi.ss.usermodel.Sheet;
+import org.apache.poi.xssf.usermodel.XSSFWorkbook;
+
+import com.x.base.core.project.gson.GsonPropertyObject;
+
+public class DutySheetConfigurator extends GsonPropertyObject {
+
+	private static final Pattern attributePattern = Pattern.compile("^\\((.+?)\\)$");
+
+	private Integer sheetIndex;
+	private Integer memoColumn;
+	private Integer firstRow;
+	private Integer lastRow;
+
+	private Integer nameColumn;
+	private Integer uniqueColumn;
+
+	private Map<String, Integer> attributes = new HashMap<>();
+
+	public DutySheetConfigurator(XSSFWorkbook workbook, Sheet sheet) {
+		this.sheetIndex = workbook.getSheetIndex(sheet);
+		Row row = sheet.getRow(sheet.getFirstRowNum());
+		this.firstRow = sheet.getFirstRowNum() + 1;
+		this.lastRow = sheet.getLastRowNum();
+		memoColumn = row.getLastCellNum() + 1;
+		for (int i = row.getFirstCellNum(); i <= row.getLastCellNum(); i++) {
+			Cell cell = row.getCell(i);
+			if (null != cell) {
+				String str = this.getCellStringValue(cell);
+				//System.out.println("str="+str+"----i="+i);
+				if (StringUtils.isNotEmpty(str)) {
+					if (uniqueItems.contains(str)) {
+						this.uniqueColumn = i;
+					} else if (nameItems.contains(str)) {
+						this.nameColumn = i;
+					}else {
+						Matcher matcher = attributePattern.matcher(str);
+						if (matcher.matches()) {
+							String attribute = matcher.group(1);
+							this.attributes.put(attribute, new Integer(i));
+						}
+					}
+				}
+			}
+		}
+	}
+
+	private static List<String> uniqueItems = Arrays.asList(new String[] { "职务编号 *",  "unique" });
+	private static List<String> nameItems = Arrays.asList(new String[] { "职务名称 *", "name" });
+
+	public String getCellStringValue(Cell cell) {
+		if (null != cell) {
+			switch (cell.getCellType()) {
+			case BLANK:
+				return "";
+			case BOOLEAN:
+				return BooleanUtils.toString(cell.getBooleanCellValue(), "true", "false", "false");
+			case ERROR:
+				return "";
+			case FORMULA:
+				return "";
+			case NUMERIC:
+				Double d = cell.getNumericCellValue();
+				Long l = d.longValue();
+				if (l.doubleValue() == d) {
+					return l.toString();
+				} else {
+					return d.toString();
+				}
+			default:
+				return cell.getStringCellValue();
+			}
+		}
+		return "";
+	}
+
+	public Integer getMemoColumn() {
+		return memoColumn;
+	}
+
+	public Integer getUniqueColumn() {
+		return uniqueColumn;
+	}
+
+	public Integer getNameColumn() {
+		return nameColumn;
+	}
+
+	public Map<String, Integer> getAttributes() {
+		return attributes;
+	}
+
+	public Integer getFirstRow() {
+		return firstRow;
+	}
+
+	public Integer getLastRow() {
+		return lastRow;
+	}
+
+	public Integer getSheetIndex() {
+		return sheetIndex;
+	}
+
+}

+ 12 - 0
o2server/x_organization_assemble_control/src/main/java/com/x/organization/assemble/control/jaxrs/inputperson/ExceptionDutyCodeColumnEmpty.java

@@ -0,0 +1,12 @@
+package com.x.organization.assemble.control.jaxrs.inputperson;
+
+import com.x.base.core.project.exception.PromptException;
+
+class ExceptionDutyCodeColumnEmpty extends PromptException {
+
+	private static final long serialVersionUID = -2139584911736169462L;
+
+	ExceptionDutyCodeColumnEmpty() {
+		super("职务编号列不能为空.");
+	}
+}

+ 12 - 0
o2server/x_organization_assemble_control/src/main/java/com/x/organization/assemble/control/jaxrs/inputperson/ExceptionDutyNameColumnEmpty.java

@@ -0,0 +1,12 @@
+package com.x.organization.assemble.control.jaxrs.inputperson;
+
+import com.x.base.core.project.exception.PromptException;
+
+class ExceptionDutyNameColumnEmpty extends PromptException {
+
+	private static final long serialVersionUID = -2139584911736169462L;
+
+	ExceptionDutyNameColumnEmpty() {
+		super("职务名称列不能为空.");
+	}
+}

+ 12 - 0
o2server/x_organization_assemble_control/src/main/java/com/x/organization/assemble/control/jaxrs/inputperson/ExceptionEmployeeColumnEmpty.java

@@ -0,0 +1,12 @@
+package com.x.organization.assemble.control.jaxrs.inputperson;
+
+import com.x.base.core.project.exception.PromptException;
+
+class ExceptionEmployeeColumnEmpty extends PromptException {
+
+	private static final long serialVersionUID = -2139584911736169462L;
+
+	ExceptionEmployeeColumnEmpty() {
+		super("员工账号列不能为空.");
+	}
+}

+ 12 - 0
o2server/x_organization_assemble_control/src/main/java/com/x/organization/assemble/control/jaxrs/inputperson/ExceptionGroupCodeColumnEmpty.java

@@ -0,0 +1,12 @@
+package com.x.organization.assemble.control.jaxrs.inputperson;
+
+import com.x.base.core.project.exception.PromptException;
+
+class ExceptionGroupCodeColumnEmpty extends PromptException {
+
+	private static final long serialVersionUID = -2139584911736169462L;
+
+	ExceptionGroupCodeColumnEmpty() {
+		super("群组编号列不能为空.");
+	}
+}

+ 12 - 0
o2server/x_organization_assemble_control/src/main/java/com/x/organization/assemble/control/jaxrs/inputperson/ExceptionGroupNameColumnEmpty.java

@@ -0,0 +1,12 @@
+package com.x.organization.assemble.control.jaxrs.inputperson;
+
+import com.x.base.core.project.exception.PromptException;
+
+class ExceptionGroupNameColumnEmpty extends PromptException {
+
+	private static final long serialVersionUID = -2139584911736169462L;
+
+	ExceptionGroupNameColumnEmpty() {
+		super("群组名称列不能为空.");
+	}
+}

+ 12 - 0
o2server/x_organization_assemble_control/src/main/java/com/x/organization/assemble/control/jaxrs/inputperson/ExceptionIdNumberColumnEmpty.java

@@ -0,0 +1,12 @@
+package com.x.organization.assemble.control.jaxrs.inputperson;
+
+import com.x.base.core.project.exception.PromptException;
+
+class ExceptionIdNumberColumnEmpty extends PromptException {
+
+	private static final long serialVersionUID = -2139584911736169462L;
+
+	ExceptionIdNumberColumnEmpty() {
+		super("身份证号列不能为空.");
+	}
+}

+ 12 - 0
o2server/x_organization_assemble_control/src/main/java/com/x/organization/assemble/control/jaxrs/inputperson/ExceptionTypeCodeColumnEmpty.java

@@ -0,0 +1,12 @@
+package com.x.organization.assemble.control.jaxrs.inputperson;
+
+import com.x.base.core.project.exception.PromptException;
+
+class ExceptionTypeCodeColumnEmpty extends PromptException {
+
+	private static final long serialVersionUID = -2139584911736169462L;
+
+	ExceptionTypeCodeColumnEmpty() {
+		super("级别编号列不能为空.");
+	}
+}

+ 12 - 0
o2server/x_organization_assemble_control/src/main/java/com/x/organization/assemble/control/jaxrs/inputperson/ExceptionTypeNameColumnEmpty.java

@@ -0,0 +1,12 @@
+package com.x.organization.assemble.control.jaxrs.inputperson;
+
+import com.x.base.core.project.exception.PromptException;
+
+class ExceptionTypeNameColumnEmpty extends PromptException {
+
+	private static final long serialVersionUID = -2139584911736169462L;
+
+	ExceptionTypeNameColumnEmpty() {
+		super("级别名称列不能为空.");
+	}
+}

+ 12 - 0
o2server/x_organization_assemble_control/src/main/java/com/x/organization/assemble/control/jaxrs/inputperson/ExceptionUniqueColumnEmpty.java

@@ -0,0 +1,12 @@
+package com.x.organization.assemble.control.jaxrs.inputperson;
+
+import com.x.base.core.project.exception.PromptException;
+
+class ExceptionUniqueColumnEmpty extends PromptException {
+
+	private static final long serialVersionUID = -2139584911736169462L;
+
+	ExceptionUniqueColumnEmpty() {
+		super("人员编号列不能为空.");
+	}
+}

+ 12 - 0
o2server/x_organization_assemble_control/src/main/java/com/x/organization/assemble/control/jaxrs/inputperson/ExceptionUnitNameColumnEmpty.java

@@ -0,0 +1,12 @@
+package com.x.organization.assemble.control.jaxrs.inputperson;
+
+import com.x.base.core.project.exception.PromptException;
+
+class ExceptionUnitNameColumnEmpty extends PromptException {
+
+	private static final long serialVersionUID = -2139584911736169462L;
+
+	ExceptionUnitNameColumnEmpty() {
+		super("组织名称列不能为空.");
+	}
+}

+ 12 - 0
o2server/x_organization_assemble_control/src/main/java/com/x/organization/assemble/control/jaxrs/inputperson/ExceptionUnitSHortNameColumnEmpty.java

@@ -0,0 +1,12 @@
+package com.x.organization.assemble.control.jaxrs.inputperson;
+
+import com.x.base.core.project.exception.PromptException;
+
+class ExceptionUnitSHortNameColumnEmpty extends PromptException {
+
+	private static final long serialVersionUID = -2139584911736169462L;
+
+	ExceptionUnitSHortNameColumnEmpty() {
+		super("组织代字列不能为空.");
+	}
+}

+ 12 - 0
o2server/x_organization_assemble_control/src/main/java/com/x/organization/assemble/control/jaxrs/inputperson/ExceptionUnitTypeCodeColumnEmpty.java

@@ -0,0 +1,12 @@
+package com.x.organization.assemble.control.jaxrs.inputperson;
+
+import com.x.base.core.project.exception.PromptException;
+
+class ExceptionUnitTypeCodeColumnEmpty extends PromptException {
+
+	private static final long serialVersionUID = -2139584911736169462L;
+
+	ExceptionUnitTypeCodeColumnEmpty() {
+		super("上级组织编号不能为空.");
+	}
+}

+ 12 - 0
o2server/x_organization_assemble_control/src/main/java/com/x/organization/assemble/control/jaxrs/inputperson/ExceptionUnitUniqueColumnEmpty.java

@@ -0,0 +1,12 @@
+package com.x.organization.assemble.control.jaxrs.inputperson;
+
+import com.x.base.core.project.exception.PromptException;
+
+class ExceptionUnitUniqueColumnEmpty extends PromptException {
+
+	private static final long serialVersionUID = -2139584911736169462L;
+
+	ExceptionUnitUniqueColumnEmpty() {
+		super("组织编号列不能为空.");
+	}
+}

+ 102 - 0
o2server/x_organization_assemble_control/src/main/java/com/x/organization/assemble/control/jaxrs/inputperson/GroupItem.java

@@ -0,0 +1,102 @@
+package com.x.organization.assemble.control.jaxrs.inputperson;
+
+import java.util.List;
+
+import com.x.base.core.project.gson.GsonPropertyObject;
+
+public class GroupItem extends GsonPropertyObject {
+
+	private String name;
+	private String unique;
+	private String description;
+	private List<String> personList;
+	private List<String> groupList;
+	private List<String> unitList;
+	
+	private String personCode;
+	private String unitCode;
+	private String groupCode;
+	
+
+	private Integer row;
+
+	public String getName() {
+		return name;
+	}
+
+	public void setName(String name) {
+		this.name = name;
+	}
+
+	public String getUnique() {
+		return unique;
+	}
+
+	public void setUnique(String unique) {
+		this.unique = unique;
+	}
+	
+	public String getPersonCode() {
+		return personCode;
+	}
+
+	public void setPersonCode(String personCode) {
+		this.personCode = personCode;
+	}
+	
+	public String getUnitCode() {
+		return unitCode;
+	}
+
+	public void setUnitCode(String unitCode) {
+		this.unitCode = unitCode;
+	}
+	
+	public String getGroupCode() {
+		return groupCode;
+	}
+
+	public void setGroupCode(String groupCode) {
+		this.groupCode = groupCode;
+	}
+	
+	public List<String> getPersonList() {
+		return personList;
+	}
+
+	public void setPersonList(List<String> personList) {
+		this.personList = personList;
+	}
+
+	public List<String> getGroupList() {
+		return groupList;
+	}
+
+	public void setGroupList(List<String> groupList) {
+		this.groupList = groupList;
+	}
+	
+	public String getDescription() {
+		return description;
+	}
+
+	public void setDescription(String description) {
+		this.description = description;
+	}
+
+	public List<String> getUnitList() {
+		return unitList;
+	}
+
+	public void setUnitList(List<String> unitList) {
+		this.unitList = unitList;
+	}
+
+	public Integer getRow() {
+		return row;
+	}
+
+	public void setRow(Integer row) {
+		this.row = row;
+	}
+}

+ 150 - 0
o2server/x_organization_assemble_control/src/main/java/com/x/organization/assemble/control/jaxrs/inputperson/GroupSheetConfigurator.java

@@ -0,0 +1,150 @@
+package com.x.organization.assemble.control.jaxrs.inputperson;
+
+import java.util.Arrays;
+import java.util.HashMap;
+import java.util.List;
+import java.util.Map;
+import java.util.regex.Matcher;
+import java.util.regex.Pattern;
+
+import org.apache.commons.lang3.BooleanUtils;
+import org.apache.commons.lang3.StringUtils;
+import org.apache.poi.ss.usermodel.Cell;
+import org.apache.poi.ss.usermodel.Row;
+import org.apache.poi.ss.usermodel.Sheet;
+import org.apache.poi.xssf.usermodel.XSSFWorkbook;
+
+import com.x.base.core.project.gson.GsonPropertyObject;
+
+public class GroupSheetConfigurator extends GsonPropertyObject {
+
+	private static final Pattern attributePattern = Pattern.compile("^\\((.+?)\\)$");
+
+	private Integer sheetIndex;
+	private Integer memoColumn;
+	private Integer firstRow;
+	private Integer lastRow;
+
+	private Integer nameColumn;
+	private Integer uniqueColumn;
+	private Integer personCodeColumn;
+	private Integer unitCodeColumn;
+	private Integer groupCodeColumn;
+	private Integer descriptionColumn;
+
+	private Map<String, Integer> attributes = new HashMap<>();
+
+	public GroupSheetConfigurator(XSSFWorkbook workbook, Sheet sheet) {
+		this.sheetIndex = workbook.getSheetIndex(sheet);
+		Row row = sheet.getRow(sheet.getFirstRowNum());
+		this.firstRow = sheet.getFirstRowNum() + 1;
+		this.lastRow = sheet.getLastRowNum();
+		memoColumn = row.getLastCellNum() + 1;
+		for (int i = row.getFirstCellNum(); i <= row.getLastCellNum(); i++) {
+			Cell cell = row.getCell(i);
+			if (null != cell) {
+				String str = this.getCellStringValue(cell);
+				//System.out.println("str="+str+"----i="+i);
+				if (StringUtils.isNotEmpty(str)) {
+					if (uniqueItems.contains(str)) {
+						this.uniqueColumn = i;
+					} else if (nameItems.contains(str)) {
+						this.nameColumn = i;
+					}else if (personCodeItems.contains(str)) {
+						this.personCodeColumn = i;
+					}else if (unitCodeItems.contains(str)) {
+						this.unitCodeColumn = i;
+					}else if (groupCodeItems.contains(str)) {
+						this.groupCodeColumn = i;
+					}else if (descriptionItems.contains(str)) {
+						this.descriptionColumn = i;
+					}else {
+						Matcher matcher = attributePattern.matcher(str);
+						if (matcher.matches()) {
+							String attribute = matcher.group(1);
+							this.attributes.put(attribute, new Integer(i));
+						}
+					}
+				}
+			}
+		}
+	}
+
+	private static List<String> uniqueItems = Arrays.asList(new String[] { "群组编号 *",  "unique" });
+	private static List<String> nameItems = Arrays.asList(new String[] { "群组名称 *", "name" });
+	private static List<String> personCodeItems = Arrays.asList(new String[] { "人员编号", "personCode" });
+	private static List<String> unitCodeItems = Arrays.asList(new String[] { "组织编号", "unitCode" });
+	private static List<String> groupCodeItems = Arrays.asList(new String[] { "群组编号", "groupCode" });
+	private static List<String> descriptionItems = Arrays.asList(new String[] { "描述","群组描述", "description" });
+
+	public String getCellStringValue(Cell cell) {
+		if (null != cell) {
+			switch (cell.getCellType()) {
+			case BLANK:
+				return "";
+			case BOOLEAN:
+				return BooleanUtils.toString(cell.getBooleanCellValue(), "true", "false", "false");
+			case ERROR:
+				return "";
+			case FORMULA:
+				return "";
+			case NUMERIC:
+				Double d = cell.getNumericCellValue();
+				Long l = d.longValue();
+				if (l.doubleValue() == d) {
+					return l.toString();
+				} else {
+					return d.toString();
+				}
+			default:
+				return cell.getStringCellValue();
+			}
+		}
+		return "";
+	}
+
+	public Integer getMemoColumn() {
+		return memoColumn;
+	}
+
+	public Integer getUniqueColumn() {
+		return uniqueColumn;
+	}
+
+	public Integer getNameColumn() {
+		return nameColumn;
+	}
+	
+	public Integer getPersonCodeColumn() {
+		return personCodeColumn;
+	}
+	
+	public Integer getUnitCodeColumn() {
+		return unitCodeColumn;
+	}
+	
+	public Integer getGroupCodeColumn() {
+		return groupCodeColumn;
+	}
+	
+	public Integer getDescriptionColumn() {
+		return descriptionColumn;
+	}
+
+	public Map<String, Integer> getAttributes() {
+		return attributes;
+	}
+
+	public Integer getFirstRow() {
+		return firstRow;
+	}
+
+	public Integer getLastRow() {
+		return lastRow;
+	}
+
+	public Integer getSheetIndex() {
+		return sheetIndex;
+	}
+
+}

+ 109 - 0
o2server/x_organization_assemble_control/src/main/java/com/x/organization/assemble/control/jaxrs/inputperson/IdentityItem.java

@@ -0,0 +1,109 @@
+package com.x.organization.assemble.control.jaxrs.inputperson;
+
+import com.x.base.core.project.gson.GsonPropertyObject;
+
+public class IdentityItem extends GsonPropertyObject {
+
+	private String name;
+	private String person;
+	private String unit;
+	private String unitName;
+	private Integer unitLevel;
+	private String unitLevelName;
+	
+	private String personCode;
+	private String unitCode;
+	private String dutyCode;
+	private Boolean major;
+	
+
+	private Integer row;
+
+	public String getName() {
+		return name;
+	}
+
+	public void setName(String name) {
+		this.name = name;
+	}
+
+	public String getPerson() {
+		return person;
+	}
+
+	public void setPerson(String person) {
+		this.person = person;
+	}
+
+	public String getUnit() {
+		return unit;
+	}
+
+	public void setUnit(String unit) {
+		this.unit = unit;
+	}
+
+	public String getUnitName() {
+		return unitName;
+	}
+
+	public void setUnitName(String unitName) {
+		this.unitName = unitName;
+	}
+
+	public Integer getUnitLevel() {
+		return unitLevel;
+	}
+
+	public void setUnitLevel(Integer unitLevel) {
+		this.unitLevel = unitLevel;
+	}
+	
+	public String getUnitLevelName() {
+		return unitLevelName;
+	}
+
+	public void setUnitLevelName(String unitLevelName) {
+		this.unitLevelName = unitLevelName;
+	}
+	
+	public String getPersonCode() {
+		return personCode;
+	}
+
+	public void setPersonCode(String personCode) {
+		this.personCode = personCode;
+	}
+	
+	public String getUnitCode() {
+		return unitCode;
+	}
+
+	public void setUnitCode(String unitCode) {
+		this.unitCode = unitCode;
+	}
+	
+	public String getDutyCode() {
+		return dutyCode;
+	}
+
+	public void setDutyCode(String dutyCode) {
+		this.dutyCode = dutyCode;
+	}
+
+	public Boolean getMajor() {
+		return major;
+	}
+
+	public void setMajor(Boolean major) {
+		this.major = major;
+	}
+
+	public Integer getRow() {
+		return row;
+	}
+
+	public void setRow(Integer row) {
+		this.row = row;
+	}
+}

+ 134 - 0
o2server/x_organization_assemble_control/src/main/java/com/x/organization/assemble/control/jaxrs/inputperson/IdentitySheetConfigurator.java

@@ -0,0 +1,134 @@
+package com.x.organization.assemble.control.jaxrs.inputperson;
+
+import java.util.Arrays;
+import java.util.HashMap;
+import java.util.List;
+import java.util.Map;
+import java.util.regex.Matcher;
+import java.util.regex.Pattern;
+
+import org.apache.commons.lang3.BooleanUtils;
+import org.apache.commons.lang3.StringUtils;
+import org.apache.poi.ss.usermodel.Cell;
+import org.apache.poi.ss.usermodel.Row;
+import org.apache.poi.ss.usermodel.Sheet;
+import org.apache.poi.xssf.usermodel.XSSFWorkbook;
+
+import com.x.base.core.project.gson.GsonPropertyObject;
+
+public class IdentitySheetConfigurator extends GsonPropertyObject {
+
+	private static final Pattern attributePattern = Pattern.compile("^\\((.+?)\\)$");
+
+	private Integer sheetIndex;
+	private Integer memoColumn;
+	private Integer firstRow;
+	private Integer lastRow;
+
+	private Integer uniqueColumn;
+	private Integer unitCodeColumn;
+	private Integer dutyCodeColumn;
+	private Integer majorColumn;
+
+	private Map<String, Integer> attributes = new HashMap<>();
+
+	public IdentitySheetConfigurator(XSSFWorkbook workbook, Sheet sheet) {
+		this.sheetIndex = workbook.getSheetIndex(sheet);
+		Row row = sheet.getRow(sheet.getFirstRowNum());
+		this.firstRow = sheet.getFirstRowNum() + 1;
+		this.lastRow = sheet.getLastRowNum();
+		memoColumn = row.getLastCellNum() + 1;
+		for (int i = row.getFirstCellNum(); i <= row.getLastCellNum(); i++) {
+			Cell cell = row.getCell(i);
+			if (null != cell) {
+				String str = this.getCellStringValue(cell);
+				System.out.println("identityStr = "+str);
+				if (StringUtils.isNotEmpty(str)) {
+					if (uniqueItems.contains(str)) {
+						this.uniqueColumn = i;
+					} else if (unitCodeItems.contains(str)) {
+						this.unitCodeColumn = i;
+					} else if (dutyCodeItems.contains(str)) {
+						this.dutyCodeColumn = i;
+					} else if (majorItems.contains(str)) {
+						this.majorColumn = i;
+					} else {
+						Matcher matcher = attributePattern.matcher(str);
+						if (matcher.matches()) {
+							String attribute = matcher.group(1);
+							this.attributes.put(attribute, new Integer(i));
+						}
+					}
+				}
+			}
+		}
+	}
+
+	private static List<String> uniqueItems = Arrays.asList(new String[] { "人员编号 *", "员工账号 *", "unique" });
+	private static List<String> unitCodeItems = Arrays.asList(new String[] { "组织编号 *", "组织编号", "unitCode" });
+	private static List<String> dutyCodeItems = Arrays.asList(new String[] { "职务编号", "dutyCode"});
+	private static List<String> majorItems = Arrays.asList(new String[] { "主兼职","major" });
+
+	public String getCellStringValue(Cell cell) {
+		if (null != cell) {
+			switch (cell.getCellType()) {
+			case BLANK:
+				return "";
+			case BOOLEAN:
+				return BooleanUtils.toString(cell.getBooleanCellValue(), "true", "false", "false");
+			case ERROR:
+				return "";
+			case FORMULA:
+				return "";
+			case NUMERIC:
+				Double d = cell.getNumericCellValue();
+				Long l = d.longValue();
+				if (l.doubleValue() == d) {
+					return l.toString();
+				} else {
+					return d.toString();
+				}
+			default:
+				return cell.getStringCellValue();
+			}
+		}
+		return "";
+	}
+
+	public Integer getMemoColumn() {
+		return memoColumn;
+	}
+
+	public Integer getUniqueColumn() {
+		return uniqueColumn;
+	}
+
+	public Integer getUnitCodeColumn() { 
+		return unitCodeColumn;
+	}
+
+	public Integer getDutyCodeColumn() {
+		return dutyCodeColumn;
+	}
+	
+	public Integer getMajorColumn() {
+		return majorColumn;
+	}
+
+	public Map<String, Integer> getAttributes() {
+		return attributes;
+	}
+
+	public Integer getFirstRow() {
+		return firstRow;
+	}
+
+	public Integer getLastRow() {
+		return lastRow;
+	}
+
+	public Integer getSheetIndex() {
+		return sheetIndex;
+	}
+
+}

+ 20 - 3
o2server/x_organization_assemble_control/src/main/java/com/x/organization/assemble/control/jaxrs/inputperson/InputPersonAction.java

@@ -32,17 +32,17 @@ public class InputPersonAction extends StandardJaxrsAction {
 
 
 	private static Logger logger = LoggerFactory.getLogger(InputPersonAction.class);
 	private static Logger logger = LoggerFactory.getLogger(InputPersonAction.class);
 
 
-	@JaxrsMethodDescribe(value = "上传Excel导入人员.", action = ActionInput.class)
+	@JaxrsMethodDescribe(value = "上传Excel导入人员.", action = ActionInputAll.class)
 	@POST
 	@POST
 	@Consumes(MediaType.MULTIPART_FORM_DATA)
 	@Consumes(MediaType.MULTIPART_FORM_DATA)
 	@Produces(HttpMediaType.APPLICATION_JSON_UTF_8)
 	@Produces(HttpMediaType.APPLICATION_JSON_UTF_8)
 	public void input(@Suspended final AsyncResponse asyncResponse, @Context HttpServletRequest request,
 	public void input(@Suspended final AsyncResponse asyncResponse, @Context HttpServletRequest request,
 			@FormDataParam(FILE_FIELD) final byte[] bytes,
 			@FormDataParam(FILE_FIELD) final byte[] bytes,
 			@JaxrsParameterDescribe("Excel文件") @FormDataParam(FILE_FIELD) final FormDataContentDisposition disposition) {
 			@JaxrsParameterDescribe("Excel文件") @FormDataParam(FILE_FIELD) final FormDataContentDisposition disposition) {
-		ActionResult<ActionInput.Wo> result = new ActionResult<>();
+		ActionResult<ActionInputAll.Wo> result = new ActionResult<>();
 		EffectivePerson effectivePerson = this.effectivePerson(request);
 		EffectivePerson effectivePerson = this.effectivePerson(request);
 		try {
 		try {
-			result = new ActionInput().execute(effectivePerson, bytes, disposition);
+			result = new ActionInputAll().execute(effectivePerson, bytes, disposition);
 		} catch (Exception e) {
 		} catch (Exception e) {
 			logger.error(e, effectivePerson, request, null);
 			logger.error(e, effectivePerson, request, null);
 			result.error(e);
 			result.error(e);
@@ -82,5 +82,22 @@ public class InputPersonAction extends StandardJaxrsAction {
 		}
 		}
 		asyncResponse.resume(ResponseFactory.getEntityTagActionResultResponse(request, result));
 		asyncResponse.resume(ResponseFactory.getEntityTagActionResultResponse(request, result));
 	}
 	}
+	
+	@JaxrsMethodDescribe(value = "清空人员组织数据.", action = ActionWipeAll.class)
+	@GET
+	@Path("wipe")
+	@Produces(HttpMediaType.APPLICATION_JSON_UTF_8)
+	@Consumes(MediaType.APPLICATION_JSON)
+	public void wipeAll(@Suspended final AsyncResponse asyncResponse, @Context HttpServletRequest request) {
+		ActionResult<ActionWipeAll.Wo> result = new ActionResult<>();
+		EffectivePerson effectivePerson = this.effectivePerson(request);
+		try {
+			result = new ActionWipeAll().execute(effectivePerson); 
+		} catch (Exception e) {
+			logger.error(e, effectivePerson, request, null);
+			result.error(e);
+		}
+		asyncResponse.resume(ResponseFactory.getEntityTagActionResultResponse(request, result));
+	}
 
 
 }
 }

+ 9 - 0
o2server/x_organization_assemble_control/src/main/java/com/x/organization/assemble/control/jaxrs/inputperson/PersonItem.java

@@ -14,6 +14,7 @@ public class PersonItem extends GsonPropertyObject {
 	private String unique;
 	private String unique;
 	private String employee;
 	private String employee;
 	private String mobile;
 	private String mobile;
+	private String officePhone;
 	private String password;
 	private String password;
 
 
 	private Integer row;
 	private Integer row;
@@ -67,6 +68,14 @@ public class PersonItem extends GsonPropertyObject {
 	public void setMobile(String mobile) {
 	public void setMobile(String mobile) {
 		this.mobile = mobile;
 		this.mobile = mobile;
 	}
 	}
+	
+	public String getOfficePhone() {
+		return officePhone;
+	}
+
+	public void setOfficePhone(String officePhone) {
+		this.officePhone = officePhone;
+	}
 
 
 	public Map<String, String> getAttributes() {
 	public Map<String, String> getAttributes() {
 		return attributes;
 		return attributes;

+ 14 - 5
o2server/x_organization_assemble_control/src/main/java/com/x/organization/assemble/control/jaxrs/inputperson/PersonSheetConfigurator.java

@@ -29,8 +29,9 @@ public class PersonSheetConfigurator extends GsonPropertyObject {
 	private Integer uniqueColumn;
 	private Integer uniqueColumn;
 	private Integer employeeColumn;
 	private Integer employeeColumn;
 	private Integer mobileColumn;
 	private Integer mobileColumn;
-	private Integer mailColumn;
+	private Integer officePhoneColumn;
 	private Integer genderTypeColumn;
 	private Integer genderTypeColumn;
+	private Integer mailColumn;
 
 
 	private Map<String, Integer> attributes = new HashMap<>();
 	private Map<String, Integer> attributes = new HashMap<>();
 
 
@@ -44,6 +45,7 @@ public class PersonSheetConfigurator extends GsonPropertyObject {
 			Cell cell = row.getCell(i);
 			Cell cell = row.getCell(i);
 			if (null != cell) {
 			if (null != cell) {
 				String str = this.getCellStringValue(cell);
 				String str = this.getCellStringValue(cell);
+				System.out.println("personStr = "+str);
 				if (StringUtils.isNotEmpty(str)) {
 				if (StringUtils.isNotEmpty(str)) {
 					if (nameItems.contains(str)) {
 					if (nameItems.contains(str)) {
 						this.nameColumn = i;
 						this.nameColumn = i;
@@ -57,6 +59,8 @@ public class PersonSheetConfigurator extends GsonPropertyObject {
 						this.mailColumn = i;
 						this.mailColumn = i;
 					} else if (genderTypeItems.contains(str)) {
 					} else if (genderTypeItems.contains(str)) {
 						this.genderTypeColumn = i;
 						this.genderTypeColumn = i;
+					} else if (officePhoneItems.contains(str)) {
+						this.officePhoneColumn = i;
 					} else {
 					} else {
 						Matcher matcher = attributePattern.matcher(str);
 						Matcher matcher = attributePattern.matcher(str);
 						if (matcher.matches()) {
 						if (matcher.matches()) {
@@ -69,10 +73,11 @@ public class PersonSheetConfigurator extends GsonPropertyObject {
 		}
 		}
 	}
 	}
 
 
-	private static List<String> nameItems = Arrays.asList(new String[] { "姓名", "name" });
-	private static List<String> uniqueItems = Arrays.asList(new String[] { "唯一编码", "编码", "unique" });
-	private static List<String> employeeItems = Arrays.asList(new String[] { "员工号", "员工编号", "employee" });
-	private static List<String> mobileItems = Arrays.asList(new String[] { "手机号", "手机", "联系电话", "phone", "mobile" });
+	private static List<String> nameItems = Arrays.asList(new String[] { "人员姓名 *", "人员姓名", "name" });
+	private static List<String> employeeItems = Arrays.asList(new String[] { "人员编号 *", "人员编号", "unique" });
+	private static List<String> uniqueItems = Arrays.asList(new String[] { "登录账号 *", "员工账号 *", "employee" });
+	private static List<String> mobileItems = Arrays.asList(new String[] { "手机号码 *", "手机", "联系电话", "phone", "mobile" });
+	private static List<String> officePhoneItems = Arrays.asList(new String[] { "办公电话", "办公室电话", "工作电话", "officePhone" });
 	private static List<String> mailItems = Arrays.asList(new String[] { "电子邮件", "邮件", "邮箱", "邮件地址", "mail", "email" });
 	private static List<String> mailItems = Arrays.asList(new String[] { "电子邮件", "邮件", "邮箱", "邮件地址", "mail", "email" });
 	private static List<String> genderTypeItems = Arrays.asList(new String[] { "性别", "gender", "genderType" });
 	private static List<String> genderTypeItems = Arrays.asList(new String[] { "性别", "gender", "genderType" });
 
 
@@ -141,6 +146,10 @@ public class PersonSheetConfigurator extends GsonPropertyObject {
 	public Integer getMailColumn() {
 	public Integer getMailColumn() {
 		return mailColumn;
 		return mailColumn;
 	}
 	}
+	
+	public Integer getOfficePhoneColumn() {
+		return officePhoneColumn; 
+	}
 
 
 	public Integer getSheetIndex() {
 	public Integer getSheetIndex() {
 		return sheetIndex;
 		return sheetIndex;

+ 94 - 0
o2server/x_organization_assemble_control/src/main/java/com/x/organization/assemble/control/jaxrs/inputperson/UnitItem.java

@@ -0,0 +1,94 @@
+package com.x.organization.assemble.control.jaxrs.inputperson;
+
+import java.util.HashMap;
+import java.util.List;
+import java.util.Map;
+
+import com.x.base.core.project.gson.GsonPropertyObject; 
+
+public class UnitItem extends GsonPropertyObject {
+
+	private String name;
+	private String shortName;
+	private String unique;
+	private List<String> typeList;
+	private String superior;
+	private Integer orderNumber;
+	private String description;
+
+	private Integer row;
+
+	private Map<String, String> attributes = new HashMap<>();
+
+	public String getName() {
+		return name;
+	}
+
+	public void setName(String name) {
+		this.name = name;
+	}
+
+	public Integer getOrderNumber() {
+		return orderNumber;
+	}
+
+	public void setOrderNumber(Integer orderNumber) {
+		this.orderNumber = orderNumber;
+	}
+
+	public String getShortName() {
+		return shortName;
+	}
+
+	public void setShortName(String shortName) {
+		this.shortName = shortName;
+	}
+
+	public String getUnique() {
+		return unique;
+	}
+
+	public void setUnique(String unique) {
+		this.unique = unique;
+	}
+
+	public String getSuperior() {
+		return superior;
+	}
+
+	public void setSuperior(String superior) {
+		this.superior = superior;
+	}
+
+	public List<String> getTypeList() {
+		return typeList;
+	}
+
+	public void setTypeList(List<String> typeList) {
+		this.typeList = typeList;
+	}
+
+	public String getDescription() {
+		return description;
+	}
+
+	public void setDescription(String description) {
+		this.description = description;
+	}
+	
+	public Map<String, String> getAttributes() {
+		return attributes;
+	}
+
+	public void setAttributes(Map<String, String> attributes) {
+		this.attributes = attributes;
+	}
+
+	public Integer getRow() {
+		return row;
+	}
+
+	public void setRow(Integer row) {
+		this.row = row;
+	}
+}

+ 149 - 0
o2server/x_organization_assemble_control/src/main/java/com/x/organization/assemble/control/jaxrs/inputperson/UnitSheetConfigurator.java

@@ -0,0 +1,149 @@
+package com.x.organization.assemble.control.jaxrs.inputperson;
+
+import java.util.Arrays;
+import java.util.HashMap;
+import java.util.List;
+import java.util.Map;
+import java.util.regex.Matcher;
+import java.util.regex.Pattern;
+
+import org.apache.commons.lang3.BooleanUtils;
+import org.apache.commons.lang3.StringUtils;
+import org.apache.poi.ss.usermodel.Cell;
+import org.apache.poi.ss.usermodel.Row;
+import org.apache.poi.ss.usermodel.Sheet;
+import org.apache.poi.xssf.usermodel.XSSFWorkbook;
+
+import com.x.base.core.project.gson.GsonPropertyObject;
+
+public class UnitSheetConfigurator extends GsonPropertyObject {
+
+	private static final Pattern attributePattern = Pattern.compile("^\\((.+?)\\)$");
+
+	private Integer sheetIndex;
+	private Integer memoColumn;
+	private Integer firstRow;
+	private Integer lastRow;
+
+	private Integer nameColumn;
+	private Integer uniqueColumn;
+	private Integer unitTypeColumn;
+	private Integer superiorColumn;
+	private Integer orderNumberColumn;
+	private Integer descriptionColumn;
+
+	private Map<String, Integer> attributes = new HashMap<>();
+
+	public UnitSheetConfigurator(XSSFWorkbook workbook, Sheet sheet) {
+		this.sheetIndex = workbook.getSheetIndex(sheet);
+		Row row = sheet.getRow(sheet.getFirstRowNum());
+		this.firstRow = sheet.getFirstRowNum() + 1;
+		this.lastRow = sheet.getLastRowNum();
+		memoColumn = row.getLastCellNum() + 1;
+		for (int i = row.getFirstCellNum(); i <= row.getLastCellNum(); i++) {
+			Cell cell = row.getCell(i);
+			if (null != cell) {
+				String str = this.getCellStringValue(cell);
+				if (StringUtils.isNotEmpty(str)) {
+					if (nameItems.contains(str)) {
+						this.nameColumn = i;
+					} else if (uniqueItems.contains(str)) {
+						this.uniqueColumn = i;
+					} else if (unitTypeItems.contains(str)) {
+						this.unitTypeColumn = i;
+					} else if (superiorItems.contains(str)) {
+						this.superiorColumn = i;
+					} else if (orderNumberItems.contains(str)) {
+						this.orderNumberColumn = i;
+					} else if (descriptionItems.contains(str)) {
+							this.descriptionColumn = i;
+					}else {
+						Matcher matcher = attributePattern.matcher(str);
+						if (matcher.matches()) {
+							String attribute = matcher.group(1);
+							this.attributes.put(attribute, new Integer(i));
+						}
+					}
+				}
+			}
+		}
+	}
+
+	private static List<String> nameItems = Arrays.asList(new String[] { "组织名称 *", "name" });
+	private static List<String> uniqueItems = Arrays.asList(new String[] { "编号", "组织编号 *", "unique" });
+	private static List<String> unitTypeItems = Arrays.asList(new String[] { "组织级别编号 *", "组织级别名称 *", "unitType" });
+	private static List<String> superiorItems = Arrays.asList(new String[] { "上级组织", "上级组织编号", "superior"});
+	private static List<String> orderNumberItems = Arrays.asList(new String[] { "排序", "排序号", "orderNumber" });
+	private static List<String> descriptionItems = Arrays.asList(new String[] { "描述", "备注", "description" });
+
+	public String getCellStringValue(Cell cell) {
+		if (null != cell) {
+			switch (cell.getCellType()) {
+			case BLANK:
+				return "";
+			case BOOLEAN:
+				return BooleanUtils.toString(cell.getBooleanCellValue(), "true", "false", "false");
+			case ERROR:
+				return "";
+			case FORMULA:
+				return "";
+			case NUMERIC:
+				Double d = cell.getNumericCellValue();
+				Long l = d.longValue();
+				if (l.doubleValue() == d) {
+					return l.toString();
+				} else {
+					return d.toString();
+				}
+			default:
+				return cell.getStringCellValue();
+			}
+		}
+		return "";
+	}
+
+	public Integer getMemoColumn() {
+		return memoColumn;
+	}
+
+	public Integer getNameColumn() {
+		return nameColumn;
+	}
+
+	public Integer getUniqueColumn() {
+		return uniqueColumn;
+	}
+
+	public Integer getUnitTypeColumn() {
+		return unitTypeColumn;
+	}
+
+	public Map<String, Integer> getAttributes() {
+		return attributes;
+	}
+
+	public Integer getFirstRow() {
+		return firstRow;
+	}
+
+	public Integer getLastRow() {
+		return lastRow;
+	}
+
+	public Integer getOrderNumberColumn() {
+		return orderNumberColumn;
+	}
+	
+	public Integer getDescriptionColumn() {
+		return descriptionColumn;
+	}
+	
+	public Integer getSuperiorColumn() {
+		return superiorColumn;
+	}
+
+	public Integer getSheetIndex() {
+		return sheetIndex;
+	}
+
+}

+ 118 - 0
o2server/x_organization_assemble_control/src/main/java/com/x/organization/assemble/control/jaxrs/inputperson/UnitTypeSheetConfigurator.java

@@ -0,0 +1,118 @@
+package com.x.organization.assemble.control.jaxrs.inputperson;
+
+import java.util.Arrays;
+import java.util.HashMap;
+import java.util.List;
+import java.util.Map;
+import java.util.regex.Matcher;
+import java.util.regex.Pattern;
+
+import org.apache.commons.lang3.BooleanUtils;
+import org.apache.commons.lang3.StringUtils;
+import org.apache.poi.ss.usermodel.Cell;
+import org.apache.poi.ss.usermodel.Row;
+import org.apache.poi.ss.usermodel.Sheet;
+import org.apache.poi.xssf.usermodel.XSSFWorkbook;
+
+import com.x.base.core.project.gson.GsonPropertyObject;
+
+public class UnitTypeSheetConfigurator extends GsonPropertyObject {
+
+	private static final Pattern attributePattern = Pattern.compile("^\\((.+?)\\)$");
+
+	private Integer sheetIndex;
+	private Integer memoColumn;
+	private Integer firstRow;
+	private Integer lastRow;
+
+	private Integer typeCodeColumn;
+	private Integer typeNameColumn;
+
+	private Map<String, Integer> attributes = new HashMap<>();
+
+	public UnitTypeSheetConfigurator(XSSFWorkbook workbook, Sheet sheet) {
+		this.sheetIndex = workbook.getSheetIndex(sheet);
+		Row row = sheet.getRow(sheet.getFirstRowNum());
+		this.firstRow = sheet.getFirstRowNum() + 1;
+		this.lastRow = sheet.getLastRowNum();
+		memoColumn = row.getLastCellNum() + 1;
+		for (int i = row.getFirstCellNum(); i <= row.getLastCellNum(); i++) {
+			Cell cell = row.getCell(i);
+			if (null != cell) {
+				String str = this.getCellStringValue(cell);
+				//System.out.println("str="+str+"----i="+i);
+				if (StringUtils.isNotEmpty(str)) {
+					if (typeCodeItems.contains(str)) {
+						this.typeCodeColumn = i;
+					} else if (typeNameItems.contains(str)) {
+						this.typeNameColumn = i;
+					}else {
+						Matcher matcher = attributePattern.matcher(str);
+						if (matcher.matches()) {
+							String attribute = matcher.group(1);
+							this.attributes.put(attribute, new Integer(i));
+						}
+					}
+				}
+			}
+		}
+	}
+
+	private static List<String> typeCodeItems = Arrays.asList(new String[] { "级别编号", "组织级别编号","级别编号 *", "typeCode" });
+	private static List<String> typeNameItems = Arrays.asList(new String[] { "级别名称 *", "组织级别名称","名称", "typeName" });
+
+	public String getCellStringValue(Cell cell) {
+		if (null != cell) {
+			switch (cell.getCellType()) {
+			case BLANK:
+				return "";
+			case BOOLEAN:
+				return BooleanUtils.toString(cell.getBooleanCellValue(), "true", "false", "false");
+			case ERROR:
+				return "";
+			case FORMULA:
+				return "";
+			case NUMERIC:
+				Double d = cell.getNumericCellValue();
+				Long l = d.longValue();
+				if (l.doubleValue() == d) {
+					return l.toString();
+				} else {
+					return d.toString();
+				}
+			default:
+				return cell.getStringCellValue();
+			}
+		}
+		return "";
+	}
+
+	public Integer getMemoColumn() {
+		return memoColumn;
+	}
+
+	public Integer getTypeCodeColumn() {
+		return typeCodeColumn;
+	}
+
+	public Integer getTypeNameColumn() {
+		return typeNameColumn;
+	}
+
+	public Map<String, Integer> getAttributes() {
+		return attributes;
+	}
+
+	public Integer getFirstRow() {
+		return firstRow;
+	}
+
+	public Integer getLastRow() {
+		return lastRow;
+	}
+
+	public Integer getSheetIndex() {
+		return sheetIndex;
+	}
+
+}

+ 1 - 0
o2web/source/o2_core/o2/xAction/services/x_organization_assemble_control.json

@@ -218,6 +218,7 @@
   "getImportPersonTemplate": {"uri": "/jaxrs/inputperson/template"},
   "getImportPersonTemplate": {"uri": "/jaxrs/inputperson/template"},
   "getImportPersonResault": {"uri": "/jaxrs/inputperson/result/flag/{flag}"},
   "getImportPersonResault": {"uri": "/jaxrs/inputperson/result/flag/{flag}"},
   "importPerson": {"uri": "/jaxrs/inputperson", "method": "POST", "enctype": "formData"},
   "importPerson": {"uri": "/jaxrs/inputperson", "method": "POST", "enctype": "formData"},
+  "wipeAll": {"uri": "/jaxrs/inputperson/wipe"},
 
 
   "clazz": "x_organization_assemble_control"
   "clazz": "x_organization_assemble_control"
 }
 }

+ 1 - 1
o2web/source/x_component_Org/Main.js

@@ -186,7 +186,7 @@ MWF.xApplication.Org.Main = new Class({
         this.importPersonTitleNode.set("text", this.lp.importPersonTitle);
         this.importPersonTitleNode.set("text", this.lp.importPersonTitle);
         this.importPersonTemplateNode.set("html", infor);
         this.importPersonTemplateNode.set("html", infor);
         this.importPersonNode.set("text", this.lp.importPersonAction);
         this.importPersonNode.set("text", this.lp.importPersonAction);
-
+		
 
 
         this.importPersonNode.addEvent("click", function(){
         this.importPersonNode.addEvent("click", function(){
             this.importPersonResultNode.hide();
             this.importPersonResultNode.hide();

+ 1 - 0
o2web/source/x_component_Org/lp/zh-cn.js

@@ -240,6 +240,7 @@ MWF.xApplication.Org.LP = {
     "resetPasswordText": "您确定要为用户 {name} 重置密码吗?",
     "resetPasswordText": "您确定要为用户 {name} 重置密码吗?",
     "resetPasswordSuccess": "用户 {name} 的密码已重置",
     "resetPasswordSuccess": "用户 {name} 的密码已重置",
 
 
+    "importPersonClean": "清空人员组织数据",
     "importPersonTitle": "人员导入",
     "importPersonTitle": "人员导入",
     "importPersonInfor": "您可以通过Excel批量导入人员,<a target='_blank' href='{url}' >点击此处</a>获取人员导入模板",
     "importPersonInfor": "您可以通过Excel批量导入人员,<a target='_blank' href='{url}' >点击此处</a>获取人员导入模板",
     "importPersonAction": "上传Excel文件,导入人员",
     "importPersonAction": "上传Excel文件,导入人员",