Index: forgon-tools/src/main/java/com/forgon/Constants.java =================================================================== diff -u -r41525 -r41597 --- forgon-tools/src/main/java/com/forgon/Constants.java (.../Constants.java) (revision 41525) +++ forgon-tools/src/main/java/com/forgon/Constants.java (.../Constants.java) (revision 41597) @@ -29,7 +29,7 @@ "4.9.63","4.9.64","4.9.65","4.9.66","4.9.67","4.9.68","4.9.69","4.9.70","4.9.71","4.9.72","4.9.73","4.9.74","4.9.75","4.9.76","4.9.77","4.9.78","4.9.79","4.9.80","4.9.81","4.9.82","4.9.83","4.9.84","4.9.85", "4.9.86","4.9.87","4.9.88","4.9.89","4.9.90","4.9.91","4.9.92","4.9.93","4.9.94","4.9.95","4.9.96","4.9.97","4.9.98","4.9.99","5.0.0","5.0.1","5.0.2","5.0.3","5.0.4","5.0.5","5.0.6","5.0.7", "5.0.8","5.0.9","5.0.10","5.0.11","5.0.12","5.0.13","5.0.14","5.0.15","5.0.16","5.0.17","5.0.18","5.0.19","5.0.20","5.0.21","5.0.22","5.0.23","5.0.24","5.0.25","5.0.26","5.0.27","5.0.28","5.0.29","5.0.30","5.0.31", - "5.0.32","5.0.33","5.0.34","5.0.35","5.0.36","5.0.37","5.0.38","5.0.39","5.0.40","5.0.41","5.0.42","5.0.43","5.0.44","5.0.45","5.0.46","5.0.47","5.0.48","5.0.49","5.0.50","5.0.51","5.0.52","5.0.53","5.0.54"}; + "5.0.32","5.0.33","5.0.34","5.0.35","5.0.36","5.0.37","5.0.38","5.0.39","5.0.40","5.0.41","5.0.42","5.0.43","5.0.44","5.0.45","5.0.46","5.0.47","5.0.48","5.0.49","5.0.50","5.0.51","5.0.52","5.0.53","5.0.54","5.0.55"}; // 版本列表(4.0版本升级4.1版需要分两步:先从4.0升到4.1.0、然后从4.1.0升级4.1最新版本) /*public final static String[] SOFTWARE_VERSION_ARRAY = new String[] { Index: forgon-core/src/main/java/com/forgon/security/service/UserManagerImpl.java =================================================================== diff -u -r41176 -r41597 --- forgon-core/src/main/java/com/forgon/security/service/UserManagerImpl.java (.../UserManagerImpl.java) (revision 41176) +++ forgon-core/src/main/java/com/forgon/security/service/UserManagerImpl.java (.../UserManagerImpl.java) (revision 41597) @@ -565,6 +565,8 @@ user.setDescn(userVo.getDescn()); //【用户管理】新增第三方账号ID功能ZSYY-414 user.setThirdPartyAcountID(userVo.getThirdPartyAcountID()); + //【用户管理】用户表增加HIE平台的人事工号UserID字段的存储ZSYY-447 + user.setThirdPartyName(userVo.getThirdPartyName()); } user.setFullName(fullName); Index: ssts-webservice/src/main/java/com/forgon/disinfectsystem/webservice/datasync/zsyy/HieServiceManagerImpl.java =================================================================== diff -u -r40543 -r41597 --- ssts-webservice/src/main/java/com/forgon/disinfectsystem/webservice/datasync/zsyy/HieServiceManagerImpl.java (.../HieServiceManagerImpl.java) (revision 40543) +++ ssts-webservice/src/main/java/com/forgon/disinfectsystem/webservice/datasync/zsyy/HieServiceManagerImpl.java (.../HieServiceManagerImpl.java) (revision 41597) @@ -183,6 +183,7 @@ vo.setThirdPartyAcountID(acountID); } vo.setCoding(coding); + vo.setThirdPartyName(coding); vo.setName(name); vo.setDeptCode(deptCode); vo.setSmsMumber(smsMumber); Index: forgon-core/src/main/java/com/forgon/security/model/User.java =================================================================== diff -u -r41260 -r41597 --- forgon-core/src/main/java/com/forgon/security/model/User.java (.../User.java) (revision 41260) +++ forgon-core/src/main/java/com/forgon/security/model/User.java (.../User.java) (revision 41597) @@ -74,6 +74,8 @@ if(enableThirdAccountId){ //启用enableThirdAccountId配置项后,需要导出第三方账号IDZSYY-414 ColumnNameAndPoPropertyNameMap.put("第三方账号ID", "thirdPartyAcountID"); + //启用enableThirdAccountId配置项后,需要导出第三方工号IDZSYY-447 + ColumnNameAndPoPropertyNameMap.put("第三方工号", "thirdPartyName"); } ColumnNameAndPoPropertyNameMap.put("短信号码", "smsMumber"); ColumnNameAndPoPropertyNameMap.put("身份证号码", "idCard"); @@ -92,6 +94,14 @@ * (即:工号) */ private String name; + + /** + * 第三方工号 + * 用于接收HIE平台推送过来信息中的UserID字段的值 + * 当同步时如果查到该用户已经存在于追溯系统那么就不将UserID取值到追溯系统的name字段, + * 如果不存在那么将UserID的值取值到追溯系统的name字段ZSYY-447 + */ + private String thirdPartyName; /** * 用户的全名 @@ -988,5 +998,13 @@ public void setCreateTime(Date createTime) { this.createTime = createTime; } + + public String getThirdPartyName() { + return thirdPartyName; + } + + public void setThirdPartyName(String thirdPartyName) { + this.thirdPartyName = thirdPartyName; + } } Index: ssts-web/src/main/webapp/dataUpdater/sqls/5.0.54_5.0.55.sql =================================================================== diff -u --- ssts-web/src/main/webapp/dataUpdater/sqls/5.0.54_5.0.55.sql (revision 0) +++ ssts-web/src/main/webapp/dataUpdater/sqls/5.0.54_5.0.55.sql (revision 41597) @@ -0,0 +1 @@ +update SS_USERS set thirdPartyName = name where thirdPartyName is null and thirdPartyAcountID is not null; \ No newline at end of file Index: ssts-datasync-default-impl/src/main/java/com/forgon/disinfectsystem/datasynchronization/service/DataSynchronizationManagerImpl.java =================================================================== diff -u -r41595 -r41597 --- ssts-datasync-default-impl/src/main/java/com/forgon/disinfectsystem/datasynchronization/service/DataSynchronizationManagerImpl.java (.../DataSynchronizationManagerImpl.java) (revision 41595) +++ ssts-datasync-default-impl/src/main/java/com/forgon/disinfectsystem/datasynchronization/service/DataSynchronizationManagerImpl.java (.../DataSynchronizationManagerImpl.java) (revision 41597) @@ -1426,24 +1426,19 @@ // 检查用户是否存在 User user = null; - if(enableThirdAccountId && StringUtils.isNotBlank(vo.getThirdPartyAcountID())){ - //根据第三方用户名同步用户ZSYY-414 + //开启配置项,并且第三方账号ID有值,才根据第三方账号同步用户,否则按照工号同步用户 + enableThirdAccountId = enableThirdAccountId && StringUtils.isNotBlank(vo.getThirdPartyAcountID()); + + if(enableThirdAccountId){ + //根据第三方账号ID同步用户ZSYY-414 useVo.setThirdPartyAcountID(vo.getThirdPartyAcountID()); - String hql = String.format("select po from %s po where thirdPartyAcountID ='%s' or lower(name)='%s'", User.class.getSimpleName(), vo.getThirdPartyAcountID(), StringUtils.lowerCase(vo.getCoding())); + if(StringUtils.isBlank(vo.getThirdPartyName())){ + logger.warn(String.format("第三方账号ID为【%s】,第三方工号为【%s】的用户同步失败:第三方工号不能为空!", vo.getThirdPartyAcountID(), vo.getThirdPartyName())); + continue; + } + String hql = String.format("select po from %s po where thirdPartyAcountID ='%s' ", User.class.getSimpleName(), vo.getThirdPartyAcountID()); List userList = objectDao.findByHql(hql); if(CollectionUtils.isNotEmpty(userList)){ - //存在工号一样,第三方账号ID不同或者为空(需要手工设置第三方账号ID)的用户时,不允许同步ZSYY-414 - User repeatUser = null; - for (User user2 : userList) { - if(!StringUtils.equals(user2.getThirdPartyAcountID(), vo.getThirdPartyAcountID())){ - repeatUser = user2; - break; - } - } - if(repeatUser != null){ - logger.warn(String.format("第三方账号ID为【%s】,工号为【%s】的用户同步失败:已经存在工号为【%s】,第三方账号ID为【%s】的用户", vo.getThirdPartyAcountID(), vo.getCoding(), repeatUser.getName(), repeatUser.getThirdPartyAcountID())); - continue; - } user = userList.get(0); } }else{ @@ -1464,14 +1459,22 @@ } //如果用户为锁定的则不处理 if(StringUtils.equals(com.forgon.Constants.STR_YES, user.getLockStatus()) && !enableUserAccountDeactivationFunction){ - logger.debug("登录名为"+ vo.coding +"的用户为锁定状态,不进行处理"); + logger.debug("登录名为"+ user.getName() +"的用户为锁定状态,不进行处理"); continue; } - //根据第三方账号ID修改用户工号ZSYY-414 - if(enableThirdAccountId && !StringUtils.equals(vo.getCoding(), user.getName())){ - appLogManager.saveLog(AcegiHelper.getLoginUser(), Log.MODEL_USER, "同步", String.format("id=【%s】的用户【%s】工号由【%s】改为【%s】", user.getId(), user.getFullName(), user.getName(), vo.getCoding())); - user.setName(vo.getCoding()); + //根据第三方账号ID修改用户第三方工号ZSYY-414、ZSYY-447 + if(enableThirdAccountId && !StringUtils.equals(vo.getThirdPartyName(), user.getThirdPartyName())){ + //用户第三方工号不能重复 + User repeatThirdPartyNameUser = getUserByThirdPartyName(vo.getThirdPartyName()); + if(repeatThirdPartyNameUser != null){ + logger.warn(String.format("第三方账号ID为【%s】,第三方工号为【%s】的用户同步失败:第三方工号不能重复,已经存在第三方工号为【%s】,第三方账号ID为【%s】的用户", vo.getThirdPartyAcountID(), vo.getThirdPartyName(), repeatThirdPartyNameUser.getThirdPartyName(), repeatThirdPartyNameUser.getThirdPartyAcountID())); + continue; + } + appLogManager.saveLog(AcegiHelper.getLoginUser(), Log.MODEL_USER, "同步", String.format("id=【%s】的用户【%s】第三方工号由【%s】改为【%s】", user.getId(), user.getFullName(), user.getThirdPartyName(), vo.getThirdPartyName())); + user.setThirdPartyName(vo.getThirdPartyName()); + //不修改用户登录名,只修改用户第三方工号 + vo.coding = user.getName(); objectDao.saveOrUpdate(user); } @@ -1482,7 +1485,8 @@ } //修改用户登录名 - if(!StringUtils.equals(vo.coding, user.getName())){ + //开启enableThirdAccountId配置项时,只修改第三方工号,不修改用户登录名ZSYY-447 + if(!enableThirdAccountId && !StringUtils.equals(vo.coding, user.getName())){ user.setName(vo.coding); objectDao.saveOrUpdate(user); } @@ -1536,6 +1540,22 @@ userManager.createOrUpdate(useVo, user, vo.getStatus(), willRelativeOrgUnits, roles, map); count++; }else{ + if(enableThirdAccountId){ + //用户第三方工号不能重复 + User repeatThirdPartyNameUser = getUserByThirdPartyName(vo.getThirdPartyName()); + if(repeatThirdPartyNameUser != null){ + logger.warn(String.format("第三方账号ID为【%s】,第三方工号为【%s】的用户同步失败:第三方工号不能重复,已经存在第三方工号为【%s】,第三方账号ID为【%s】的用户", vo.getThirdPartyAcountID(), vo.getThirdPartyName(), repeatThirdPartyNameUser.getThirdPartyName(), repeatThirdPartyNameUser.getThirdPartyAcountID())); + continue; + } + //用户工号不能重复 + User repeatNameUser = getUserByName(vo.getCoding()); + if(repeatNameUser != null){ + logger.warn(String.format("第三方账号ID为【%s】,工号为【%s】的用户同步失败:工号不能重复,已经存在工号为【%s】,第三方账号ID为【%s】的用户", vo.getThirdPartyAcountID(), vo.getCoding(), repeatNameUser.getName(), repeatNameUser.getThirdPartyAcountID())); + continue; + } + //用户第三方工号赋值 + useVo.setThirdPartyName(vo.getThirdPartyName()); + } //否则如果用户不存在时 //根据his系统用户和科室的关系,查看此组织机构在我们追溯系统是否也存在 List willRelativeOrgUnits = findOrgUnitByCoding(allUserOrgUnitList, vo.orgUnitCoding); @@ -1570,6 +1590,39 @@ } /** + * 根据工号查找用户 + * @param coding 工号 + * @return 用户 + */ + @SuppressWarnings("unchecked") + private User getUserByName(String coding) { + String hql = String.format("select po from %s po where lower(name)='%s'", User.class.getSimpleName(), StringUtils.lowerCase(coding)); + List userList = objectDao.findByHql(hql); + if(CollectionUtils.isEmpty(userList)){ + return null; + } + return userList.get(0); + } + + /** + * 根据第三方工号查找用户 + * @param thirdPartyName 第三方工号 + * @return 用户 + */ + @SuppressWarnings("unchecked") + private User getUserByThirdPartyName(String thirdPartyName) { + if(StringUtils.isBlank(thirdPartyName)){ + return null; + } + String hql = String.format("select po from %s po where thirdPartyName='%s'", User.class.getSimpleName(), thirdPartyName); + List userList = objectDao.findByHql(hql); + if(CollectionUtils.isEmpty(userList)){ + return null; + } + return userList.get(0); + } + + /** * 根据名称查找角色 * @param allRoleList * @param roleNameCollection Index: ssts-web/src/main/java/com/forgon/disinfectsystem/directory/service/SysUserManagerImpl.java =================================================================== diff -u -r40748 -r41597 --- ssts-web/src/main/java/com/forgon/disinfectsystem/directory/service/SysUserManagerImpl.java (.../SysUserManagerImpl.java) (revision 40748) +++ ssts-web/src/main/java/com/forgon/disinfectsystem/directory/service/SysUserManagerImpl.java (.../SysUserManagerImpl.java) (revision 41597) @@ -1235,6 +1235,16 @@ continue; }*/ userVo.setThirdPartyAcountID(thirdPartyAcountID); + //用户通过“导入”的方式导入数据时,需要在导入的表格中追加字段“第三方工号”ZSYY-447 + int thirdPartyNameIndex = ExcelUtils.getColumnIndex(nameToIndexMap, "第三方工号"); + String thirdPartyName = ParerUtils.getCellFormatValue(row, thirdPartyNameIndex); + if(StringUtils.isNotBlank(thirdPartyAcountID) && StringUtils.isBlank(thirdPartyName)){ + //第三方账号ID不为空时,第三方工号不能为空 + failureCount = appendFailureRowNumAndRecordFailureNum(failureCount, sb, + currentRowNum,thirdPartyNameIndex,com.forgon.disinfectsystem.common.Constants.ERROR_TYPE_IS_BLANK); + continue; + } + userVo.setThirdPartyName(thirdPartyName); } if(roleIndex > 0){ String roleNames = ParerUtils.getCellFormatValue(row, roleIndex); Index: ssts-datasync/src/main/java/com/forgon/disinfectsystem/datasynchronization/model/UserVo.java =================================================================== diff -u -r40318 -r41597 --- ssts-datasync/src/main/java/com/forgon/disinfectsystem/datasynchronization/model/UserVo.java (.../UserVo.java) (revision 40318) +++ ssts-datasync/src/main/java/com/forgon/disinfectsystem/datasynchronization/model/UserVo.java (.../UserVo.java) (revision 41597) @@ -77,6 +77,12 @@ */ private String thirdPartyAcountID; + /** + * 第三方工号 + * 用户表增加HIE平台的人事工号UserID字段的存储ZSYY-447 + */ + private String thirdPartyName; + public String getCoding() { return coding; } @@ -242,4 +248,12 @@ this.thirdPartyAcountID = thirdPartyAcountID; } + public String getThirdPartyName() { + return thirdPartyName; + } + + public void setThirdPartyName(String thirdPartyName) { + this.thirdPartyName = thirdPartyName; + } + }