Browse Source

网易邮箱同步

zhouy 4 months ago
parent
commit
4f3d4ad576

+ 5 - 0
pom.xml

@@ -116,6 +116,11 @@
 			<artifactId>api-all</artifactId>
 			<version>2.0.0</version> <!-- 请使用最新版本 -->
 		</dependency>
+		<dependency>
+			<groupId>com.github.mrmike</groupId>
+			<artifactId>ok2curl</artifactId>
+			<version>0.7.0</version>
+		</dependency>
 		<dependency>
 			<groupId>com.belerweb</groupId>
 			<artifactId>pinyin4j</artifactId>

+ 4 - 0
src/main/java/com/uas/eis/dto/BaseResp.java

@@ -0,0 +1,4 @@
+package com.uas.eis.dto;
+
+public class BaseResp {
+}

+ 40 - 0
src/main/java/com/uas/eis/dto/CreateUnitResp.java

@@ -0,0 +1,40 @@
+package com.uas.eis.dto;
+
+public class CreateUnitResp {
+    private String unitId;
+    private String unitName;
+    private String unitOpenId;
+    private String unitParentId;
+
+    public String getUnitId() {
+        return unitId;
+    }
+
+    public void setUnitId(String unitId) {
+        this.unitId = unitId;
+    }
+
+    public String getUnitName() {
+        return unitName;
+    }
+
+    public void setUnitName(String unitName) {
+        this.unitName = unitName;
+    }
+
+    public String getUnitOpenId() {
+        return unitOpenId;
+    }
+
+    public void setUnitOpenId(String unitOpenId) {
+        this.unitOpenId = unitOpenId;
+    }
+
+    public String getUnitParentId() {
+        return unitParentId;
+    }
+
+    public void setUnitParentId(String unitParentId) {
+        this.unitParentId = unitParentId;
+    }
+}

+ 49 - 0
src/main/java/com/uas/eis/dto/GetUnitListDTO.java

@@ -0,0 +1,49 @@
+package com.uas.eis.dto;
+
+public class GetUnitListDTO {
+    private String unitOpenId;
+    private String unitId;
+    private String unitParentId;
+    private String unitName;
+    private String unitDesc;
+
+    public String getUnitOpenId() {
+        return unitOpenId;
+    }
+
+    public void setUnitOpenId(String unitOpenId) {
+        this.unitOpenId = unitOpenId;
+    }
+
+    public String getUnitParentId() {
+        return unitParentId;
+    }
+
+    public void setUnitParentId(String unitParentId) {
+        this.unitParentId = unitParentId;
+    }
+
+    public String getUnitId() {
+        return unitId;
+    }
+
+    public void setUnitId(String unitId) {
+        this.unitId = unitId;
+    }
+
+    public String getUnitName() {
+        return unitName;
+    }
+
+    public void setUnitName(String unitName) {
+        this.unitName = unitName;
+    }
+
+    public String getUnitDesc() {
+        return unitDesc;
+    }
+
+    public void setUnitDesc(String unitDesc) {
+        this.unitDesc = unitDesc;
+    }
+}

+ 18 - 0
src/main/java/com/uas/eis/dto/GetUnitListResp.java

@@ -0,0 +1,18 @@
+package com.uas.eis.dto;
+
+import com.netease.qiye.qiyeopenplatform.sdk.dto.R;
+
+import java.util.List;
+
+public class GetUnitListResp extends R<List<GetUnitListDTO>> {
+    private List<GetUnitListDTO> data;
+
+    @Override
+    public List<GetUnitListDTO> getData() {
+        return data;
+    }
+
+    public void setData(List<GetUnitListDTO> data) {
+        this.data = data;
+    }
+}

+ 49 - 0
src/main/java/com/uas/eis/dto/UpdateEmpReq.java

@@ -0,0 +1,49 @@
+package com.uas.eis.dto;
+
+public class UpdateEmpReq {
+    private String accountName;
+    private String job;
+    private String name;
+    private String unitId;
+    private String jobNumber;
+
+    public String getAccountName() {
+        return accountName;
+    }
+
+    public void setAccountName(String accountName) {
+        this.accountName = accountName;
+    }
+
+    public String getJob() {
+        return job;
+    }
+
+    public void setJob(String job) {
+        this.job = job;
+    }
+
+    public String getName() {
+        return name;
+    }
+
+    public void setName(String name) {
+        this.name = name;
+    }
+
+    public String getUnitId() {
+        return unitId;
+    }
+
+    public void setUnitId(String unitId) {
+        this.unitId = unitId;
+    }
+
+    public String getJobNumber() {
+        return jobNumber;
+    }
+
+    public void setJobNumber(String jobNumber) {
+        this.jobNumber = jobNumber;
+    }
+}

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

