Parcourir la source

AD域/NetEasy调整用户账号重名问题

zhouy il y a 2 mois
Parent
commit
4cb1a06134

+ 17 - 0
src/main/java/com/uas/eis/entity/Employee.java

@@ -16,6 +16,8 @@ public class Employee {
     private String em_yonghongid;
     private String em_email;
     private String emjob;
+    private String em_adaccountname;
+    private Integer em_neteasystatus;
     public String getEm_code() {
         return em_code;
     }
@@ -135,6 +137,21 @@ public class Employee {
         this.emjob = emjob;
     }
 
+    public String getEm_adaccountname() {
+        return em_adaccountname;
+    }
+
+    public void setEm_adaccountname(String em_adaccountname) {
+        this.em_adaccountname = em_adaccountname;
+    }
+    public Integer getEm_neteasystatus() {
+        return em_neteasystatus;
+    }
+
+    public void setEm_neteasystatus(Integer em_neteasystatus) {
+        this.em_neteasystatus = em_neteasystatus;
+    }
+
     @Override
     public String toString() {
         return "Employee{" +

+ 86 - 8
src/main/java/com/uas/eis/serviceImpl/ADSyncService.java

@@ -73,9 +73,11 @@ public class ADSyncService {
                 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());
+                    String adaccountname = getADID(employee);
+                    String adid = addUser(adaccountname,employee.getEm_name(),ouPath,employee.getEm_password(), employee.getEmjob());
+                    System.out.println(adaccountname+":"+adid);
                     if(adid!=null){
-                        baseDao.updateByCondition("employee","em_adid='"+adid+"'","em_code='"+employee.getEm_code()+"'");
+                        baseDao.updateByCondition("employee","em_adid='"+adid+"',em_adaccountname='"+adaccountname+"'","em_code='"+employee.getEm_code()+"'");
                     }
                 }
             }
@@ -83,7 +85,7 @@ public class ADSyncService {
 
     }
 
-    public String addUser(String userCode,String userName,String displayName, String ouName, String password,String job)  {
+    public String addUser(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);
@@ -111,8 +113,8 @@ public class ADSyncService {
         } 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);
+            }else if (e.getMessage().contains("problem 1005 (CONSTRAINT_ATT_TYPE), data 0, Att 90290 (userPrincipalName)")){
+                return addUser(userName+"01",displayName,ouName,password,job);
             }
             logger.error("添加用户失败:{},错误{}",userName,e.getMessage());
             return null;
@@ -195,10 +197,10 @@ public class ADSyncService {
         }
     }
    //初始化用户
