Index: forgon-core/src/main/java/com/forgon/security/service/UserManagerImpl.java =================================================================== diff -u -r39758 -r40318 --- forgon-core/src/main/java/com/forgon/security/service/UserManagerImpl.java (.../UserManagerImpl.java) (revision 39758) +++ forgon-core/src/main/java/com/forgon/security/service/UserManagerImpl.java (.../UserManagerImpl.java) (revision 40318) @@ -554,6 +554,8 @@ user.setIdCard(userVo.getIdCard()); user.setEmail(userVo.getEmail()); user.setDescn(userVo.getDescn()); + //【用户管理】新增第三方账号ID功能ZSYY-414 + user.setThirdPartyAcountID(userVo.getThirdPartyAcountID()); } user.setFullName(fullName); if (StringUtils.isBlank(status)) { // 有的医院没有这个属性就默认给这个用可以登录的状态(陈家儒改) Index: ssts-datasync/src/main/java/com/forgon/disinfectsystem/datasynchronization/model/UserVo.java =================================================================== diff -u -r37181 -r40318 --- ssts-datasync/src/main/java/com/forgon/disinfectsystem/datasynchronization/model/UserVo.java (.../UserVo.java) (revision 37181) +++ ssts-datasync/src/main/java/com/forgon/disinfectsystem/datasynchronization/model/UserVo.java (.../UserVo.java) (revision 40318) @@ -70,6 +70,12 @@ * 是否更新用户所属科室(由于HIS提供接口未有人员对应所属科室信息,为避免正在使用的用户受到影响,如系统内存在该工号,则不修改该用户的所属科室GDSRMYY-574) */ private boolean updateOrgUserRelation = true; + + /** + * 第三方账号ID,通过第三方账号ID与第三方系统同步用户信息 + * ZSYY-414 + */ + private String thirdPartyAcountID; public String getCoding() { return coding; @@ -228,4 +234,12 @@ this.updateOrgUserRelation = updateOrgUserRelation; } + public String getThirdPartyAcountID() { + return thirdPartyAcountID; + } + + public void setThirdPartyAcountID(String thirdPartyAcountID) { + this.thirdPartyAcountID = thirdPartyAcountID; + } + } Index: ssts-datasync-default-impl/src/main/java/com/forgon/disinfectsystem/datasynchronization/service/DataSynchronizationManagerImpl.java =================================================================== diff -u -r39603 -r40318 --- ssts-datasync-default-impl/src/main/java/com/forgon/disinfectsystem/datasynchronization/service/DataSynchronizationManagerImpl.java (.../DataSynchronizationManagerImpl.java) (revision 39603) +++ ssts-datasync-default-impl/src/main/java/com/forgon/disinfectsystem/datasynchronization/service/DataSynchronizationManagerImpl.java (.../DataSynchronizationManagerImpl.java) (revision 40318) @@ -1373,6 +1373,8 @@ List allRoleList = searchUserRoleList(allVos); //默认角色 List defaultRoles = objectDao.getHibernateSession().createCriteria(Role.class).add(Restrictions.in("name", 默认角色ID)).list(); + //启用第三方用户名ZSYY-414 + boolean enableThirdAccountId = ConfigUtils.getSystemSetConfigByNameBool("enableThirdAccountId"); for(UserVo vo : allVos){ if(vo == null){ logger.warn("发现用户数组变量里有空元素"); @@ -1403,10 +1405,34 @@ useVo.setDescn(vo.getDescn()); // 检查用户是否存在 User user = null; - String hql = String.format("select po from %s po where lower(name)='%s'", User.class.getSimpleName(), StringUtils.lowerCase(vo.getCoding())); - List userList = objectDao.findByHql(hql); - if(CollectionUtils.isNotEmpty(userList)){ - user = userList.get(0); + + if(enableThirdAccountId && StringUtils.isNotBlank(vo.getThirdPartyAcountID())){ + //根据第三方用户名同步用户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())); + 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{ + //根据工号同步用户 + String hql = String.format("select po from %s po where lower(name)='%s'", User.class.getSimpleName(), StringUtils.lowerCase(vo.getCoding())); + List userList = objectDao.findByHql(hql); + if(CollectionUtils.isNotEmpty(userList)){ + user = userList.get(0); + } } //如果用户存在 if(user != null){ @@ -1421,6 +1447,14 @@ logger.debug("登录名为"+ vo.coding +"的用户为锁定状态,不进行处理"); 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()); + objectDao.saveOrUpdate(user); + } + //修改用户基本信息(姓名,如果有修改时) if(!StringUtils.equals(vo.name, user.getFullName())){ user.setFullName(vo.name); @@ -1640,6 +1674,7 @@ String coding = userVo.getCoding(); String name = userVo.getName(); String orgUnitCoding = userVo.getOrgUnitCoding(); + String thirdPartyAcountID = userVo.getThirdPartyAcountID(); if(coding != null){ userVo.setCoding(coding.trim()); } @@ -1649,6 +1684,9 @@ if(orgUnitCoding != null){ userVo.setOrgUnitCoding(orgUnitCoding.trim()); } + if(thirdPartyAcountID != null){ + userVo.setThirdPartyAcountID(thirdPartyAcountID.trim()); + } } } Index: ssts-web/src/main/webapp/disinfectsystem/basedatamanager/importbasedata/userAndOrgUnitTemplate.xls =================================================================== diff -u Binary files differ Index: forgon-core/src/main/java/com/forgon/security/model/User.java =================================================================== diff -u -r39758 -r40318 --- forgon-core/src/main/java/com/forgon/security/model/User.java (.../User.java) (revision 39758) +++ forgon-core/src/main/java/com/forgon/security/model/User.java (.../User.java) (revision 40318) @@ -39,12 +39,13 @@ import com.forgon.directory.model.OrgUserRelation; import com.forgon.tools.Constants; import com.forgon.tools.string.StringTools; +import com.forgon.tools.util.ConfigUtils; /**用户信息*/ @Entity @DynamicInsert(false) @DynamicUpdate(true) -@Table(name = "SS_USERS", uniqueConstraints = { @UniqueConstraint(columnNames = { "name" }) }, indexes={@Index(columnList="name",name="user_name_index")}) +@Table(name = "SS_USERS", uniqueConstraints = { @UniqueConstraint(columnNames = { "name" }) }, indexes={@Index(columnList="name",name="user_name_index"), @Index(columnList="thirdPartyAcountID",name="user_thirdAcountID_index")}) @Cache(usage = CacheConcurrencyStrategy.NONSTRICT_READ_WRITE) public class User extends BarcodeDevice{ @@ -68,6 +69,11 @@ ColumnNameAndPoPropertyNameMap.put("所属部门", "orgUnitNames"); ColumnNameAndPoPropertyNameMap.put("姓名", "fullName"); ColumnNameAndPoPropertyNameMap.put("登录名", "name"); + boolean enableThirdAccountId = ConfigUtils.getSystemSetConfigByNameBool("enableThirdAccountId"); + if(enableThirdAccountId){ + //启用enableThirdAccountId配置项后,需要导出第三方账号IDZSYY-414 + ColumnNameAndPoPropertyNameMap.put("第三方账号ID", "thirdPartyAcountID"); + } ColumnNameAndPoPropertyNameMap.put("短信号码", "smsMumber"); ColumnNameAndPoPropertyNameMap.put("身份证号码", "idCard"); ColumnNameAndPoPropertyNameMap.put("电子邮件", "email"); @@ -249,6 +255,12 @@ */ private String supplierName; + /** + * 第三方账号ID + * ZSYY-414 + */ + private String thirdPartyAcountID; + public String getPasswd() { return this.passwd; } @@ -882,6 +894,14 @@ this.supplierName = supplierName; } + public String getThirdPartyAcountID() { + return thirdPartyAcountID; + } + + public void setThirdPartyAcountID(String thirdPartyAcountID) { + this.thirdPartyAcountID = thirdPartyAcountID; + } + /** * 简易转换成json对象 * @return Index: ssts-webservice/src/main/java/com/forgon/disinfectsystem/webservice/datasync/zsyy/HieServiceManagerImpl.java =================================================================== diff -u -r38902 -r40318 --- ssts-webservice/src/main/java/com/forgon/disinfectsystem/webservice/datasync/zsyy/HieServiceManagerImpl.java (.../HieServiceManagerImpl.java) (revision 38902) +++ ssts-webservice/src/main/java/com/forgon/disinfectsystem/webservice/datasync/zsyy/HieServiceManagerImpl.java (.../HieServiceManagerImpl.java) (revision 40318) @@ -132,6 +132,8 @@ if(StringUtils.isBlank(requestBody)){ throw new SystemException("responseBody为必填项"); } + + boolean enableThirdAccountId = ConfigUtils.getSystemSetConfigByNameBool("enableThirdAccountId"); Document document = DocumentHelper.parseText(requestBody.trim()); @@ -142,10 +144,12 @@ return userVoList; } for(int i=1;i<=subjectNodeList.size();i++){ + String acountIDXpath = subjectXpath + "[" + i + "]" + "/AcountID"; String codingXpath = subjectXpath + "[" + i + "]" + "/UserID"; String nameXpath = subjectXpath + "[" + i + "]" + "/UserName"; String deptCodeXpath = subjectXpath + "[" + i + "]" + "/OrgCode"; + String acountID = processDataByXpath(document, acountIDXpath); String coding = processDataByXpath(document, codingXpath); String name = processDataByXpath(document, nameXpath); String deptCode = processDataByXpath(document, deptCodeXpath); @@ -161,6 +165,13 @@ } UserVo vo = new UserVo(); + if(enableThirdAccountId){ + //【用户管理】新增第三方账号ID功能ZSYY-414 + if(StringUtils.isBlank(acountID)){ + throw new RuntimeException("主账号不能为空!"); + } + vo.setThirdPartyAcountID(acountID); + } vo.setCoding(coding); vo.setName(name); vo.setDeptCode(deptCode); Index: forgon-core/src/main/java/com/forgon/directory/controller/UserImportController.java =================================================================== diff -u -r26116 -r40318 --- forgon-core/src/main/java/com/forgon/directory/controller/UserImportController.java (.../UserImportController.java) (revision 26116) +++ forgon-core/src/main/java/com/forgon/directory/controller/UserImportController.java (.../UserImportController.java) (revision 40318) @@ -15,6 +15,7 @@ import com.forgon.directory.service.SysUserManager; import com.forgon.excel.service.CommonImportManager; import com.forgon.tools.AppKeys; +import com.forgon.tools.util.ConfigUtils; /** * @author LiNanChang @@ -81,7 +82,12 @@ request.setAttribute(AppKeys.RedirectTo, redirectUrl); request.setAttribute("poName", "用户"); request.setAttribute("actionUrl", "/systemmanage/userImport.mhtml"); - request.setAttribute("formatFile", "/disinfectsystem/basedatamanager/importbasedata/userAndOrgUnitDemo.xls"); + boolean enableThirdAccountId = ConfigUtils.getSystemSetConfigByNameBool("enableThirdAccountId"); + if(enableThirdAccountId){ + request.setAttribute("formatFile", "/disinfectsystem/basedatamanager/importbasedata/userAndOrgUnitTemplate.xls"); + }else{ + request.setAttribute("formatFile", "/disinfectsystem/basedatamanager/importbasedata/userAndOrgUnitDemo.xls"); + } return new ModelAndView(request.getContextPath()+ "/common/commonImport", "msg", msg); } @@ -92,7 +98,12 @@ request.setAttribute(AppKeys.RedirectTo, redirectUrl); request.setAttribute("poName", "用户"); request.setAttribute("actionUrl", "/systemmanage/userImport.mhtml"); - request.setAttribute("formatFile", "/disinfectsystem/basedatamanager/importbasedata/userAndOrgUnitDemo.xls"); + boolean enableThirdAccountId = ConfigUtils.getSystemSetConfigByNameBool("enableThirdAccountId"); + if(enableThirdAccountId){ + request.setAttribute("formatFile", "/disinfectsystem/basedatamanager/importbasedata/userAndOrgUnitTemplate.xls"); + }else{ + request.setAttribute("formatFile", "/disinfectsystem/basedatamanager/importbasedata/userAndOrgUnitDemo.xls"); + } return "/common/commonImport"; } } Index: ssts-web/src/main/java/com/forgon/disinfectsystem/directory/service/SysUserManagerImpl.java =================================================================== diff -u -r40302 -r40318 --- ssts-web/src/main/java/com/forgon/disinfectsystem/directory/service/SysUserManagerImpl.java (.../SysUserManagerImpl.java) (revision 40302) +++ ssts-web/src/main/java/com/forgon/disinfectsystem/directory/service/SysUserManagerImpl.java (.../SysUserManagerImpl.java) (revision 40318) @@ -1151,6 +1151,7 @@ if (userSheet == null) { return totalCount; } + boolean enableThirdAccountId = ConfigUtils.getSystemSetConfigByNameBool("enableThirdAccountId"); int lastRowNum = userSheet.getLastRowNum(); Map nameToIndexMap = ExcelUtils.autoDetectSheepAndCreateColumnNameToIndexMap(userSheet); int fullNameIndex = ExcelUtils.getColumnIndex(nameToIndexMap, "姓名"); @@ -1214,6 +1215,18 @@ userVo.setIdCard(idCard); userVo.setEmail(email); userVo.setDescn(descn); + if(enableThirdAccountId){ + //用户通过“导入”的方式导入数据时,需要在导入的表格中追加字段“第三方账号ID”ZSYY-414 + int thirdPartyAcountIDIndex = ExcelUtils.getColumnIndex(nameToIndexMap, "第三方账号ID"); + String thirdPartyAcountID = ParerUtils.getCellFormatValue(row, thirdPartyAcountIDIndex); + /*if(StringUtils.isBlank(thirdPartyAcountID)){ + //第三方账号ID不能为空 + failureCount = appendFailureRowNumAndRecordFailureNum(failureCount, sb, + currentRowNum,nameIndex,com.forgon.disinfectsystem.common.Constants.ERROR_TYPE_IS_BLANK); + continue; + }*/ + userVo.setThirdPartyAcountID(thirdPartyAcountID); + } if(roleIndex > 0){ String roleNames = ParerUtils.getCellFormatValue(row, roleIndex); userVo.setRoleNames(roleNames);