@@ -8,6 +8,11 @@ public class Employee {
     private String orcode;
     private String em_emptype;
     private String em_password;
+    private String orneteasyid;
+    private String em_neteasyid;
+    private Integer em_isneteasy;
+    private String em_position;
+    private String em_mobile;
 
     public String getEm_code() {
         return em_code;
@@ -64,4 +69,62 @@ public class Employee {
     public void setEm_password(String em_password) {
         this.em_password = em_password;
     }
+
+    public String getOrneteasyid() {
+        return orneteasyid;
+    }
+
+    public void setOrneteasyid(String orneteasyid) {
+        this.orneteasyid = orneteasyid;
+    }
+
+    public String getEm_neteasyid() {
+        return em_neteasyid;
+    }
+
+    public void setEm_neteasyid(String em_neteasyid) {
+        this.em_neteasyid = em_neteasyid;
+    }
+
+    public Integer getEm_isneteasy() {
+        return em_isneteasy;
+    }
+
+    public void setEm_isneteasy(Integer em_isneteasy) {
+        this.em_isneteasy = em_isneteasy;
+    }
+
+    public String getEm_position() {
+        return em_position;
+    }
+
+    public void setEm_position(String em_position) {
+        this.em_position = em_position;
+    }
+
+    public String getEm_mobile() {
+        return em_mobile;
+    }
+
+    public void setEm_mobile(String em_mobile) {
+        this.em_mobile = em_mobile;
+    }
+
+    @Override
+    public String toString() {
+        return "Employee{" +
+                "em_code='" + em_code + '\'' +
+                ", em_name='" + em_name + '\'' +
+                ", em_class='" + em_class + '\'' +
+                ", em_adid='" + em_adid + '\'' +
+                ", orcode='" + orcode + '\'' +
+                ", em_emptype='" + em_emptype + '\'' +
+                ", em_password='" + em_password + '\'' +
+                ", orneteasyid='" + orneteasyid + '\'' +
+                ", em_neteasyid='" + em_neteasyid + '\'' +
+                ", em_isneteasy=" + em_isneteasy +
+                ", em_position='" + em_position + '\'' +
+                ", em_mobile='" + em_mobile + '\'' +
+                '}';
+    }
 }

+ 18 - 1
src/main/java/com/uas/eis/entity/HrOrg.java

@@ -5,8 +5,9 @@ public class HrOrg {
     private String or_name;
     private String or_path;
     private Integer or_level;
-
     private String or_status;
+    private String or_neteasyid;
+    private String parentnetEasyId;
 
     public String getOr_code() {
         return or_code;
@@ -47,4 +48,20 @@ public class HrOrg {
     public void setOr_status(String or_status) {
         this.or_status = or_status;
     }
+
+    public String getOr_neteasyid() {
+        return or_neteasyid;
+    }
+
+    public void setOr_neteasyid(String or_neteasyid) {
+        this.or_neteasyid = or_neteasyid;
+    }
+
+    public String getParentnetEasyId() {
+        return parentnetEasyId;
+    }
+
+    public void setParentnetEasyId(String parentnetEasyId) {
+        this.parentnetEasyId = parentnetEasyId;
+    }
 }

+ 1 - 1
src/main/java/com/uas/eis/sdk/NetEasySDK.java

@@ -30,7 +30,7 @@ public class NetEasySDK {
         this.sdkInstance= new QiyeOpenPlatSDK("dev", qiyeOpenPlatSDKConfig);
         // 查看文档,应用获取token
         R<AppLoginResp> appLoginR = sdkInstance.appLogin(netEasyConfig.getAuthCode());
-        sdkInstance.getQiyeOpenPlatSDKConfig().setupToken(appLoginR.getData());
+        sdkInstance.getQiyeOpenPlatSDKConfig().setupToken((AppLoginResp) appLoginR.getDataBean(AppLoginResp.class));
     }
 
     public QiyeOpenPlatSDK getSDKInstance(){

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

@@ -47,7 +47,7 @@ public class ADSyncService {
     public void syncUser() throws IOException {
         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 (Employee employee : employeeList) {
             if(employee.getEm_adid()!=null){

+ 417 - 0
src/main/java/com/uas/eis/serviceImpl/NetEasyService.java

@@ -0,0 +1,417 @@
+package com.uas.eis.serviceImpl;
+
+import com.netease.qiye.qiyeopenplatform.common.constant.ResultEnum;
+import com.netease.qiye.qiyeopenplatform.common.dto.open.account.AccountResp;
+import com.netease.qiye.qiyeopenplatform.common.dto.open.unit.UnitAccountResp;
+import com.netease.qiye.qiyeopenplatform.sdk.QiyeOpenPlatSDK;
+import com.netease.qiye.qiyeopenplatform.sdk.dto.Q;
+import com.netease.qiye.qiyeopenplatform.sdk.dto.R;
+import com.netease.qiye.qiyeopenplatform.sdk.util.CommonUtils;
+import com.uas.eis.core.config.NetEasyConfig;
+import com.uas.eis.dao.BaseDao;
+import com.uas.eis.dto.CreateUnitResp;
+import com.uas.eis.dto.GetUnitListDTO;
+import com.uas.eis.dto.UpdateEmpReq;
+import com.uas.eis.entity.Employee;
+import com.uas.eis.entity.HrOrg;
+import com.uas.eis.sdk.NetEasySDK;
+import com.uas.eis.utils.JacksonUtil;
+import com.uas.eis.utils.PinyinUtils;
+import com.uas.eis.utils.StringUtil;
+import org.slf4j.Logger;
+import org.slf4j.LoggerFactory;
+import org.springframework.beans.factory.annotation.Autowired;
+import org.springframework.context.annotation.Lazy;
+import org.springframework.stereotype.Service;
+import org.springframework.util.StringUtils;
+
+import java.util.ArrayList;
+import java.util.List;
+import java.util.Map;
+import java.util.Optional;
+
+@Service
+public class NetEasyService {
+    @Autowired
+    @Lazy
+    private NetEasySDK netEasySDK;
+    @Autowired
+    private NetEasyConfig netEasyConfig;
+    @Autowired
+    private UasSyncService uasSyncService;
+    @Autowired
+    private BaseDao baseDao;
+
+    private final Logger logger = LoggerFactory.getLogger(getClass());
+
+    /**
+     * 同步人员资料
+     * */
+    public void syncEmployee(){
+        List<Employee> employeeList = uasSyncService.getNetEasyUserList();
+        for (Employee employee : employeeList) {
+            if(StringUtil.hasText(employee.getEm_neteasyid())) {
+                if(!"离职".equals(employee.getEm_class())) {
+                    updateNetEasyEmployee(employee);
+                }else {
+                    disableNetEasyEmployee(employee);
+                }
+            }else{
+                if(employee.getEm_isneteasy() == -1){
+                    //开通账号
+                    createNetEasyEmployee(employee);
+                }
+            }
+        }
+    }
+
+    /**
+     * 创建账号信息
+     * */
+    public void createNetEasyEmployee(Employee employee){
+        logger.info("创建邮箱账号:{}",employee.toString());
+        AccountResp getAccountResp = getNetEasyEmployee(employee);
+        if(getAccountResp != null){
+            if (getAccountResp.getStatus() == 0){
+                //账号正常
+                baseDao.updateByCondition("employee","em_neteasyid='"+getAccountResp.getAccountName()+"'","em_code='"+employee.getEm_code()+"'");
+                logger.info("账号已存在,更新人员信息:{}",employee.toString());
+                return;
+            }else if(getAccountResp.getStatus() == 1){
+                //账号禁用恢复账号
+                employee.setEm_neteasyid(getAccountResp.getAccountName());
+                recoverNetEasyEmployee(employee);
+                baseDao.updateByCondition("employee","em_neteasyid='"+getAccountResp.getAccountName()+"'","em_code='"+employee.getEm_code()+"'");
+                return;
+            }
+        }
+        logger.info("邮箱无此账号,创建邮箱账号:{}",employee.toString());
+        QiyeOpenPlatSDK instanceSDK = netEasySDK.getSDKInstance();
+        Q q = Q.init(null)
+                .addParam("domain", netEasyConfig.getDomain())
+                .addParam("accountName", PinyinUtils.getCustomPinyin(employee.getEm_name()))
+                .addParam("name", employee.getEm_name())
+                .addParam("job", employee.getEm_position())
+                .addParam("jobNumber", employee.getEm_code())
+                .addParam("password", employee.getEm_password())
+                .addParam("unitId", employee.getOrneteasyid());
+        R r = instanceSDK.commonInvoke(q, "/api/open/account/createAccount");
+        if(StringUtil.hasText(employee.getEm_mobile())){
+            q.addParam("mobile", employee.getEm_mobile());
+        }
+        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()+"'");
+            logger.info("创建账号成功,账号名称:{}",employee.getEm_name());
+        }
+    }
+    /**
+     * 更新账号信息
+     * */
+    public void updateNetEasyEmployee(Employee employee){
+        QiyeOpenPlatSDK instanceSDK = netEasySDK.getSDKInstance();
+        Q q1 = Q.init(null)
+                .addParam("domain", netEasyConfig.getDomain())
+                .addParam("jobNumber", employee.getEm_code())
+                .addParam("accountName", employee.getEm_neteasyid());
+        if (StringUtils.hasText(employee.getEm_position())){
+            q1.addParam("job", employee.getEm_position());
+        }
+        if (StringUtils.hasText(employee.getEm_name())){
+            q1.addParam("name", employee.getEm_name());
+        }
+        if (StringUtils.hasText(employee.getOrneteasyid())){
+            q1.addParam("unitId", employee.getOrneteasyid());
+        }
+       /* if(StringUtil.hasText(employee.getEm_mobile())){
+            q1.addParam("mobile", employee.getEm_mobile());
+        }*/
+        R r2 = instanceSDK.commonInvoke(q1, "/api/open/account/updateAccount");
+        if(ResultEnum.SUCCESS.getCode() == r2.getCode()){
+            logger.info("更新账号信息成功,账号信息:{}",employee.toString());
+
+        }else {
+            logger.info("更新账号信息失败,账号名称:{},错误信息:{}",employee.toString(),r2.getMessage());
+        }
+    }
+    /**
+     * 禁用账号信息
+     * */
+    public void disableNetEasyEmployee(Employee employee){
+        QiyeOpenPlatSDK instanceSDK = netEasySDK.getSDKInstance();
+        Q q1 = Q.init(null)
+                .addParam("domain", netEasyConfig.getDomain())
+                .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()+"'");
+            logger.info("禁用账号成功,账号信息:{}",employee.toString());
+
+        }else {
+            logger.info("禁用账号失败,账号名称:{},错误信息:{}",employee.toString(),r2.getMessage());
+        }
+    }
+    /**
+     * 恢复账号
+     * */
+    public void recoverNetEasyEmployee(Employee employee){
+        QiyeOpenPlatSDK instanceSDK = netEasySDK.getSDKInstance();
+        Q q1 = Q.init(null)
+                .addParam("domain", netEasyConfig.getDomain())
+                .addParam("accountName", employee.getEm_neteasyid());
+        R r2 = instanceSDK.commonInvoke(q1, "/api/open/account/recoverAccount");
+        if(ResultEnum.SUCCESS.getCode() == r2.getCode()){
+           logger.info("恢复账号成功,账号信息:{}",employee.toString());
+        }else {
+            logger.info("恢复账号失败,账号名称:{},错误信息:{}",employee.toString(),r2.getMessage());
+        }
+    }
+
+    /**
+     * 获取邮箱账号
+     * */
+    public AccountResp getNetEasyEmployee(Employee employee) {
+        QiyeOpenPlatSDK instanceSDK = netEasySDK.getSDKInstance();
+        Q q1 = Q.init(null)
+                .addParam("domain", netEasyConfig.getDomain())
+                .addParam("accountName", PinyinUtils.getCustomPinyin(employee.getEm_name()));
+        R r2 = instanceSDK.commonInvoke(q1, "/api/open/account/getAccount");
+        if(ResultEnum.SUCCESS.getCode() == r2.getCode()){
+            AccountResp accountResp = (AccountResp) r2.getDataBean(AccountResp.class);
+            logger.info("查询账号成功,账号信息:{}",employee.toString());
+            return accountResp;
+
+        }else {
+            logger.info("查询账号失败,账号名称:{},错误信息:{}",employee.toString(),r2.getMessage());
+            return null;
+        }
+    }
+
+    /**
+     * 获取账号列表
+     * */
+    public void getNetEasyUserList(Integer pageNum, List<AccountResp>  userList){
+       logger.info("getNetEasyUserList page:{}",pageNum);
+        QiyeOpenPlatSDK instanceSDK = netEasySDK.getSDKInstance();
+        Q q = Q.init(null).addParam("domain", netEasyConfig.getDomain())
+                .addParam("pageSize", 50)
+                .addParam("pageNum", pageNum);
+        R r = instanceSDK.commonInvoke(q, "/api/open/unit/getAccountList");
+        if(ResultEnum.SUCCESS.getCode() == r.getCode()){
+            UnitAccountResp unitAccountResp = (UnitAccountResp) r.getDataBean(UnitAccountResp.class);
+            userList.addAll(unitAccountResp.getList());
+            if (unitAccountResp.getCount() > unitAccountResp.getPageNum()*50){
+                getNetEasyUserList(pageNum+1, userList);
+            }
+        }
+    }
+    /*
+      初始化人员资料
+      */
+    public void initEmployee(){
+        /*List<AccountResp> userList = new ArrayList<AccountResp>();
+        getNetEasyUserList(1, userList);
+        List<Employee> employeeList = uasSyncService.getNetEasyUserList();
+        for (AccountResp accountResp : userList) {
+            Optional<Employee> employeeOptional = employeeList.stream().filter(employee -> employee.getEm_name().equals(accountResp.getName())).findFirst();
+            employeeOptional.ifPresent(employee -> baseDao.updateByCondition("employee", "em_neteasyid='" + accountResp.getAccountName() + "'", "em_code='" + employee.getEm_code() + "'"));
+        }*/
+        List<Employee> employeeList = uasSyncService.getNetEasyUserList();
+        for (Employee employee : employeeList) {
+            if( StringUtil.hasText(employee.getEm_neteasyid())) {
+                updateNetEasyEmployee(employee);
+            }else{
+                if(StringUtil.hasText(employee.getEm_emptype())&&
+                        (employee.getEm_emptype().startsWith("管理序列") || "技术序列".equals(employee.getEm_emptype())
+                                || "营销序列".equals(employee.getEm_emptype()) || "职能序列".equals(employee.getEm_emptype()))){
+                    //开通账号
+                    createNetEasyEmployee(employee);
+                }
+            }
+
+        }
+    }
+
+    /**
+     * 组织资料同步
+     * */
+    public void syncNetEasyOrg(){
+        QiyeOpenPlatSDK instanceSDK = netEasySDK.getSDKInstance();
+        Q q = Q.init(null)
+                .addParam("domain", netEasyConfig.getDomain());
+        R r1 = instanceSDK.commonInvoke(q, "/api/open/unit/getUnitList");
+        List<HrOrg> orgList = uasSyncService.getADOrgList();
+        List<GetUnitListDTO> unitList = null;
+        if(ResultEnum.SUCCESS.getCode() == r1.getCode()){
+            logger.info("获取组织列表成功");
+            List<Map<String, Object>> dataList = (List<Map<String, Object>>) r1.getData();
+            String jsonArrayStr = JacksonUtil.toJsonArray(dataList);
+            unitList = CommonUtils.parseArray(jsonArrayStr, GetUnitListDTO.class);
+            for (HrOrg org : orgList) {
+                Optional<GetUnitListDTO> unitOptional = unitList.stream().filter(unit -> unit.getUnitName().equals(org.getOr_name()) || unit.getUnitId().equals(org.getOr_neteasyid())).findFirst();
+                if(!StringUtils.hasText(org.getOr_neteasyid()) && "已审核".equals(org.getOr_status()) ){
+                   //邮箱组织ID为空,判断是否需要创建组织
+                    if(unitOptional.isPresent()){
+                        logger.info("更新组织id为空,组织编号:{},组织名称:{}",org.getOr_code(),org.getOr_name());
+                        baseDao.updateByCondition("HRORG","OR_NETEASYID='"+unitOptional.get().getUnitId()+"'","OR_CODE='"+org.getOr_code()+"'");
+                    }else {
+                        logger.info("创建组织组织id为空,组织编号:{},组织名称:{},父组织:{}",org.getOr_code(),org.getOr_name(),org.getParentnetEasyId());
+                        createNetEasyOrg(org, StringUtil.hasText(org.getParentnetEasyId()) ? org.getParentnetEasyId() : null );
+                    }
+                }else if(StringUtils.hasText(org.getOr_neteasyid())){
+                    if(unitOptional.isPresent()){
+                        //邮箱组织ID不为空,且邮箱服务器存在对应的组织
+                        if ("已禁用".equals(org.getOr_status())){
+                            //删除组织
+                            logger.info("删除组织,组织id:{},组织编号:{},组织名称:{}",org.getOr_neteasyid(),org.getOr_code(),org.getOr_name());
+                            deleteNetEasyOrg(org);
+                        }else if(!"已禁用".equals(org.getOr_status()) && !unitOptional.get().getUnitName().equals(org.getOr_name())){
+                            //更新组织
+                            logger.info("更新组织名称,组织id:{},组织编号:{},组织名称:{}",org.getOr_neteasyid(),org.getOr_code(),org.getOr_name());
+                            updateNetEasyOrg(org);
+                        }
+                     } else {
+                        //邮箱组织ID不为空,但网易邮箱不存在如后台删除等,需要重新创建组织
+                        if("已审核".equals(org.getOr_status())){
+                            logger.info("重新创建组织,组织id不为空,组织编号:{},组织名称:{}",org.getOr_code(),org.getOr_name());
+                            createNetEasyOrg(org, StringUtil.hasText(org.getParentnetEasyId()) ? org.getParentnetEasyId() : null );
+                        }
+                    }
+                  }
+                }
+            //整体再刷新一次层级,防止一次性新增多层级组织
+            refreshNetEasyOrg();
+        }
+
+    }
+
+    /*
+     * init初始化
+     * */
+
+    public void initNetEasyOrg() {
+        QiyeOpenPlatSDK instanceSDK = netEasySDK.getSDKInstance();
+        Q q = Q.init(null)
+                .addParam("domain", netEasyConfig.getDomain());
+        R r1 = instanceSDK.commonInvoke(q, "/api/open/unit/getUnitList");
+        List<HrOrg> orgList = uasSyncService.getADOrgList();
+        if(ResultEnum.SUCCESS.getCode() == r1.getCode()){
+            List<Map<String, Object>> dataList = (List<Map<String, Object>>) r1.getData();
+            String jsonArrayStr = JacksonUtil.toJsonArray(dataList);
+            List<GetUnitListDTO> unitList = CommonUtils.parseArray(jsonArrayStr, GetUnitListDTO.class);
+            for (GetUnitListDTO unit : unitList) {
+                Optional<HrOrg> orgOptional = orgList.stream().filter(org -> org.getOr_name().equals(unit.getUnitName())).findFirst();
+                if(orgOptional.isPresent()){
+                    baseDao.updateByCondition("HRORG","OR_NETEASYID='"+unit.getUnitId()+"'","OR_CODE='"+orgOptional.get().getOr_code()+"'");
+                }
+            }
+        }
+        for (HrOrg org : orgList) {
+            if(org.getOr_neteasyid() == null && "已审核".equals(org.getOr_status())){
+                createNetEasyOrg(org, null);
+            }
+        }
+        refreshNetEasyOrg();
+    }
+    /**
+     * 刷新组织层级
+     * */
+    public void refreshNetEasyOrg() {
+        logger.info("刷新组织层级");
+        QiyeOpenPlatSDK instanceSDK = netEasySDK.getSDKInstance();
+        Q q = Q.init(null)
+                .addParam("domain", netEasyConfig.getDomain());
+        R r1 = instanceSDK.commonInvoke(q, "/api/open/unit/getUnitList");
+        List<HrOrg> orgList = uasSyncService.getADOrgList();
+        List<GetUnitListDTO> unitList = null;
+        if(ResultEnum.SUCCESS.getCode() == r1.getCode()){
+            List<Map<String, Object>> dataList = (List<Map<String, Object>>) r1.getData();
+            String jsonArrayStr = JacksonUtil.toJsonArray(dataList);
+            unitList = CommonUtils.parseArray(jsonArrayStr, GetUnitListDTO.class);
+        }
+        if (unitList != null){
+            for (HrOrg org : orgList) {
+                Optional<GetUnitListDTO> unitOptional = unitList.stream().filter(unit -> unit.getUnitId().equals(org.getOr_neteasyid())).findFirst();
+                if(unitOptional.isPresent()){
+                    if(StringUtil.hasText(org.getParentnetEasyId()) && !org.getParentnetEasyId().equals(unitOptional.get().getUnitParentId())){
+                        logger.info("组织{}的父组织id错误,正确父组织id:{},错误父组织id:{}",org.getOr_name(),unitOptional.get().getUnitParentId(),org.getParentnetEasyId());
+                        moveNetEasyOrg(org,org.getParentnetEasyId());
+                    }
+                }
+            }
+        }
+    }
+    /**
+     * 创建组织
+     * */
+    public String createNetEasyOrg(HrOrg org,String parentId){
+        QiyeOpenPlatSDK instanceSDK = netEasySDK.getSDKInstance();
+        Q q1 = Q.init(null)
+                .addParam("domain", netEasyConfig.getDomain())
+                .addParam("unitName", org.getOr_name());
+        if (parentId != null){
+            q1.addParam("parentId", parentId);
+        }
+        R r2 = instanceSDK.commonInvoke(q1, "/api/open/unit/createUnit");
+        if(ResultEnum.SUCCESS.getCode() == r2.getCode()){
+            CreateUnitResp createUnitResp = (CreateUnitResp) r2.getDataBean(CreateUnitResp.class);
+            baseDao.updateByCondition("HRORG","OR_NETEASYID='"+createUnitResp.getUnitId()+"'","OR_CODE='"+org.getOr_code()+"'");
+            logger.info("创建组织成功,组织id:{},组织编号:{},组织名称:{} ,父级组织:{}",createUnitResp.getUnitId(),org.getOr_code(),org.getOr_name() ,parentId);
+            return createUnitResp.getUnitId();
+        }else {
+            return null;
+        }
+
+    }
+    /**
+     * 删除组织
+     * */
+    public void deleteNetEasyOrg(HrOrg org){
+        QiyeOpenPlatSDK instanceSDK = netEasySDK.getSDKInstance();
+        Q q1 = Q.init(null)
+                .addParam("domain", netEasyConfig.getDomain())
+                .addParam("unitId", org.getOr_neteasyid());
+        R r2 = instanceSDK.commonInvoke(q1, "/api/open/unit/deleteUnit");
+        if(ResultEnum.SUCCESS.getCode() == r2.getCode()){
+            baseDao.updateByCondition("HRORG","OR_NETEASYID=null","OR_CODE='"+org.getOr_code()+"'");
+            logger.info("删除组织成功,组织id:{},组织编号:{},组织名称:{}",org.getOr_neteasyid(),org.getOr_code(),org.getOr_name());
+        }else {
+            logger.info("删除组织失败,组织id:{},组织编号:{},组织名称:{}",org.getOr_neteasyid(),org.getOr_code(),org.getOr_name());
+
+        }
+
+    }
+    /**
+     *更新组织名称
+     * */
+    public void updateNetEasyOrg(HrOrg org ){
+
+        QiyeOpenPlatSDK instanceSDK = netEasySDK.getSDKInstance();
+        Q q1 = Q.init(null)
+                .addParam("domain", netEasyConfig.getDomain())
+                .addParam("unitId", org.getOr_neteasyid())
+                .addParam("unitName", org.getOr_name());
+        R r2 = instanceSDK.commonInvoke(q1, "/api/open/unit/updateUnit");
+        if(ResultEnum.SUCCESS.getCode() == r2.getCode()){
+            logger.info("更新组织成功,组织id:{},组织编号:{},组织名称:{}",org.getOr_neteasyid(),org.getOr_code(),org.getOr_name());
+        }
+    }
+    /**
+     * 移动组织
+     * */
+    public void moveNetEasyOrg(HrOrg org ,String parentId){
+        QiyeOpenPlatSDK instanceSDK = netEasySDK.getSDKInstance();
+        Q q1 = Q.init(null)
+                .addParam("domain", netEasyConfig.getDomain())
+                .addParam("unitId", org.getOr_neteasyid())
+                .addParam("unitParentId", parentId);
+        R r2 = instanceSDK.commonInvoke(q1, "/api/open/unit/moveUnit");
+        if(ResultEnum.SUCCESS.getCode() == r2.getCode()){
+            logger.info("移动组织成功,组织id:{},父组织id:{}",org.getOr_neteasyid(),parentId);
+        }
+    }
+
+
+}

+ 0 - 24
src/main/java/com/uas/eis/serviceImpl/UASNetEasyService.java

@@ -1,24 +0,0 @@
-package com.uas.eis.serviceImpl;
-
-import com.uas.eis.sdk.NetEasySDK;
-import org.springframework.beans.factory.annotation.Autowired;
-import org.springframework.context.annotation.Lazy;
-import org.springframework.stereotype.Service;
-
-@Service
-public class UASNetEasyService {
-    @Autowired
-    @Lazy
-    private NetEasySDK netEasySDK;
-
-    /*
-      同步人员资料
-      */
-    public void syncEmployee(){
-
-    }
-
-    /*
-      同步部门资料
-      */
-}

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

@@ -15,16 +15,22 @@ 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  from employee  left join hrorg on em_defaultorid=or_id"+
+        return  baseDao.query("select em_code,em_name,or_code orcode,em_class,em_adid,em_emptype,em_position  from employee  left join hrorg on em_defaultorid=or_id"+
                 " where em_adid is not  null or em_class<>'离职' order by em_id asc"
                 ,
                 Employee.class);
     }
     public List<HrOrg> getADOrgList() {
-       return  baseDao.query("select * from (select or_code,or_name,or_status,substr(sys_connect_by_path( or_name,'-'),instr(sys_connect_by_path( or_name,'-'),'-',1,2)+1) or_path,level as or_level " +
+       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 " +
                         "from hrorg where or_needsync=-1 start with or_PCODE is null connect by prior  or_CODE= or_PCODE) order by or_level asc"
                 ,
                 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"+
+                        " where em_neteasyid is not  null or em_class<>'离职' order by em_id asc"
+                ,
+                Employee.class);
+    }
 
 }

+ 30 - 0
src/test/java/com/uas/eis/NetEasyTest.java

@@ -0,0 +1,30 @@
+package com.uas.eis;
+
+import com.uas.eis.serviceImpl.NetEasyService;
+import org.junit.Test;
+import org.junit.runner.RunWith;
+import org.springframework.beans.factory.annotation.Autowired;
+import org.springframework.boot.test.context.SpringBootTest;
+import org.springframework.test.context.junit4.SpringRunner;
+@RunWith(SpringRunner.class)
+@SpringBootTest(classes = {UasEisApplication.class})
+public class NetEasyTest {
+    @Autowired
+    private NetEasyService netEasyService;
+    @Test
+    public void initOrg() throws Exception {
+        netEasyService.initNetEasyOrg();
+    }
+    @Test
+    public void syncOrg() throws Exception {
+        netEasyService.syncNetEasyOrg();
+    }
+    @Test
+    public void initEmp() throws Exception {
+        netEasyService.initEmployee();
+    }
+    @Test
+    public void syncEmp() throws Exception {
+        netEasyService.syncEmployee();
+    }
+}

+ 2 - 13
src/test/java/com/uas/eis/UasEisApplicationTests.java

@@ -54,11 +54,11 @@ public class UasEisApplicationTests {
 
 	@Test
 	public void deleteuser() throws Exception {
-	 // adSyncService.deleteUser("abc", "OU=人力资源部,OU=经营班子,OU=董事会,OU=User");
+	 adSyncService.deleteUser("CN=测试,OU=人力资源部,OU=经营班子,OU=董事会,OU=User,DC=si,DC=ad", null);
 	}
 	@Test
 	public void deleteOrg() throws Exception {
-		adSyncService.deleteOrg("OU=测试,OU=人力资源部,OU=经营班子,OU=董事会,OU=User,DC=si,DC=ad", null);
+		adSyncService.deleteOrg("OU=测试,OU=人力资源部,OU=经营班子,OU=董事会,OU=User,DC=si,DC=ad", null);
 	}
 
 	@Test
@@ -67,26 +67,15 @@ public class UasEisApplicationTests {
 	}
 	@Test
 	public void findOrg() throws Exception {
-
-		//adSyncService.findOrganizationsByDescription("A001");
-//		List<HrOrg> orgList = orgService.getOrgList();
-//		System.out.println(orgList.get(0).getOr_code());
 		adSyncService.getOrganizations(null);
 	}
 	@Test
 	public void SyncOrg() throws Exception {
-
-		//adSyncService.findOrganizationsByDescription("A001");
-//		List<HrOrg> orgList = orgService.getOrgList();
-//		System.out.println(orgList.get(0).getOr_code());
-		//String str ="a;";
-		//System.out.println(str.substring(str.indexOf(";")+1));
 		adSyncService.syncOrg();
 	}
 
 	@Test
 	public void SyncUser() throws Exception {
-
 		adSyncService.syncUser();
 	}