-    public void initUser() throws IOException {
+    public void initUser(){
         LdapConnection connection = ldapConnectionManager.getConnection();
         List<Employee> employeeList = uasSyncService.getADUserList();
-        List<ADUser> adUserList = getUsers(connection);
+       // List<ADUser> adUserList = getUsers(connection);
         List<HrOrg> orgList =  uasSyncService.getADOrgList();
       /* for (ADUser adUser : adUserList) {
             System.out.println(adUser.getUserCn());
@@ -210,7 +212,7 @@ public class ADSyncService {
             }
         }*/
 
-       for(Employee employee:employeeList){
+      /* 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()){
@@ -229,6 +231,38 @@ public class ADSyncService {
                 }
 
             }
+        }*/
+       /* for(Employee employee:employeeList){
+            if(StringUtil.hasText(employee.getEm_adid())){
+                Dn dn = null;
+                try {
+                    dn = new Dn( employee.getEm_adid());
+                } catch (LdapInvalidDnException e) {
+                    throw new RuntimeException(e);
+                }
+                Entry entry = null;
+                try {
+                    entry = connection.lookup(
+                            dn,
+                            new String[]{"sAMAccountName"}
+                    );
+                } catch (LdapException e) {
+                    e.printStackTrace();
+                    throw new RuntimeException(e);
+                }
+                if(entry!=null){
+                    System.out.println(entry.get("sAMAccountName").get().toString());
+
+                    baseDao.updateByCondition("employee","em_adaccountname='"+entry.get("sAMAccountName").get().toString()+"'","em_code='"+employee.getEm_code()+"'");
+
+                }
+            }
+        }*/
+        for(Employee employee:employeeList){
+            if(!StringUtil.hasText(employee.getEm_adid()) && StringUtil.hasText(employee.getEm_adaccountname()) && employee.getEm_adaccountname().endsWith(employee.getEm_code())){
+               // deleteUser(employee.getEm_adid(),connection);
+              //baseDao.updateByCondition("employee","em_adid=null","em_code='"+employee.getEm_code()+"'");
+            }
         }
         //移动人员组织
     }
@@ -273,7 +307,47 @@ public class ADSyncService {
 
         return null;
     }
+    public List<ADUser> getUserByName(LdapConnection connection) throws  IOException {
+        List<ADUser> userList = new ArrayList<>();
+        if(connection==null || !connection.isConnected()){
+            connection = ldapConnectionManager.getConnection();
+        }
+        try {
+            // 搜索所有用户
+            String filter = "(objectClass=organizationalPerson)";
+            EntryCursor result = connection.search(
+                    "OU=User,"+adConfig.getBaseDn(),  // AD基础DN,从配置文件获取
+                    filter,
+                    SearchScope.SUBTREE
+            );
+            Entry entry;
+            while (result.next()) {
+                try {
+                    entry =result.get();
+                    ADUser adUser = new ADUser();
+                    adUser.setUserDn(entry.getDn().toString());
+                    adUser.setUserCn(entry.get("cn").get().getString());
+                    adUser.setAccountName(entry.get("sAMAccountName").get().getString());
+                    adUser.setUserPrincipalName(entry.get("userPrincipalName").get().getString());
+                    userList.add(adUser);
 
+                } catch (CursorException e) {
+                    e.printStackTrace();
+                }
+            }
+            return userList;
+        } catch (LdapException e) {
+            e.printStackTrace();
+        } catch (CursorException e) {
+            e.printStackTrace();
+        } finally {
+            if (connection != null) {
+                connection.close();
+            }
+        }
+
+        return null;
+    }
    public void syncOrg() {
        LdapConnection connection = ldapConnectionManager.getConnection();
        List<HrOrg> orgList = uasSyncService.getADOrgList();
@@ -504,4 +578,8 @@ public class ADSyncService {
         return null;
     }
 
+    public String  getADID(Employee employee) {
+        Object accountid= baseDao.getFieldDataByCondition("dual","get_4a_id('"+employee.getEm_code()+"','"+PinyinUtils.getCustomPinyin(employee.getEm_name())+"','AD')","1=1");
+        return String.valueOf(accountid);
+    }
 }

+ 19 - 11
src/main/java/com/uas/eis/serviceImpl/NetEasyService.java

@@ -72,8 +72,13 @@ public class NetEasyService {
             if(StringUtil.hasText(employee.getEm_neteasyid())) {
                 if(!"离职".equals(employee.getEm_class())) {
                     updateNetEasyEmployee(employee);
+                    if(employee.getEm_neteasystatus() == 0) {
+                        recoverNetEasyEmployee(employee);
+                    }
                 }else {
-                    disableNetEasyEmployee(employee);
+                    if(employee.getEm_neteasystatus()==-1) {
+                        disableNetEasyEmployee(employee);
+                    }
                 }
             }else{
                 if(employee.getEm_isneteasy() != null && employee.getEm_isneteasy() == -1){
@@ -89,7 +94,7 @@ public class NetEasyService {
      * */
     public void createNetEasyEmployee(Employee employee){
         logger.info("创建邮箱账号:{}",employee.toString());
-        AccountResp getAccountResp = getNetEasyEmployee(employee);
+       /* AccountResp getAccountResp = getNetEasyEmployee(employee);
         if(getAccountResp != null){
             if (getAccountResp.getStatus() == 0){
                 //账号正常
@@ -103,10 +108,9 @@ public class NetEasyService {
                 baseDao.updateByCondition("employee","em_neteasyid='"+getAccountResp.getAccountName()+"'","em_code='"+employee.getEm_code()+"'");
                 return;
             }
-        }
-        logger.info("邮箱无此账号,创建邮箱账号:{}",employee.toString());
+        }*/
         QiyeOpenPlatSDK instanceSDK = netEasySDK.getSDKInstance();
-        String initAccount = PinyinUtils.getCustomPinyin(employee.getEm_name());
+        String initAccount = getNetEasyID(employee);
         Q q = Q.init(null)
                 .addParam("domain", netEasyConfig.getDomain())
                 .addParam("accountName", initAccount)
@@ -118,7 +122,7 @@ public class NetEasyService {
         if(! StringUtil.hasText(initPWD) || initPWD.length() <8 || ! hasThreeCharacterTypes(initPWD)){
             //初始密码拼音+系统账号+SI
             initPWD = initAccount+employee.getEm_code()+"SI";
-            q.addParam("password", PinyinUtils.getCustomPinyin(employee.getEm_name())+employee.getEm_code()+"SI");
+            q.addParam("password", initAccount+employee.getEm_code()+"SI");
         }
         if(StringUtil.hasText(employee.getEm_mobile())){
             q.addParam("mobile", employee.getEm_mobile());
@@ -127,7 +131,7 @@ public class NetEasyService {
         if(StringUtil.hasText(employee.getEm_name())){}
         if(ResultEnum.SUCCESS.getCode() == r.getCode()){
             AccountResp accountResp = (AccountResp) r.getDataBean(AccountResp.class);
-            baseDao.updateByCondition("employee","em_neteasyid='"+accountResp.getAccountName()+"'","em_code='"+employee.getEm_code()+"'");
+            baseDao.updateByCondition("employee","em_neteasystatus=-1,em_neteasyid='"+accountResp.getAccountName()+"'","em_code='"+employee.getEm_code()+"'");
             baseDao.execute("insert into UAPPROVALMSG(ID_,TYPE_,TITLE_,MSG_,EMS_) " +
                               "select UAPPROVALMSG_SEQ.NEXTVAL,'TEXT','邮箱开通提醒','"+employee.getEm_name()+" 您的企业邮箱账号已创建\n" +
                     "账号:"+initAccount+"@sisemi.com.cn\n" +
@@ -177,8 +181,8 @@ public class NetEasyService {
                 .addParam("accountName", employee.getEm_neteasyid());
         R r2 = instanceSDK.commonInvoke(q1, "/api/open/account/suspendAccount");
         if(ResultEnum.SUCCESS.getCode() == r2.getCode()){
-            //禁用账号更新是否开通邮箱为否
-            baseDao.updateByCondition("employee","em_neteasyid=null,em_isneteasy=0","em_code='"+employee.getEm_code()+"'");
+            //禁用邮箱不更新ID
+            baseDao.updateByCondition("employee","em_neteasystatus=0","em_code='"+employee.getEm_code()+"'");
             logger.info("禁用账号成功,账号信息:{}",employee.toString());
 
         }else {
@@ -195,7 +199,8 @@ public class NetEasyService {
                 .addParam("accountName", employee.getEm_neteasyid());
         R r2 = instanceSDK.commonInvoke(q1, "/api/open/account/recoverAccount");
         if(ResultEnum.SUCCESS.getCode() == r2.getCode()){
-           logger.info("恢复账号成功,账号信息:{}",employee.toString());
+            baseDao.updateByCondition("employee","em_neteasystatus=-1","em_code='"+employee.getEm_code()+"'");
+            logger.info("恢复账号成功,账号信息:{}",employee.toString());
         }else {
             logger.info("恢复账号失败,账号名称:{},错误信息:{}",employee.toString(),r2.getMessage());
         }
@@ -476,5 +481,8 @@ public class NetEasyService {
         if (password.matches(".*[^A-Za-z0-9].*")) typeCount++;
         return typeCount >= 3;
     }
-
+    public String  getNetEasyID(Employee employee) {
+        Object accountid= baseDao.getFieldDataByCondition("dual","get_4a_id('"+employee.getEm_code()+"','"+PinyinUtils.getCustomPinyin(employee.getEm_name())+"','NETEASY')","1=1");
+        return String.valueOf(accountid);
+    }
 }

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

@@ -15,7 +15,7 @@ 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,em_password,(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,em_adaccountname,(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" +
                         "   order by em_id asc"
@@ -31,7 +31,7 @@ public class UasSyncService {
                 HrOrg.class);
     }
     public List<Employee> getNetEasyUserList() {
-        return  baseDao.query("select em_code,em_name,or_code orcode,or_neteasyid orneteasyid,em_class,em_neteasyid,em_emptype,em_isneteasy,em_position,em_password,em_mobile from employee  left join hrorg on em_defaultorid=or_id"+
+        return  baseDao.query("select em_code,em_name,or_code orcode,or_neteasyid orneteasyid,em_class,em_neteasyid,em_emptype,em_isneteasy,em_position,em_password,em_mobile,em_neteasystatus from employee  left join hrorg on em_defaultorid=or_id"+
                         " where (em_neteasyid is not  null or em_class<>'离职') and em_status='已审核' order by em_id asc"
                 ,
                 Employee.class);

+ 3 - 3
src/test/java/com/uas/eis/UasEisApplicationTests.java

@@ -49,8 +49,8 @@ public class UasEisApplicationTests {
 	public void addUser() throws LdapException, UnsupportedEncodingException {
 		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());
+			if(employee.getEm_name().equals("Shubhajit Maikap")){
+				adSyncService.addUser("Shubhajit", employee.getEm_name(), "OU=技术研发中心,OU=经营班子,OU=董事会,OU=User,DC=si,DC=ad", employee.getEm_password() ,employee.getEmjob());
 			}
 		}
 	}
@@ -61,7 +61,7 @@ public class UasEisApplicationTests {
 
 	@Test
 	public void deleteuser() throws Exception {
-	 adSyncService.deleteUser("CN=测试,OU=人力资源部,OU=经营班子,OU=董事会,OU=User,DC=si,DC=ad", null);
+	 adSyncService.deleteUser("CN=Shubhajit Maikap,OU=技术研发中心,OU=经营班子,OU=董事会,OU=User,DC=si,DC=ad", null);
 	}
 	@Test
 	public void disableUser() throws Exception {