|
@@ -521,6 +521,7 @@ public class DingDingServiceImpl implements DingDingService {
|
|
.setRoleId(smanager.getId())
|
|
.setRoleId(smanager.getId())
|
|
.setRoleName(smanager.getRolename())
|
|
.setRoleName(smanager.getRolename())
|
|
.setDingdingUserid(authUserId)
|
|
.setDingdingUserid(authUserId)
|
|
|
|
+ .setName(authUserId)//新版,钉钉应用市场的用userId作name
|
|
.setColor(ColorUtil.randomColor())
|
|
.setColor(ColorUtil.randomColor())
|
|
.setCompanyId(company.getId());
|
|
.setCompanyId(company.getId());
|
|
|
|
|
|
@@ -813,11 +814,11 @@ public class DingDingServiceImpl implements DingDingService {
|
|
JSONArray deptArray = json.getJSONObject("auth_org_scopes").getJSONArray("authed_dept");
|
|
JSONArray deptArray = json.getJSONObject("auth_org_scopes").getJSONArray("authed_dept");
|
|
//如果授权的是全部公司部门,则递归获取子部门和人员
|
|
//如果授权的是全部公司部门,则递归获取子部门和人员
|
|
if (deptArray.size() == 1 && deptArray.getLong(0) == 1L) {
|
|
if (deptArray.size() == 1 && deptArray.getLong(0) == 1L) {
|
|
- getDepartmentList(roleId, roleName, dingding.getCompanyId(), dingding.getCorpid(), accessToken, 1L, addTempUserList);
|
|
|
|
|
|
+ getDepartmentList(roleId, roleName, dingding.getCompanyId(), dingding.getCorpid(), accessToken, 1L, addTempUserList, dingding);
|
|
} else {
|
|
} else {
|
|
for (int i=0;i<deptArray.size(); i++) {
|
|
for (int i=0;i<deptArray.size(); i++) {
|
|
long deptId = deptArray.getLongValue(i);
|
|
long deptId = deptArray.getLongValue(i);
|
|
- getDepartmentDetailAndUserList(roleId, roleName, dingding.getCompanyId(), dingding.getCorpid(), accessToken, deptId, addTempUserList);
|
|
|
|
|
|
+ getDepartmentDetailAndUserList(roleId, roleName, dingding.getCompanyId(), dingding.getCorpid(), accessToken, deptId, addTempUserList, dingding);
|
|
}
|
|
}
|
|
}
|
|
}
|
|
|
|
|
|
@@ -877,7 +878,6 @@ public class DingDingServiceImpl implements DingDingService {
|
|
if (dept.getDdDeptid() != null) {
|
|
if (dept.getDdDeptid() != null) {
|
|
Optional<DepartmentDingding> first = dingdingDeptList.stream().filter(ddpt -> ddpt.getDdDeptid().equals(dept.getDdDeptid())).findFirst();
|
|
Optional<DepartmentDingding> first = dingdingDeptList.stream().filter(ddpt -> ddpt.getDdDeptid().equals(dept.getDdDeptid())).findFirst();
|
|
if (first.isPresent()) {
|
|
if (first.isPresent()) {
|
|
-
|
|
|
|
boolean changed = false;
|
|
boolean changed = false;
|
|
DepartmentDingding departmentDingding = first.get();
|
|
DepartmentDingding departmentDingding = first.get();
|
|
if (departmentDingding.getDdParentid() == 1) {
|
|
if (departmentDingding.getDdParentid() == 1) {
|
|
@@ -898,7 +898,8 @@ public class DingDingServiceImpl implements DingDingService {
|
|
}
|
|
}
|
|
}
|
|
}
|
|
|
|
|
|
- if (!departmentDingding.getName().equals(dept.getDepartmentName())) {
|
|
|
|
|
|
+ //只有明文的才需要处理名称变化
|
|
|
|
+ if (dingding.getContactNeedTranslate() == 0 && !departmentDingding.getName().equals(dept.getDepartmentName())) {
|
|
dept.setDepartmentName(departmentDingding.getName());
|
|
dept.setDepartmentName(departmentDingding.getName());
|
|
changed = true;
|
|
changed = true;
|
|
}
|
|
}
|
|
@@ -957,11 +958,13 @@ public class DingDingServiceImpl implements DingDingService {
|
|
User upUser = new User();
|
|
User upUser = new User();
|
|
upUser.setId(oldUser.getId());
|
|
upUser.setId(oldUser.getId());
|
|
boolean changed = false;
|
|
boolean changed = false;
|
|
- if (oldUser.getName() == null || !oldUser.getName().equals(duser.getName())) {
|
|
|
|
- upUser.setName(duser.getName());
|
|
|
|
- System.out.println("更新用户姓名==" + oldUser.getName());
|
|
|
|
- changed = true;
|
|
|
|
- }
|
|
|
|
|
|
+ //暂时不更新姓名,避免出现老钉钉用户姓名被冲掉的情况
|
|
|
|
+ //仅针对老用户,不需要转译的情况下,才可能出现姓名变更的情况
|
|
|
|
+// if (dingding.getContactNeedTranslate() == 0 && duser.getName() != null && (oldUser.getName() == null || !oldUser.getName().equals(duser.getName()))) {
|
|
|
|
+// upUser.setName(duser.getName());
|
|
|
|
+// System.out.println("更新用户姓名==userId==" + oldUser.getId() + ", oldName="+ oldUser.getName()+", newName="+duser.getName());
|
|
|
|
+// changed = true;
|
|
|
|
+// }
|
|
//可能需要更新工号
|
|
//可能需要更新工号
|
|
if (!StringUtils.isEmpty(duser.getJobNumber()) && (oldUser.getJobNumber() == null || !oldUser.getJobNumber().equals(duser.getJobNumber()))) {
|
|
if (!StringUtils.isEmpty(duser.getJobNumber()) && (oldUser.getJobNumber() == null || !oldUser.getJobNumber().equals(duser.getJobNumber()))) {
|
|
upUser.setJobNumber(duser.getJobNumber());
|
|
upUser.setJobNumber(duser.getJobNumber());
|
|
@@ -1503,7 +1506,7 @@ public class DingDingServiceImpl implements DingDingService {
|
|
}
|
|
}
|
|
|
|
|
|
//获取部门详情和部门下的人员
|
|
//获取部门详情和部门下的人员
|
|
- public void getDepartmentDetailAndUserList(int roleId, String roleName, Integer companyId, String corpid, String accessToken, long deptId, List<TempDuser> addTempUserList) {
|
|
|
|
|
|
+ public void getDepartmentDetailAndUserList(int roleId, String roleName, Integer companyId, String corpid, String accessToken, long deptId, List<TempDuser> addTempUserList, CompanyDingding companyDingding) {
|
|
try {
|
|
try {
|
|
DingTalkClient client = new DefaultDingTalkClient("https://oapi.dingtalk.com/topapi/v2/department/get");
|
|
DingTalkClient client = new DefaultDingTalkClient("https://oapi.dingtalk.com/topapi/v2/department/get");
|
|
OapiV2DepartmentGetRequest req = new OapiV2DepartmentGetRequest();
|
|
OapiV2DepartmentGetRequest req = new OapiV2DepartmentGetRequest();
|
|
@@ -1516,12 +1519,13 @@ public class DingDingServiceImpl implements DingDingService {
|
|
DepartmentDingding departmentDingding = new DepartmentDingding();
|
|
DepartmentDingding departmentDingding = new DepartmentDingding();
|
|
departmentDingding.setCorpid(corpid);
|
|
departmentDingding.setCorpid(corpid);
|
|
departmentDingding.setDdDeptid(dept.getInteger("dept_id"));
|
|
departmentDingding.setDdDeptid(dept.getInteger("dept_id"));
|
|
- departmentDingding.setName(dept.getString("name"));
|
|
|
|
|
|
+ if (companyDingding.getContactNeedTranslate() == 1) {
|
|
|
|
+ departmentDingding.setName(dept.getString("dept_id"));
|
|
|
|
+ } else {
|
|
|
|
+ departmentDingding.setName(dept.getString("name"));
|
|
|
|
+ }
|
|
departmentDingding.setDdParentid(dept.getInteger("parent_id"));
|
|
departmentDingding.setDdParentid(dept.getInteger("parent_id"));
|
|
Department department = new Department();
|
|
Department department = new Department();
|
|
- if (departmentDingding.getDdDeptid() == 661842181) {
|
|
|
|
- System.out.println("=========zfind 661842181"+departmentDingding.getName());
|
|
|
|
- }
|
|
|
|
department.setCompanyId(companyId);
|
|
department.setCompanyId(companyId);
|
|
//检查,根部门是公司名称,不需要创建部门
|
|
//检查,根部门是公司名称,不需要创建部门
|
|
if (departmentDingding.getDdDeptid() != 1) {
|
|
if (departmentDingding.getDdDeptid() != 1) {
|
|
@@ -1536,7 +1540,7 @@ public class DingDingServiceImpl implements DingDingService {
|
|
departmentDingding.setId(old.getId());
|
|
departmentDingding.setId(old.getId());
|
|
//检查名称是否发生变化
|
|
//检查名称是否发生变化
|
|
System.out.println(departmentDingding.getName()+" -- 已存在:"+departmentDingding.getDdDeptid());
|
|
System.out.println(departmentDingding.getName()+" -- 已存在:"+departmentDingding.getDdDeptid());
|
|
- if (!old.getName().equals(departmentDingding.getName()) || !old.getDdParentid().equals(departmentDingding.getDdParentid())) {
|
|
|
|
|
|
+ if (companyDingding.getContactNeedTranslate() == 0 && (!old.getName().equals(departmentDingding.getName()) || !old.getDdParentid().equals(departmentDingding.getDdParentid()))) {
|
|
departmentDingdingMapper.updateById(departmentDingding);
|
|
departmentDingdingMapper.updateById(departmentDingding);
|
|
System.out.println("更新该部门");
|
|
System.out.println("更新该部门");
|
|
}
|
|
}
|
|
@@ -1549,7 +1553,7 @@ public class DingDingServiceImpl implements DingDingService {
|
|
//获取该部门下的人员, 如果是根部门,不会创建,人员的部门id会使用数据库默认的0
|
|
//获取该部门下的人员, 如果是根部门,不会创建,人员的部门id会使用数据库默认的0
|
|
getDeptUserIdList(corpid, deptId, accessToken, addTempUserList);
|
|
getDeptUserIdList(corpid, deptId, accessToken, addTempUserList);
|
|
//获取子部门
|
|
//获取子部门
|
|
- getDepartmentList(roleId, roleName, companyId, corpid, accessToken, departmentDingding.getDdDeptid(), addTempUserList);
|
|
|
|
|
|
+ getDepartmentList(roleId, roleName, companyId, corpid, accessToken, departmentDingding.getDdDeptid(), addTempUserList, companyDingding);
|
|
}
|
|
}
|
|
} catch (ApiException e) {
|
|
} catch (ApiException e) {
|
|
e.printStackTrace();
|
|
e.printStackTrace();
|
|
@@ -1557,7 +1561,7 @@ public class DingDingServiceImpl implements DingDingService {
|
|
}
|
|
}
|
|
|
|
|
|
//获取该部门下的子部门列表,递归下一级子部门
|
|
//获取该部门下的子部门列表,递归下一级子部门
|
|
- public String getDepartmentList(int roleId, String roleName, Integer companyId, String corpid, String access_token, long parentDeptId, List<TempDuser> addTempUserList) throws ApiException {
|
|
|
|
|
|
+ public String getDepartmentList(int roleId, String roleName, Integer companyId, String corpid, String access_token, long parentDeptId, List<TempDuser> addTempUserList, CompanyDingding companyDingding) throws ApiException {
|
|
DingTalkClient client = new DefaultDingTalkClient("https://oapi.dingtalk.com/topapi/v2/department/listsub");
|
|
DingTalkClient client = new DefaultDingTalkClient("https://oapi.dingtalk.com/topapi/v2/department/listsub");
|
|
OapiV2DepartmentListsubRequest req = new OapiV2DepartmentListsubRequest();
|
|
OapiV2DepartmentListsubRequest req = new OapiV2DepartmentListsubRequest();
|
|
req.setDeptId(parentDeptId);
|
|
req.setDeptId(parentDeptId);
|
|
@@ -1573,7 +1577,12 @@ public class DingDingServiceImpl implements DingDingService {
|
|
DepartmentDingding departmentDingding = new DepartmentDingding();
|
|
DepartmentDingding departmentDingding = new DepartmentDingding();
|
|
departmentDingding.setCorpid(corpid);
|
|
departmentDingding.setCorpid(corpid);
|
|
departmentDingding.setDdDeptid(dept.getInteger("dept_id"));
|
|
departmentDingding.setDdDeptid(dept.getInteger("dept_id"));
|
|
- departmentDingding.setName(dept.getString("name"));
|
|
|
|
|
|
+ //TODO:对于钉钉市场的用户,需要通讯录加密的,没有返回部门名称,用部门id替代
|
|
|
|
+ if (companyDingding.getContactNeedTranslate() == 1) {
|
|
|
|
+ departmentDingding.setName(dept.getString("dept_id"));
|
|
|
|
+ } else {
|
|
|
|
+ departmentDingding.setName(dept.getString("name"));
|
|
|
|
+ }
|
|
departmentDingding.setDdParentid(dept.getInteger("parent_id"));
|
|
departmentDingding.setDdParentid(dept.getInteger("parent_id"));
|
|
if (departmentDingding.getDdDeptid() == 661842181) {
|
|
if (departmentDingding.getDdDeptid() == 661842181) {
|
|
System.out.println("=========zfind 661842181"+departmentDingding.getName());
|
|
System.out.println("=========zfind 661842181"+departmentDingding.getName());
|
|
@@ -1588,7 +1597,8 @@ public class DingDingServiceImpl implements DingDingService {
|
|
departmentDingding.setId(old.getId());
|
|
departmentDingding.setId(old.getId());
|
|
//检查名称是否发生变化
|
|
//检查名称是否发生变化
|
|
System.out.println(departmentDingding.getName()+" -- 已存在:"+departmentDingding.getDdDeptid());
|
|
System.out.println(departmentDingding.getName()+" -- 已存在:"+departmentDingding.getDdDeptid());
|
|
- if (!old.getName().equals(departmentDingding.getName()) || !old.getDdParentid().equals(departmentDingding.getDdParentid())) {
|
|
|
|
|
|
+ //只有老用户,不需要转译的情况下才可能更新部门名称
|
|
|
|
+ if (companyDingding.getContactNeedTranslate() == 0 && (!old.getName().equals(departmentDingding.getName()) || !old.getDdParentid().equals(departmentDingding.getDdParentid()))) {
|
|
departmentDingdingMapper.updateById(departmentDingding);
|
|
departmentDingdingMapper.updateById(departmentDingding);
|
|
System.out.println("更新该部门");
|
|
System.out.println("更新该部门");
|
|
}
|
|
}
|
|
@@ -1597,7 +1607,7 @@ public class DingDingServiceImpl implements DingDingService {
|
|
}
|
|
}
|
|
}
|
|
}
|
|
//获取子部门的数据
|
|
//获取子部门的数据
|
|
- getDepartmentList(roleId, roleName, companyId, corpid, access_token, departmentDingding.getDdDeptid(), addTempUserList);
|
|
|
|
|
|
+ getDepartmentList(roleId, roleName, companyId, corpid, access_token, departmentDingding.getDdDeptid(), addTempUserList, companyDingding);
|
|
}
|
|
}
|
|
//获取部门下的人员列表
|
|
//获取部门下的人员列表
|
|
getDeptUserIdList(corpid, parentDeptId, access_token, addTempUserList);
|
|
getDeptUserIdList(corpid, parentDeptId, access_token, addTempUserList);
|
|
@@ -1642,7 +1652,7 @@ public class DingDingServiceImpl implements DingDingService {
|
|
.setRoleId(defaultRole.getId())
|
|
.setRoleId(defaultRole.getId())
|
|
.setRoleName(defaultRole.getRolename())
|
|
.setRoleName(defaultRole.getRolename())
|
|
.setCompanyId(dingding.getCompanyId())
|
|
.setCompanyId(dingding.getCompanyId())
|
|
- .setName(userJson.getString("name"))
|
|
|
|
|
|
+ .setName(dingding.getContactNeedTranslate() == 0?userJson.getString("name"):dingdingUserid)
|
|
.setDingdingUserid(dingdingUserid)
|
|
.setDingdingUserid(dingdingUserid)
|
|
.setDingdingUnionid(userJson.getString("unionid"))
|
|
.setDingdingUnionid(userJson.getString("unionid"))
|
|
.setColor(ColorUtil.randomColor());
|
|
.setColor(ColorUtil.randomColor());
|
|
@@ -1710,7 +1720,12 @@ public class DingDingServiceImpl implements DingDingService {
|
|
if (!addTempUserList.stream().anyMatch(add->add.getDingdingUserid().equals(dingdingUserid))) {
|
|
if (!addTempUserList.stream().anyMatch(add->add.getDingdingUserid().equals(dingdingUserid))) {
|
|
TempDuser duser = new TempDuser();
|
|
TempDuser duser = new TempDuser();
|
|
duser.setDingdingUserid(dingdingUserid);
|
|
duser.setDingdingUserid(dingdingUserid);
|
|
- duser.setName(userJson.getString("name"));
|
|
|
|
|
|
+ //用userId作为name,方便系统内部处理
|
|
|
|
+ if (userJson.getString("name") == null) {
|
|
|
|
+ duser.setName(dingdingUserid);
|
|
|
|
+ } else {
|
|
|
|
+ duser.setName(userJson.getString("name"));
|
|
|
|
+ }
|
|
duser.setDdDeptid(ddDeptId);
|
|
duser.setDdDeptid(ddDeptId);
|
|
duser.setCorpid(corpid);
|
|
duser.setCorpid(corpid);
|
|
duser.setJobNumber(userJson.getString("job_number"));
|
|
duser.setJobNumber(userJson.getString("job_number"));
|