2 커밋 0ffe696fb4 ... 018018d0bf

작성자 SHA1 메시지 날짜
  zhouy 018018d0bf Merge remote-tracking branch 'origin/shenai_4a' into shenai_4a 2 달 전
  zhouy 73b94eb7ad AD域功能修复 2 달 전

+ 55 - 21
src/main/java/com/uas/eis/serviceImpl/ADSyncService.java

@@ -54,32 +54,36 @@ public class ADSyncService {
                //判断是否需要更新组织
                 if("离职".equals(employee.getEm_class())){
                     disableUser(employee.getEm_adid(),connection);
-                    baseDao.updateByCondition("employee","em_adid=null","em_code='"+employee.getEm_code()+"'");
-                }
-                Optional<HrOrg> orgOptional = orgList.stream().filter(org -> org.getOr_code().equals(employee.getOrcode())).findFirst();
-               logger.info("同步用户更新:{}",employee.getEm_name());
-               updateUserDescription(employee.getEm_adid(),employee.getEmjob());
-                if(orgOptional.isPresent()){
-                   String newOUPath = getOUPath(orgOptional.get().getOr_path());
-                    logger.info("同步用户更新:oldpath{},newpath{}",getUserOUPath(employee.getEm_adid()),newOUPath);
-                   if(!getUserOUPath(employee.getEm_adid()).equals(newOUPath)){
-                       moveUser(employee.getEm_adid(),"CN="+employee.getEm_name()+","+newOUPath,connection);
-                       baseDao.updateByCondition("employee","em_adid='CN="+employee.getEm_name()+","+newOUPath+"'","em_code='"+employee.getEm_code()+"'");
-                   }
+                    //baseDao.updateByCondition("employee","em_adid=null","em_code='"+employee.getEm_code()+"'");
+                }else {
+                    Optional<HrOrg> orgOptional = orgList.stream().filter(org -> org.getOr_code().equals(employee.getOrcode())).findFirst();
+                    logger.info("同步用户更新:{}",employee.getEm_name());
+                    updateUserDescription(employee.getEm_adid(),employee.getEmjob());
+                    if(orgOptional.isPresent()){
+                        String newOUPath = getOUPath(orgOptional.get().getOr_path());
+                        logger.info("同步用户更新:oldpath{},newpath{}",getUserOUPath(employee.getEm_adid()),newOUPath);
+                        if(!getUserOUPath(employee.getEm_adid()).equals(newOUPath)){
+                            moveUser(employee.getEm_adid(),"CN="+employee.getEm_name()+","+newOUPath,connection);
+                            baseDao.updateByCondition("employee","em_adid='CN="+employee.getEm_name()+","+newOUPath+"'","em_code='"+employee.getEm_code()+"'");
+                        }
+                    }
                 }
-            }else if (!"生产序列--普工".equals(employee.getEm_emptype()) && !"其它人员".equals(employee.getEm_emptype())) {
+
+            }else if (!"其它人员".equals(employee.getEm_emptype()) && !"离职".equals(employee.getEm_class())) {
                 Optional<HrOrg> orgOptional = orgList.stream().filter(org -> org.getOr_code().equals(employee.getOrcode())).findFirst();
                 if(orgOptional.isPresent()){
                     String ouPath = getOUPath(orgOptional.get().getOr_path());
-                    addUser(PinyinUtils.getCustomPinyin(employee.getEm_name()),employee.getEm_name(),ouPath,employee.getEm_password());
-                    baseDao.updateByCondition("employee","em_adid='CN="+employee.getEm_name()+","+ouPath+"'","em_code='"+employee.getEm_code()+"'");
+                    String adid = addUser(employee.getEm_code(),PinyinUtils.getCustomPinyin(employee.getEm_name()),employee.getEm_name(),ouPath,employee.getEm_password(), employee.getEmjob());
+                    if(adid!=null){
+                        baseDao.updateByCondition("employee","em_adid='"+adid+"'","em_code='"+employee.getEm_code()+"'");
+                    }
                 }
             }
         }
 
     }
 
