提交 89ca99e1 编写于 作者: M MaxKey

dingtalk

上级 efda9101
......@@ -42,6 +42,8 @@ public class LoginCredential implements Authentication {
String provider;
String code;
String message = WebConstants.LOGIN_RESULT.SUCCESS;
String instId;
ArrayList<GrantedAuthority> grantedAuthority;
boolean authenticated;
......@@ -211,20 +213,50 @@ public class LoginCredential implements Authentication {
this.message = message;
}
@Override
public String toString() {
StringBuilder builder = new StringBuilder();
builder.append("LoginCredential [username=").append(username)
.append(", password=").append("******")
.append(", sessionId=").append(sessionId)
.append(", captcha=").append(captcha)
.append(", otpCaptcha=").append(otpCaptcha)
.append(", remeberMe=").append(remeberMe)
.append(", authType=").append(authType)
.append(", jwtToken=").append(jwtToken)
.append(", grantedAuthority=").append(grantedAuthority)
.append(", authenticated=").append(authenticated)
.append("]");
return builder.toString();
}
public String getInstId() {
return instId;
}
public void setInstId(String instId) {
this.instId = instId;
}
@Override
public String toString() {
StringBuilder builder = new StringBuilder();
builder.append("LoginCredential [username=");
builder.append(username);
builder.append(", password=");
builder.append("******");
builder.append(", sessionId=");
builder.append(sessionId);
builder.append(", captcha=");
builder.append(captcha);
builder.append(", otpCaptcha=");
builder.append(otpCaptcha);
builder.append(", remeberMe=");
builder.append(remeberMe);
builder.append(", authType=");
builder.append(authType);
builder.append(", jwtToken=");
builder.append(jwtToken);
builder.append(", onlineTicket=");
builder.append(onlineTicket);
builder.append(", provider=");
builder.append(provider);
builder.append(", code=");
builder.append(code);
builder.append(", message=");
builder.append(message);
builder.append(", instId=");
builder.append(instId);
builder.append(", grantedAuthority=");
builder.append(grantedAuthority);
builder.append(", authenticated=");
builder.append(authenticated);
builder.append(", roleAdministrators=");
builder.append(roleAdministrators);
builder.append("]");
return builder.toString();
}
}
......@@ -64,6 +64,12 @@ public class OrganizationsCast extends JpaBaseEntity implements Serializable {
private String orgId;
@Column
private String orgParentId;
@Column
private String appId;
@Column
private String appName;
@Column
private String instId;
......
......@@ -17,6 +17,12 @@
package org.maxkey.synchronizer.dingtalk;
import java.sql.Types;
import java.util.HashMap;
import java.util.NoSuchElementException;
import java.util.concurrent.LinkedBlockingQueue;
import org.maxkey.constants.ConstsStatus;
import org.maxkey.entity.Organizations;
import org.maxkey.synchronizer.AbstractSynchronizerService;
import org.maxkey.synchronizer.ISynchronizerService;
......@@ -34,47 +40,65 @@ import com.taobao.api.ApiException;
public class DingtalkOrganizationService extends AbstractSynchronizerService implements ISynchronizerService{
final static Logger _logger = LoggerFactory.getLogger(DingtalkOrganizationService.class);
OapiV2DepartmentListsubResponse rspDepts;
String access_token;
public void sync() {
_logger.info("Sync Organizations ...");
try {
OapiV2DepartmentListsubResponse rsp = requestDepartmentList(access_token);
for(DeptBaseResponse dept : rsp.getResult()) {
_logger.info("dept : " + dept.getDeptId()+" "+ dept.getName()+" "+ dept.getParentId());
Organizations org = buildOrganization(dept);
this.organizationsService.merge(org);
_logger.info("Organizations : " + org);
LinkedBlockingQueue<Long> deptsQueue = new LinkedBlockingQueue<Long>();
deptsQueue.add(1L);
HashMap<Long,DeptBaseResponse> deptMap = new HashMap<Long,DeptBaseResponse>();
try {
while(deptsQueue.element() != null) {
OapiV2DepartmentListsubResponse rsp = requestDepartmentList(access_token,deptsQueue.poll());
for(DeptBaseResponse dept : rsp.getResult()) {
_logger.info("dept : " + dept.getDeptId()+" "+ dept.getName()+" "+ dept.getParentId());
deptsQueue.add(dept.getDeptId());
deptMap.put(dept.getDeptId(), dept);
Organizations organization = buildOrganization(dept,deptMap.get(dept.getParentId()));
if(organizationsService.findOne("id = ? and instid = ?",
new Object[] { organization.getId().toString(), organization.getInstId() },
new int[] { Types.VARCHAR, Types.VARCHAR }) == null) {
organizationsService.insert(organization);
}else {
organizationsService.update(organization);
}
_logger.info("Organizations : " + organization);
}
}
} catch (ApiException e) {
e.printStackTrace();
}catch (NoSuchElementException e) {
_logger.debug("Sync Department successful .");
}
}
public OapiV2DepartmentListsubResponse requestDepartmentList(String access_token) throws ApiException {
public OapiV2DepartmentListsubResponse requestDepartmentList(String access_token,Long deptId) throws ApiException {
DingTalkClient client = new DefaultDingTalkClient("https://oapi.dingtalk.com/topapi/v2/department/listsub");
OapiV2DepartmentListsubRequest req = new OapiV2DepartmentListsubRequest();
req.setDeptId(1L);
req.setDeptId(deptId);
req.setLanguage("zh_CN");
rspDepts = client.execute(req, access_token);
OapiV2DepartmentListsubResponse rspDepts = client.execute(req, access_token);
_logger.info("response : " + rspDepts.getBody());
return rspDepts;
}
public Organizations buildOrganization(DeptBaseResponse dept) {
public Organizations buildOrganization(DeptBaseResponse dept,DeptBaseResponse parentDept) {
Organizations org = new Organizations();
org.setId(dept.getDeptId()+"");
org.setCode(dept.getDeptId()+"");
org.setName(dept.getName());
org.setParentId(dept.getParentId()+"");
org.setParentCode(dept.getParentId()+"");
if(parentDept != null) {
org.setParentName(parentDept.getName());
}
org.setInstId(this.synchronizer.getInstId());
org.setStatus(ConstsStatus.ACTIVE);
org.setDescription("dingtalk");
return org;
}
......@@ -87,10 +111,5 @@ public class DingtalkOrganizationService extends AbstractSynchronizerService im
public void setAccess_token(String access_token) {
this.access_token = access_token;
}
public OapiV2DepartmentListsubResponse getRspDepts() {
return rspDepts;
}
}
......@@ -17,42 +17,44 @@
package org.maxkey.synchronizer.dingtalk;
import java.sql.Types;
import java.util.List;
import org.apache.commons.lang3.StringUtils;
import org.joda.time.DateTime;
import org.joda.time.format.DateTimeFormat;
import org.maxkey.entity.Organizations;
import org.maxkey.entity.UserInfo;
import org.maxkey.synchronizer.AbstractSynchronizerService;
import org.maxkey.synchronizer.ISynchronizerService;
import org.slf4j.Logger;
import org.slf4j.LoggerFactory;
import org.springframework.beans.factory.annotation.Autowired;
import org.springframework.stereotype.Service;
import com.dingtalk.api.DefaultDingTalkClient;
import com.dingtalk.api.DingTalkClient;
import com.dingtalk.api.request.OapiV2UserListRequest;
import com.dingtalk.api.response.OapiV2DepartmentListsubResponse;
import com.dingtalk.api.response.OapiV2UserListResponse;
import com.dingtalk.api.response.OapiV2DepartmentListsubResponse.DeptBaseResponse;
import com.dingtalk.api.response.OapiV2UserListResponse.ListUserResponse;
@Service
public class DingtalkUsersService extends AbstractSynchronizerService implements ISynchronizerService{
final static Logger _logger = LoggerFactory.getLogger(DingtalkUsersService.class);
@Autowired
DingtalkOrganizationService dingdingOrganizationService;
String access_token;
public void sync() {
_logger.info("Sync Users...");
try {
OapiV2DepartmentListsubResponse rspDepts = dingdingOrganizationService.getRspDepts();
for(DeptBaseResponse dept : rspDepts.getResult()) {
List<Organizations> organizations =
organizationsService.find("instid = ?",
new Object[] { this.synchronizer.getInstId() },
new int[] { Types.VARCHAR});
for(Organizations dept : organizations) {
DingTalkClient client = new DefaultDingTalkClient("https://oapi.dingtalk.com/topapi/v2/user/list");
OapiV2UserListRequest req = new OapiV2UserListRequest();
req.setDeptId(dept.getDeptId());
req.setDeptId(Long.parseLong(dept.getCode()));
req.setCursor(0L);
req.setSize(100L);
req.setOrderField("modify_desc");
......@@ -66,12 +68,14 @@ public class DingtalkUsersService extends AbstractSynchronizerService implement
_logger.info("name : " + user.getName()+" , "+user.getLoginId()+" , "+user.getUserid());
UserInfo userInfo = buildUserInfo(user);
_logger.info("userInfo " + userInfo);
//if(userInfoService.findByUsername(userInfo.getUsername()) == null) {
if(userInfoService.findOne("username = ? and instid = ?",
new Object[] { userInfo.getUsername(),this.getSynchronizer().getInstId() },
new int[] { Types.VARCHAR,Types.VARCHAR}) == null) {
userInfo.setPassword(userInfo.getUsername() + "Maxkey@888");
this.userInfoService.insert(userInfo);
//}else {
// userInfoService.update(userInfo);
//}
}else {
userInfoService.update(userInfo);
}
}
}
......@@ -91,21 +95,24 @@ public class DingtalkUsersService extends AbstractSynchronizerService implement
public UserInfo buildUserInfo(ListUserResponse user) {
UserInfo userInfo = new UserInfo();
userInfo.setUsername(user.getUserid());//鐧诲綍鍚
userInfo.setNickName(user.getName());//鐢ㄦ埛鍚
userInfo.setDisplayName(user.getName());//鐢ㄦ埛鍚
userInfo.setFormattedName(user.getName());//鐢ㄦ埛鍚
userInfo.setUsername(user.getUserid());//閻ц缍嶉崥锟
userInfo.setNickName(user.getName());//閻€劍鍩涢崥锟
userInfo.setDisplayName(user.getName());//閻€劍鍩涢崥锟
userInfo.setFormattedName(user.getName());//閻€劍鍩涢崥锟
userInfo.setEmail(StringUtils.isBlank(user.getEmail())? user.getUserid() +"@maxkey.top":user.getEmail());
userInfo.setEntryDate(new DateTime(user.getHiredDate()).toString(DateTimeFormat.forPattern("yyyy-MM-dd")));
userInfo.setMobile(user.getMobile());//鎵嬫満
userInfo.setMobile(user.getMobile());//閹靛婧�
userInfo.setDepartmentId(user.getDeptIdList().get(0)+"");
userInfo.setJobTitle(user.getTitle());//鑱屽姟
userInfo.setWorkEmail(user.getOrgEmail());//宸ヤ綔閭欢
userInfo.setWorkPhoneNumber(user.getTelephone());//鍏徃鐢佃瘽
userInfo.setWorkOfficeName(user.getWorkPlace());//鍔炲叕瀹�
userInfo.setDescription(user.getRemark());//澶囨敞
userInfo.setEmployeeNumber(user.getJobNumber());
userInfo.setJobTitle(user.getTitle());//閼卞苯濮�
userInfo.setWorkEmail(user.getOrgEmail());//瀹搞儰缍旈柇顔绘
userInfo.setWorkPhoneNumber(user.getTelephone());//閸忣剙寰冮悽浣冪樈
userInfo.setWorkOfficeName(user.getWorkPlace());//閸旂偛鍙曠�癸拷
userInfo.setInstId(this.synchronizer.getInstId());
userInfo.setDescription("dingtalk "+user.getRemark());
return userInfo;
}
......@@ -115,9 +122,4 @@ public class DingtalkUsersService extends AbstractSynchronizerService implement
this.access_token = access_token;
}
public void setDingdingOrganizationService(DingtalkOrganizationService dingdingOrganizationService) {
this.dingdingOrganizationService = dingdingOrganizationService;
}
}
......@@ -17,6 +17,9 @@
package org.maxkey.synchronizer.workweixin;
import java.sql.Types;
import org.maxkey.constants.ConstsStatus;
import org.maxkey.entity.Organizations;
import org.maxkey.synchronizer.AbstractSynchronizerService;
import org.maxkey.synchronizer.ISynchronizerService;
......@@ -47,7 +50,13 @@ public class WorkweixinOrganizationService extends AbstractSynchronizerService i
for(WorkWeixinDepts dept : rsp.getDepartment()) {
_logger.info("dept : " + dept.getId()+" "+ dept.getName()+" "+ dept.getParentid());
Organizations org = buildOrganization(dept);
this.organizationsService.merge(org);
if(organizationsService.findOne("id = ? and instid = ?",
new Object[] { org.getId().toString(), org.getInstId() },
new int[] { Types.VARCHAR, Types.VARCHAR }) == null) {
organizationsService.insert(org);
}else {
organizationsService.update(org);
}
}
} catch (Exception e) {
......@@ -75,6 +84,8 @@ public class WorkweixinOrganizationService extends AbstractSynchronizerService i
org.setParentId(dept.getParentid()+"");
org.setSortIndex(dept.getOrder());
org.setInstId(this.synchronizer.getInstId());
org.setStatus(ConstsStatus.ACTIVE);
org.setDescription("WorkWeixin");
return org;
}
......
......@@ -56,7 +56,7 @@ public abstract class AbstractSynchronizerService {
}
for(Organizations org : orgsList) {
if(org.getId().equals(orgId)&&orgId.equals("1")) {
if(org.getId().equals(orgId) && orgId.equals("1")) {
rootOrganization = org;
rootOrganization.setNamePath("/"+rootOrganization.getName());
rootOrganization.setCodePath("/1");
......
Markdown is supported
0% .
You are about to add 0 people to the discussion. Proceed with caution.
先完成此消息的编辑!
想要评论请 注册