Index: forgon-core/src/main/java/com/forgon/security/service/UserManagerImpl.java =================================================================== diff -u -r21533 -r21826 --- forgon-core/src/main/java/com/forgon/security/service/UserManagerImpl.java (.../UserManagerImpl.java) (revision 21533) +++ forgon-core/src/main/java/com/forgon/security/service/UserManagerImpl.java (.../UserManagerImpl.java) (revision 21826) @@ -459,7 +459,9 @@ saveAndKeepPassword(user); //处理一个用户从一个科室调到另一个科室 String value = map.get(name); - if(StringUtils.isBlank(value)){ + + //组织机构不为空时才清除该用户所有科室关系表数据 + if(StringUtils.isBlank(value) && parent != null){ // 若是已存在的用户,则先清空与组织机构的关系,再重新设置 Query query = objectDao.getHibernateSession().createQuery("from " + OrgUserRelation.class.getSimpleName() + " where userId = :userid"); List orgUserRelationList = query.setParameter("userid", user.getId()).list(); Index: forgon-core/src/main/resources/com/forgon/directory/model/OrgUnit.hbm.xml =================================================================== diff -u -r21737 -r21826 --- forgon-core/src/main/resources/com/forgon/directory/model/OrgUnit.hbm.xml (.../OrgUnit.hbm.xml) (revision 21737) +++ forgon-core/src/main/resources/com/forgon/directory/model/OrgUnit.hbm.xml (.../OrgUnit.hbm.xml) (revision 21826) @@ -24,6 +24,7 @@ - + @@ -79,6 +80,7 @@ map = new HashMap(); for(UserVo vo : allVos){ if(vo == null){ + logger.warn("发现用户数组变量里有空元素"); continue; } - // 检查用户是否存在 - ResultSet rs = objectDao.executeSql( - "select count(*) from SS_USERS u " - + "where u.name = '"+vo.coding+"'"); - boolean userExist = false; - try { - while(rs.next()){ - if(rs.getInt(1) > 0){ - userExist = true; - } + if(StringUtils.isBlank(vo.coding) || StringUtils.isBlank(vo.name)){ + if(StringUtils.isNotBlank(vo.coding)){ + logger.warn("登录名为"+ vo.coding +"的用户的姓名为空"); + }else if(StringUtils.isNotBlank(vo.name)){ + logger.warn("姓名为"+ vo.name +"的用户的登录名为空"); + }if(StringUtils.isNotBlank(vo.coding)){ + logger.warn("用户的登录名和姓名都为空"); } - } catch (SQLException e) { - e.printStackTrace(); - }finally { - DatabaseUtil.closeResultSetAndStatement(rs); - } - - //同步用户当设置更新交集为false时是否不更改系统中的用户与部门的对应关系,true表示不更改,false表示会更新,默认为false - boolean syncUserWhenUpdateIntersectionDataIsFalseNotChangeOrgUserRelation = - CssdUtils.getSystemSetConfigByNameBool("syncUserWhenUpdateIntersectionDataIsFalseNotChangeOrgUserRelation"); - if(userExist && !更新交集数据 && syncUserWhenUpdateIntersectionDataIsFalseNotChangeOrgUserRelation){ continue; } + if(alreadyQueryDefaultParentOrgUnit == false){ + alreadyQueryDefaultParentOrgUnit = true; + defaultParentOrgUnit = (OrgUnit)orgUnitManager.getOrgUnitByCode(默认父节点的编码); + } + // 检查用户是否存在 + User user = userManager.getFirst("name = '" + vo.coding + "'"); - // 检查用户与该科室的关系是否存在 - rs = objectDao.executeSql("select u.lockStatus from SS_USERS u,OrgUserRelation r,OrgUnit o " - + "where u.id = r.userId and o.id = r.orgUnitId and o.orgUnitCoding " - + "= '"+ (vo.orgUnitCoding == null ? '0' : vo.orgUnitCoding) +"' and u.name = '"+vo.coding+"'"); //这个用户存在的话,就找出与科室的关系(根据his那边的关系)这里有且只会查到一条 - boolean userOrgRelationExist = false; - boolean isLockStatus = false; //此用户是否被锁定 - try { - while(rs.next()){ - String lockStatus = rs.getString(1); //这里取出来的可能为null,因为旧数据表没有这个字段,不过也他修改无所谓,(这里对被锁定的用户不会被影响的) - if(lockStatus != null){ - userOrgRelationExist = true; - if ("是".equals(lockStatus)) { - isLockStatus = true; - } + //如果用户存在 + if(user != null){ + //同步用户当设置更新交集为false时是否不更改系统中的用户与部门的对应关系,true表示不更改,false表示会更新,默认为false + boolean syncUserWhenUpdateIntersectionDataIsFalseNotChangeOrgUserRelation = + CssdUtils.getSystemSetConfigByNameBool("syncUserWhenUpdateIntersectionDataIsFalseNotChangeOrgUserRelation"); + if(!更新交集数据 && syncUserWhenUpdateIntersectionDataIsFalseNotChangeOrgUserRelation){ + continue; + } + //如果用户为锁定的则不处理 + if(StringUtils.equals(com.forgon.Constants.STR_YES, user.getLockStatus())){ + logger.debug("登录名为"+ vo.coding +"的用户为锁定状态,不进行处理"); + continue; + } + //修改用户基本信息(姓名,如果有修改时) + if(!StringUtils.equals(vo.name, user.getFullName())){ + user.setFullName(vo.name); + objectDao.saveOrUpdate(user); + } + + // 检查用户与该科室的关系是否存在 + ResultSet rs = objectDao.executeSql("select count(0) cnt from SS_USERS u,OrgUserRelation r,OrgUnit o " + + "where u.id = r.userId and o.id = r.orgUnitId and o.orgUnitCoding " + + "= '"+ (vo.orgUnitCoding == null ? '0' : vo.orgUnitCoding) +"' and u.name = '"+vo.coding+"'"); //这个用户存在的话,就找出与科室的关系(根据his那边的关系)这里有且只会查到一条 + boolean userOrgRelationExist = false; + try { + while(rs.next()){ + userOrgRelationExist = rs.getInt("cnt") > 0; } + } catch (SQLException e) { + e.printStackTrace(); + }finally { + DatabaseUtil.closeResultSetAndStatement(rs); } - } catch (SQLException e) { - e.printStackTrace(); - }finally { - DatabaseUtil.closeResultSetAndStatement(rs); + //如果该人员与该组织关系已存在,则不调整人员与组织机构关联表 + if (userOrgRelationExist) { + continue; + } + //根据his系统用户和科室的关系,查看此组织机构在我们追溯系统是否也存在 + OrgUnit willRelativeOrgUnit = (OrgUnit)orgUnitManager.getOrgUnitByCode(vo.orgUnitCoding); + if(willRelativeOrgUnit == null){ + //如果接口该用户所属的组织机构在追溯系统的组织机构表不存在,且该用户与默认父科室的关系也不存在时 + willRelativeOrgUnit = defaultParentOrgUnit; + } + if(willRelativeOrgUnit == null){ + logger.debug("登录名为"+ vo.coding +"的用户的组织机构及默认父级组织机构为空,不进行处理"); + continue; + } + userManager.createOrUpdate(vo.coding, vo.name, vo.getStatus(), willRelativeOrgUnit, 默认角色ID, map); + }else{ + //否则如果用户不存在时 + //根据his系统用户和科室的关系,查看此组织机构在我们追溯系统是否也存在 + OrgUnit willRelativeOrgUnit = (OrgUnit)orgUnitManager.getOrgUnitByCode(vo.orgUnitCoding); + if(willRelativeOrgUnit == null){ + //如果接口该用户所属的组织机构在追溯系统的组织机构表不存在,且该用户与默认父科室的关系也不存在时 + willRelativeOrgUnit = defaultParentOrgUnit; + } + if(willRelativeOrgUnit == null){ + logger.debug("登录名为"+ vo.coding +"的用户的组织机构及默认父级组织机构为空,不进行处理"); + continue; + } + userManager.createOrUpdate(vo.coding, vo.name, vo.getStatus(), willRelativeOrgUnit, 默认角色ID, map); + + if ((count++) % 50 == 0) { + objectDao.flush(); + objectDao.clear(); + } + } - - //如果用户被锁定了, 则不允许修改 - if (isLockStatus) { - continue; - } - - //修改人员信息 - userManager.createOrUpdate(vo.coding, vo.name, vo.getStatus(), null, 默认角色ID, map); - - //如果该人员与该组织关系已存在,则不调整人员与组织机构关联表 - if (userOrgRelationExist) { - continue; - } - - OrgUnit parent = (OrgUnit)orgUnitManager.getOrgUnitByCode(vo.orgUnitCoding); //根据his系统用户和科室的关系,查看此关系在我们系统是否也存在 - if(parent == null){ - parent = (OrgUnit)orgUnitManager.getOrgUnitByCode(默认父节点的编码); - } - userManager.createOrUpdate(vo.coding, vo.name, vo.getStatus(), parent, 默认角色ID, map); - - if ((count++) % 50 == 0) { - objectDao.flush(); - objectDao.clear(); - } } } Index: forgon-core/src/main/java/com/forgon/security/model/User.java =================================================================== diff -u -r21794 -r21826 --- forgon-core/src/main/java/com/forgon/security/model/User.java (.../User.java) (revision 21794) +++ forgon-core/src/main/java/com/forgon/security/model/User.java (.../User.java) (revision 21826) @@ -33,7 +33,7 @@ import com.forgon.tools.string.StringTools; @Entity -@Table(name = "SS_USERS") +@Table(name = "SS_USERS",indexes={@Index(columnList="name",name="user_name_index")}) @Cache(usage = CacheConcurrencyStrategy.NONSTRICT_READ_WRITE) public class User extends BarcodeDevice{