-    public void addUser(String userName,String displayName, String ouName, String password)  {
+    public String addUser(String userCode,String userName,String displayName, String ouName, String password,String job)  {
         LdapConnection connection = ldapConnectionManager.getConnection();
         Dn dn = null;
         logger.info("添加用户:{},displayName:{},ouName:{},password{}",userName,displayName,ouName,password);
@@ -91,7 +95,6 @@ public class ADSyncService {
                     "objectClass: person",
                     "objectClass: organizationalPerson",
                     "objectClass: user",
-                    "userAccountControl: 512",
                     "sAMAccountName: " + userName,
                     "userPrincipalName: " + userName + "@" + adConfig.getBaseDn().replace("DC=", "").replace(",", "."),
                     "userPassword: " + password
@@ -101,9 +104,18 @@ public class ADSyncService {
             entry.add("displayName",displayName);
             entry.add("givenName", displayName.substring(0, 1));
             entry.add("sn", displayName.substring(1));
+            entry.add("description", job);
+            entry.add("userAccountControl", "544");
             connection.add(entry);
+            return "CN="+displayName+"," + ouName;
         } catch (Exception e) {
+            if(e.getMessage().contains("(ENTRY_EXISTS)")){
+                return "CN="+displayName+"," + ouName;
+            }else if(e.getMessage().contains("problem 1005 (CONSTRAINT_ATT_TYPE), data 0, Att 90290 (userPrincipalName)")) {
+               return addUser(userCode,userName+""+userCode,displayName,ouName,password,job);
+            }
             logger.error("添加用户失败:{},错误{}",userName,e.getMessage());
+            return null;
         }
 
     }
@@ -144,7 +156,7 @@ public class ADSyncService {
             );
             connection.modify(dn, new DefaultModification(ModificationOperation.REPLACE_ATTRIBUTE, "userAccountControl", "2"));
         } catch (Exception e) {
-            logger.info("updateOrgDescription 禁用账号失败:{}",e.getMessage());
+            logger.info("disableUser 禁用账号失败:{}",e.getMessage());
         }finally {
             if (connection != null) {
                 try {
@@ -187,13 +199,36 @@ public class ADSyncService {
         LdapConnection connection = ldapConnectionManager.getConnection();
         List<Employee> employeeList = uasSyncService.getADUserList();
         List<ADUser> adUserList = getUsers(connection);
-        for (ADUser adUser : adUserList) {
+        List<HrOrg> orgList =  uasSyncService.getADOrgList();
+      /* for (ADUser adUser : adUserList) {
+            System.out.println(adUser.getUserCn());
             for (Employee employee : employeeList) {
-                if(employee.getEm_name().equals(adUser.getUserCn())){
+                if(employee.getEm_name().equals(adUser.getUserCn()) && !StringUtil.hasText(employee.getEm_adid()) ){
                     baseDao.updateByCondition("employee","em_adid='"+adUser.getUserDn()+"'", "em_code ='"+employee.getEm_code()+"'");
                     break;
                 }
             }
+        }*/
+
+       for(Employee employee:employeeList){
+            if(!StringUtil.hasText(employee.getEm_adid())){
+                Optional<ADUser> adUserOptional = adUserList.stream().filter(adUser -> adUser.getUserDn().equals(employee.getEm_adid())).findFirst();
+                if(!adUserOptional.isPresent()){
+                    //System.out.println("用户不存在:"+employee.getEm_adid()+"-"+employee.getEm_name());
+                    //baseDao.updateByCondition("employee","em_adid=null", "em_code ='"+employee.getEm_code()+"'");
+                  if(!"其它人员".equals(employee.getEm_emptype()) && !"离职".equals(employee.getEm_class())) {
+                        Optional<HrOrg> orgOptional = orgList.stream().filter(org -> org.getOr_code().equals(employee.getOrcode())).findFirst();
+                        if(orgOptional.isPresent()){
+                            String ouPath = getOUPath(orgOptional.get().getOr_path());
+                            String adid = addUser(employee.getEm_code(),PinyinUtils.getCustomPinyin(employee.getEm_name()),employee.getEm_name(),ouPath,employee.getEm_password(), employee.getEmjob());
+                            if(adid!=null){
+                                baseDao.updateByCondition("employee","em_adid='"+adid+"'","em_code='"+employee.getEm_code()+"'");
+                            }
+                        }
+                    }
+                }
+
+            }
         }
         //移动人员组织
     }
@@ -330,7 +365,6 @@ public class ADSyncService {
                     "dn"
             );
             if (result.next()) {
-                System.out.println(result.get().toString());
                 logger.info("组织下存在下级,无法删除{}",ouName);
             }else {
                 connection.delete(dn);

+ 4 - 2
src/main/java/com/uas/eis/serviceImpl/UasSyncService.java

@@ -15,12 +15,14 @@ public class UasSyncService {
     private BaseDao baseDao;
 
     public List<Employee> getADUserList() {
-        return  baseDao.query("select em_code,em_name,or_code orcode,em_class,em_adid,em_emptype,(select wm_concat(jo_name) from employee A left join empsjobs on em_id=emp_id left join job" +
+        return  baseDao.query("select em_code,em_name,or_code orcode,em_class,em_adid,em_emptype,em_password,(select wm_concat(jo_name) from employee A left join empsjobs on em_id=emp_id left join job" +
                         "            on (job_id=jo_id or em_defaulthsid=jo_id ) where a.em_id=b.em_id) emjob from employee b" +
                         " left join hrorg on em_defaultorid=or_id" +
-                        "               where em_adid is not  null or em_class<>'离职' order by em_id asc"
+                        "   order by em_id asc"
                 ,
                 Employee.class);
+
+       //where em_adid is not  null or em_class<>'离职'
     }
     public List<HrOrg> getADOrgList() {
        return  baseDao.query("select * from (select or_code,or_name,or_status,or_neteasyid,prior or_neteasyid parentnetEasyId,substr(sys_connect_by_path( or_name,'-'),instr(sys_connect_by_path( or_name,'-'),'-',1,2)+1) or_path,level as or_level " +

+ 3 - 2
src/main/java/com/uas/eis/utils/PinyinUtils.java

@@ -42,12 +42,13 @@ public class PinyinUtils {
                 String[] charPinyin = PinyinHelper.toHanyuPinyinStringArray(chars[i], FORMAT);
                 if (charPinyin != null && charPinyin.length > 0) {
                     pinyin.append(charPinyin[0].charAt(0));
+                }else {
+                    pinyin.append(chars[i]);
                 }
             }
         } catch (BadHanyuPinyinOutputFormatCombination e) {
             e.printStackTrace();
         }
-
-        return pinyin.toString();
+        return pinyin.toString().replace(":","");
     }
 }

+ 14 - 6
src/test/java/com/uas/eis/UasEisApplicationTests.java

@@ -1,8 +1,10 @@
 package com.uas.eis;
 
 
+import com.uas.eis.entity.Employee;
 import com.uas.eis.serviceImpl.ADSyncService;
 import com.uas.eis.serviceImpl.UasSyncService;
+import com.uas.eis.utils.PinyinUtils;
 import org.apache.directory.api.ldap.model.exception.LdapException;
 import org.apache.directory.api.util.Strings;
 import org.apache.directory.ldap.client.api.LdapConnection;
@@ -45,13 +47,13 @@ public class UasEisApplicationTests {
 
 	@Test
 	public void addUser() throws LdapException, UnsupportedEncodingException {
-		String displayName = "测试";
-		System.out.println(displayName.substring(1));
-		System.out.println(displayName.substring(0, 1));
-		System.out.println(Strings.utf8ToString(displayName.getBytes("UTF-8")));
-		adSyncService.addUser("abcd", displayName, "OU=人力资源部,OU=经营班子,OU=董事会,OU=User,DC=si,DC=ad", "password123");
+		List<Employee> adUserList = uasSyncService.getADUserList();
+		for (Employee employee : adUserList) {
+			if(employee.getEm_name().equals("刘健荣")){
+				adSyncService.addUser(employee.getEm_code(),PinyinUtils.getCustomPinyin(employee.getEm_name()), employee.getEm_name(), "OU=安全管理部,OU=经营班子,OU=董事会,OU=User,DC=si,DC=ad", employee.getEm_password() ,employee.getEmjob());
+			}
+		}
 	}
-
 	@Test
 	public void moveUser() throws LdapException, UnsupportedEncodingException {
 		adSyncService.moveUser( "CN=刘健荣,OU=安全厂务部,OU=经营班子,OU=董事会,OU=User,DC=si,DC=ad", "CN=刘健荣,OU=安全管理部,OU=经营班子,OU=董事会,OU=User,DC=si,DC=ad",null);
@@ -96,4 +98,10 @@ public class UasEisApplicationTests {
 		adSyncService.initUser();
 	}
 
+	@Test
+	public void getPinyin() throws Exception {
+
+		System.out.println(PinyinUtils.getCustomPinyin("吕小婷"));
+	}
+
 }