Index: forgon-core/src/main/java/com/forgon/security/service/UserManagerImpl.java =================================================================== diff -u -r27720 -r27732 --- forgon-core/src/main/java/com/forgon/security/service/UserManagerImpl.java (.../UserManagerImpl.java) (revision 27720) +++ forgon-core/src/main/java/com/forgon/security/service/UserManagerImpl.java (.../UserManagerImpl.java) (revision 27732) @@ -527,6 +527,15 @@ for (OrgUserRelation orgUserRelation : orgUserRelationList) { //不是手工添加就才可以删除与组织机构的关系(陈家儒改) if (!Constants.SOURCE_MANUAL.equals(orgUserRelation.getSource())) { + // 先解除关联关系 + OrgUnit orUnit = orgUserRelation.getOrgUnit(); + if(orUnit != null){ + orUnit.getOrgUserRelationes().remove(orgUserRelation); + } + User tempUser = orgUserRelation.getUser(); + if(tempUser != null){ + tempUser.getOrgUserRelations().remove(orgUserRelation); + } objectDao.getHibernateSession().delete(orgUserRelation); } } @@ -542,29 +551,22 @@ map.put(name, name); // 设置所属机构 if (CollectionUtils.isNotEmpty(parents)) { - List orgUserRelations = new ArrayList(); for (OrgUnit parent : parents) { OrgUserRelation orgUserRelation = new OrgUserRelation(); orgUserRelation.setOrgUnit(parent); orgUserRelation.setUser(user); orgUserRelation.setUserOrder(getMaxUserOrder(parent.getId())); orgUserRelation.setSource(source); - orgUserRelations.add(orgUserRelation); + objectDao.save(orgUserRelation); } - objectDao.batchSaveOrUpdate(orgUserRelations); } // 设置角色 if(CollectionUtils.isNotEmpty(addRoles)){ - Set roles = user.getRoles(); - if(roles == null){ - roles = new HashSet<>(); - user.setRoles(roles); - } - roles.addAll(addRoles); - + user.setRoles(new HashSet(addRoles)); objectDao.saveOrUpdate(user); + } return user; Index: ssts-datasync-default-impl/src/main/java/com/forgon/disinfectsystem/datasynchronization/service/DataSynchronizationManagerImpl.java =================================================================== diff -u -r27720 -r27732 --- ssts-datasync-default-impl/src/main/java/com/forgon/disinfectsystem/datasynchronization/service/DataSynchronizationManagerImpl.java (.../DataSynchronizationManagerImpl.java) (revision 27720) +++ ssts-datasync-default-impl/src/main/java/com/forgon/disinfectsystem/datasynchronization/service/DataSynchronizationManagerImpl.java (.../DataSynchronizationManagerImpl.java) (revision 27732) @@ -1004,49 +1004,37 @@ objectDao.saveOrUpdate(user); } - Collection orgUnitCodingCollection = StringTools.toCollectionIgnoreNullAndBlank(vo.orgUnitCoding, ";"); - HashSet set = new HashSet(orgUnitCodingCollection); - String orgCondition = CollectionUtils.isEmpty(set) ? "o.orgUnitCoding = '0' " : - SqlUtils.getStringFieldInLargeCollectionsPredicate("o.orgUnitCoding", set); - - // 检查用户与该科室的关系是否存在 - 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 " - + orgCondition - + " and u.name = '"+vo.coding+"'"); //这个用户存在的话,就找出与科室的关系(根据his那边的关系) boolean userOrgRelationExist = false; - try { - while(rs.next()){ - if(CollectionUtils.isNotEmpty(set)){ - userOrgRelationExist = rs.getInt("cnt") == set.size(); - }else{ - userOrgRelationExist = rs.getInt("cnt") > 0; - } + List orgUnitCodingList = (List) StringTools.toCollectionIgnoreNullAndBlank(vo.orgUnitCoding, ";"); + // 检查用户与该科室的关系是否存在 + String orgUnitCodes = user.getOrgUnitCodes(); + if(StringUtils.isNotBlank(orgUnitCodes)){ + List oldOrgUnitCodeList = (List) StringTools.toCollectionIgnoreNullAndBlank(orgUnitCodes, ";"); + Set newOrgUnitCodeSet = new HashSet(orgUnitCodingList); + Set oldOrgUnitCodeSet = new HashSet(oldOrgUnitCodeList); + if(CollectionUtils.isNotEmpty(newOrgUnitCodeSet) && + CollectionUtils.isNotEmpty(oldOrgUnitCodeSet) && + newOrgUnitCodeSet.size() == oldOrgUnitCodeSet.size()){ + if(oldOrgUnitCodeSet.containsAll(newOrgUnitCodeSet)){ + userOrgRelationExist = true; + } } - } catch (SQLException e) { - e.printStackTrace(); - }finally { - DatabaseUtil.closeResultSetAndStatement(rs); } // 用户与该科室的关系不存在,而且需要同步角色关系,则检查用户与同步到的角色关系是否存在 if(StringUtils.isNotBlank(vo.getRoleNames()) && userOrgRelationExist){ - Collection roleCollection = StringTools.toCollectionIgnoreNullAndBlank(vo.getRoleNames(), ";"); - Set roleSet = new HashSet(roleCollection); - ResultSet rs1 = null; - try { - rs1 = objectDao.executeSql("select count(0) urc from SS_USER_ROLE ur, SS_ROLES r " - + "where r.id = ur.ROLE_ID and " - + SqlUtils.getStringFieldInLargeCollectionsPredicate("r.descn", roleSet) - + " and ur.USER_ID = " + user.getId()); - while(rs1.next()){ - // 用户角色关系和同步的角色一样,则不需要同步 - userOrgRelationExist = rs1.getInt("urc") == roleSet.size(); + userOrgRelationExist = false; + Collection roleNameCollection1 = StringTools.toCollectionIgnoreNullAndBlank(vo.getRoleNames(), ";"); + Set newRoleNameSet = new HashSet(roleNameCollection1); + String roleNames = user.getRoleNames(); + Collection roleNameCollection2 = StringTools.toCollectionIgnoreNullAndBlank(roleNames, ";"); + Set oldRoleNameSet = new HashSet(roleNameCollection2); + if(CollectionUtils.isNotEmpty(newRoleNameSet) && + CollectionUtils.isNotEmpty(oldRoleNameSet) && + newRoleNameSet.size() == oldRoleNameSet.size()){ + if(oldRoleNameSet.containsAll(newRoleNameSet)){ + userOrgRelationExist = true; } - } catch (SQLException e) { - e.printStackTrace(); - }finally { - DatabaseUtil.closeResultSetAndStatement(rs1); } } @@ -1057,7 +1045,7 @@ } //根据his系统用户和科室的关系,查看此组织机构在我们追溯系统是否也存在 List willRelativeOrgUnits = objectDao.getCollection(OrgUnit.class.getSimpleName(), "orgUnitCoding", - (List)orgUnitCodingCollection); + orgUnitCodingList); if(CollectionUtils.isEmpty(willRelativeOrgUnits)){ //如果接口该用户所属的组织机构在追溯系统的组织机构表不存在,且该用户与默认父科室的关系也不存在时 willRelativeOrgUnits = new ArrayList(); @@ -1077,10 +1065,6 @@ roles = objectDao.getHibernateSession().createCriteria(Role.class) .add(Restrictions.in("name", 默认角色ID)).list(); } - if(CollectionUtils.isEmpty(roles)){ - logger.debug("登录名为"+ vo.coding +"的用户角色及默认角色为空,不进行处理"); - continue; - } userManager.createOrUpdate(useVo, vo.getStatus(), willRelativeOrgUnits, roles, map); }else{ //否则如果用户不存在时 @@ -1106,10 +1090,6 @@ roles = objectDao.getHibernateSession().createCriteria(Role.class) .add(Restrictions.in("name", 默认角色ID)).list(); } - if(CollectionUtils.isEmpty(roles)){ - logger.debug("登录名为"+ vo.coding +"的用户角色及默认角色为空,不进行处理"); - continue; - } userManager.createOrUpdate(useVo, vo.getStatus(), willRelativeOrgUnits, roles, map); if ((count++) % 50 == 0) {