|
@@ -30,6 +30,7 @@ import org.springframework.transaction.annotation.Transactional;
|
|
|
|
|
|
import javax.annotation.Resource;
|
|
|
import javax.servlet.http.HttpServletRequest;
|
|
|
+import java.math.BigInteger;
|
|
|
import java.math.RoundingMode;
|
|
|
import java.text.DecimalFormat;
|
|
|
import java.text.SimpleDateFormat;
|
|
@@ -59,6 +60,8 @@ public class DingDingServiceImpl implements DingDingService {
|
|
|
|
|
|
@Resource
|
|
|
TempDuserMapper tempDuserMapper;
|
|
|
+ @Resource
|
|
|
+ TempDuserService tempDuserService;
|
|
|
|
|
|
public static String PRE_AUTH_CODE = null;
|
|
|
public static long expireTime = 0L;
|
|
@@ -603,25 +606,35 @@ public class DingDingServiceImpl implements DingDingService {
|
|
|
System.out.println("获取通讯录授权范围:"+rsp.getBody());
|
|
|
JSONObject json = JSONObject.parseObject(rsp.getBody());
|
|
|
if (json.getInteger("errcode") == 0) {
|
|
|
+ //删除临时库中的人员
|
|
|
+ tempDuserMapper.delete(new QueryWrapper<TempDuser>().eq("corpid", dingding.getCorpid()));
|
|
|
+ List<TempDuser> addTempUserList = new ArrayList<>();
|
|
|
JSONArray deptArray = json.getJSONObject("auth_org_scopes").getJSONArray("authed_dept");
|
|
|
//如果授权的是全部公司部门,则递归获取子部门和人员
|
|
|
if (deptArray.size() == 1 && deptArray.getLong(0) == 1L) {
|
|
|
- getDepartmentList(roleId, roleName, dingding.getCompanyId(), dingding.getCorpid(), accessToken, 1L, null);
|
|
|
+ getDepartmentList(roleId, roleName, dingding.getCompanyId(), dingding.getCorpid(), accessToken, 1L, addTempUserList);
|
|
|
} else {
|
|
|
for (int i=0;i<deptArray.size(); i++) {
|
|
|
long deptId = deptArray.getLongValue(i);
|
|
|
- getDepartmentDetailAndUserList(roleId, roleName, dingding.getCompanyId(), dingding.getCorpid(), accessToken, deptId);
|
|
|
+ getDepartmentDetailAndUserList(roleId, roleName, dingding.getCompanyId(), dingding.getCorpid(), accessToken, deptId, addTempUserList);
|
|
|
}
|
|
|
}
|
|
|
|
|
|
-
|
|
|
//直接授权的人员,没有部门
|
|
|
JSONArray userArray = json.getJSONObject("auth_org_scopes").getJSONArray("authed_user");
|
|
|
for (int i=0;i<userArray.size(); i++) {
|
|
|
String userdingId = userArray.getString(i);
|
|
|
//获取人员详情
|
|
|
- getUserDetail(roleId, roleName, dingding.getCompanyId(), 0, userdingId, accessToken);
|
|
|
+ getUserDetail(dingding.getCorpid(), userdingId, accessToken, addTempUserList);
|
|
|
}
|
|
|
+ //存储到临时表
|
|
|
+ if (addTempUserList.size() > 0) {
|
|
|
+ tempDuserService.saveBatch(addTempUserList);
|
|
|
+ }
|
|
|
+ //同步部门数据
|
|
|
+ adjustDepartment(dingding);
|
|
|
+ //从temp表调整人员到user表
|
|
|
+ adjustUserFromTemp(dingding);
|
|
|
} else {
|
|
|
System.err.println("获取通讯录范围出错:" + json.toJSONString());
|
|
|
}
|
|
@@ -630,6 +643,138 @@ public class DingDingServiceImpl implements DingDingService {
|
|
|
}
|
|
|
}
|
|
|
|
|
|
+ //调整系统的部门表,与department_dingding同步
|
|
|
+ private void adjustDepartment(CompanyDingding dingding) {
|
|
|
+ //钉钉有的,系统没有的,要新增
|
|
|
+ List<Department> allDeptList = departmentMapper.selectList(new QueryWrapper<Department>().eq("company_id", dingding.getCompanyId()));
|
|
|
+ List<DepartmentDingding> dingdingDeptList = departmentDingdingMapper.selectList(new QueryWrapper<DepartmentDingding>().eq("corpid", dingding.getCorpid()));
|
|
|
+ List<Department> newDeptList = new ArrayList<>();
|
|
|
+ for (DepartmentDingding departmentDingding : dingdingDeptList) {
|
|
|
+ Optional<Department> first = allDeptList.stream().filter(old -> old.getDdDeptid() != null && old.getDdDeptid().equals(departmentDingding.getDdDeptid())).findFirst();
|
|
|
+ if (!first.isPresent()) {
|
|
|
+ //无匹配的,新增
|
|
|
+ Department newDept = new Department();
|
|
|
+ newDept.setDdDeptid(departmentDingding.getDdDeptid());
|
|
|
+ newDept.setDepartmentName(departmentDingding.getName());
|
|
|
+ newDept.setCompanyId(dingding.getCompanyId());
|
|
|
+ newDeptList.add(newDept);
|
|
|
+ }
|
|
|
+ }
|
|
|
+ if (newDeptList.size() > 0) {
|
|
|
+ departmentService.saveBatch(newDeptList);
|
|
|
+ System.out.println("批量保存后, departmentId=" +newDeptList.get(0).getDepartmentId());
|
|
|
+ //重新查一遍,这次没有新的部门了
|
|
|
+ int beforeSize = allDeptList.size();
|
|
|
+ allDeptList.addAll(newDeptList);
|
|
|
+ int afterSize = allDeptList.size();
|
|
|
+ System.out.println("变更部门前后:"+beforeSize+"--"+afterSize);
|
|
|
+ }
|
|
|
+
|
|
|
+ //调整部门的层级关系
|
|
|
+ List<Department> changeList = new ArrayList<>();
|
|
|
+ for (Department dept : allDeptList) {
|
|
|
+ if (dept.getDdDeptid() != null) {
|
|
|
+ Optional<DepartmentDingding> first = dingdingDeptList.stream().filter(ddpt -> ddpt.getDdDeptid().equals(dept.getDdDeptid())).findFirst();
|
|
|
+ if (first.isPresent()) {
|
|
|
+ boolean changed = false;
|
|
|
+ DepartmentDingding departmentDingding = first.get();
|
|
|
+ if (departmentDingding.getDdParentid() == 1) {
|
|
|
+ //在根部门
|
|
|
+ if (dept.getSuperiorId() != null) {
|
|
|
+ //强制设置为null
|
|
|
+ departmentMapper.updateNullSuperior(dept.getDepartmentId());
|
|
|
+ }
|
|
|
+ } else {
|
|
|
+ Optional<Department> parentDept = allDeptList.stream().filter(ex -> ex.getDdDeptid() != null && ex.getDdDeptid().equals(departmentDingding.getDdParentid())).findFirst();
|
|
|
+ if (parentDept.isPresent()) {
|
|
|
+ Integer parentDeptId = parentDept.get().getDepartmentId();
|
|
|
+ //父部门发生变化
|
|
|
+ if (!parentDeptId.equals(dept.getSuperiorId())) {
|
|
|
+ dept.setSuperiorId(parentDeptId);
|
|
|
+ changed = true;
|
|
|
+ }
|
|
|
+ }
|
|
|
+ }
|
|
|
+
|
|
|
+ if (!departmentDingding.getName().equals(dept.getDepartmentName())) {
|
|
|
+ dept.setDepartmentName(departmentDingding.getName());
|
|
|
+ changed = true;
|
|
|
+ }
|
|
|
+ if (changed) {
|
|
|
+ changeList.add(dept);
|
|
|
+ }
|
|
|
+ }
|
|
|
+ }
|
|
|
+ }
|
|
|
+ if (changeList.size() > 0) {
|
|
|
+ departmentService.updateBatchById(changeList);
|
|
|
+ }
|
|
|
+ }
|
|
|
+
|
|
|
+ private void adjustUserFromTemp(CompanyDingding dingding) {
|
|
|
+ SysRole defaultRole = null;
|
|
|
+ List<SysRole> droleList = sysRoleMapper.selectList(new QueryWrapper<SysRole>().eq("company_id", dingding.getCompanyId()).eq("is_default", 1));
|
|
|
+ if (droleList.size() > 0) {
|
|
|
+ defaultRole = droleList.get(0);
|
|
|
+ }
|
|
|
+ List<TempDuser> tempDuserList = tempDuserMapper.selectList(new QueryWrapper<TempDuser>().eq("corpid", dingding.getCorpid()));
|
|
|
+ List<User> oldUserList = userMapper.selectList(new QueryWrapper<User>().eq("company_id", dingding.getCompanyId()));
|
|
|
+ List<User> newUserList = new ArrayList<>();
|
|
|
+ List<User> updateUserList = new ArrayList<>();
|
|
|
+ List<Department> allDeptList = departmentMapper.selectList(new QueryWrapper<Department>().eq("company_id", dingding.getCompanyId()));
|
|
|
+ for (TempDuser duser : tempDuserList) {
|
|
|
+ Optional<User> findUser = oldUserList.stream().filter(user -> user.getDingdingUserid().equals(duser.getDingdingUserid())).findFirst();
|
|
|
+ if (!findUser.isPresent()) {
|
|
|
+ //不存在的新用户
|
|
|
+ User user = new User();
|
|
|
+ user.setId(SnowFlake.nextId()+"")
|
|
|
+ .setRoleId(defaultRole.getId())
|
|
|
+ .setRoleName(defaultRole.getRolename())
|
|
|
+ .setCompanyId(dingding.getCompanyId())
|
|
|
+ .setName(duser.getName())
|
|
|
+ .setDingdingUserid(duser.getDingdingUserid())
|
|
|
+ .setDingdingUnionid(duser.getDingdingUnionid())
|
|
|
+ .setJobNumber(duser.getJobNumber())
|
|
|
+ .setColor(ColorUtil.randomColor());
|
|
|
+ //设置部门
|
|
|
+ Optional<Department> first = allDeptList.stream().filter(item -> item.getDdDeptid() != null && item.getDdDeptid().equals(duser.getDdDeptid())).findFirst();
|
|
|
+ if (first.isPresent()) {
|
|
|
+ Department department = first.get();
|
|
|
+ user.setDepartmentId(department.getDepartmentId());
|
|
|
+ user.setDepartmentCascade(convertDepartmentIdToCascade(department.getDepartmentId()));
|
|
|
+ newUserList.add(user);
|
|
|
+ }
|
|
|
+ } else {
|
|
|
+ //已存在,对比是否需要更新
|
|
|
+ //可能需要更新姓名
|
|
|
+ User oldUser = findUser.get();
|
|
|
+ User upUser = new User();
|
|
|
+ upUser.setId(oldUser.getId());
|
|
|
+ boolean changed = false;
|
|
|
+ if (oldUser.getName() == null || !oldUser.getName().equals(duser.getName())) {
|
|
|
+ upUser.setName(duser.getName());
|
|
|
+ System.out.println("更新用户姓名==" + oldUser.getName());
|
|
|
+ changed = true;
|
|
|
+ }
|
|
|
+ //可能需要更新工号
|
|
|
+ if (!StringUtils.isEmpty(duser.getJobNumber()) && (oldUser.getJobNumber() == null || !oldUser.getJobNumber().equals(duser.getJobNumber()))) {
|
|
|
+ upUser.setJobNumber(duser.getJobNumber());
|
|
|
+ changed = true;
|
|
|
+ }
|
|
|
+ if (changed) {
|
|
|
+ updateUserList.add(oldUser);
|
|
|
+ }
|
|
|
+ //TODO: 所属部门的变更,需要用户自行确认
|
|
|
+ }
|
|
|
+ }
|
|
|
+ if (newUserList.size() > 0) {
|
|
|
+ userService.saveBatch(newUserList);
|
|
|
+ }
|
|
|
+ if (updateUserList.size() > 0) {
|
|
|
+ userService.updateBatchById(updateUserList);
|
|
|
+ }
|
|
|
+ }
|
|
|
+
|
|
|
// private void getUserDetailInfo(User user, String accessToken) throws ApiException {
|
|
|
// DingTalkClient client = new DefaultDingTalkClient("https://oapi.dingtalk.com/topapi/v2/user/get");
|
|
|
// OapiV2UserGetRequest req = new OapiV2UserGetRequest();
|
|
@@ -1143,13 +1288,13 @@ public class DingDingServiceImpl implements DingDingService {
|
|
|
}
|
|
|
|
|
|
//获取部门详情和部门下的人员
|
|
|
- public void getDepartmentDetailAndUserList(int roleId, String roleName, Integer companyId, String corpid, String accessToken, long deptId) {
|
|
|
+ public void getDepartmentDetailAndUserList(int roleId, String roleName, Integer companyId, String corpid, String accessToken, long deptId, List<TempDuser> addTempUserList) {
|
|
|
try {
|
|
|
DingTalkClient client = new DefaultDingTalkClient("https://oapi.dingtalk.com/topapi/v2/department/get");
|
|
|
OapiV2DepartmentGetRequest req = new OapiV2DepartmentGetRequest();
|
|
|
req.setDeptId(deptId);
|
|
|
OapiV2DepartmentGetResponse rsp = client.execute(req, accessToken);
|
|
|
-// System.out.println("获取部门返回="+rsp.getBody());
|
|
|
+ System.out.println("获取部门返回="+rsp.getBody());
|
|
|
JSONObject json = JSONObject.parseObject(rsp.getBody());
|
|
|
if (json.getInteger("errcode") == 0) {
|
|
|
JSONObject dept = json.getJSONObject("result");
|
|
@@ -1165,45 +1310,37 @@ public class DingDingServiceImpl implements DingDingService {
|
|
|
if (departmentDingding.getDdDeptid() != 1) {
|
|
|
department.setDepartmentName(dept.getString("name"));
|
|
|
synchronized (deptLock) {
|
|
|
- int cnt = departmentDingdingMapper.selectCount(new QueryWrapper<DepartmentDingding>()
|
|
|
+ List<DepartmentDingding> departmentDingdings = departmentDingdingMapper.selectList(new QueryWrapper<DepartmentDingding>()
|
|
|
.eq("corpid", corpid)
|
|
|
.eq("dd_deptid", departmentDingding.getDdDeptid()));
|
|
|
//检查该部门是否已经创建,但是重名的可能是多个父部门下的同名子部门,所以不能用
|
|
|
- if (cnt > 0) {
|
|
|
- List<DepartmentDingding> departmentDingdings = departmentDingdingMapper.selectList(new QueryWrapper<DepartmentDingding>()
|
|
|
- .eq("corpid", corpid)
|
|
|
- .eq("dd_deptid", departmentDingding.getDdDeptid()));
|
|
|
- DepartmentDingding ddd = departmentDingdings.get(0);
|
|
|
- Integer sysDeptid = ddd.getSysDeptid();
|
|
|
- Department oldDept = departmentMapper.selectById(sysDeptid);
|
|
|
- //已经被删除了,忽略
|
|
|
- if (oldDept != null) {
|
|
|
- department = oldDept;
|
|
|
-// departmentMapper.insert(department);
|
|
|
-// //更新一下之前的记录,设置刚生成的这个部门id
|
|
|
-// ddd.setSysDeptid(department.getDepartmentId());
|
|
|
-// departmentDingdingMapper.updateById(ddd);
|
|
|
+ if (departmentDingdings.size() > 0) {
|
|
|
+ DepartmentDingding old = departmentDingdings.get(0);
|
|
|
+ departmentDingding.setId(old.getId());
|
|
|
+ //检查名称是否发生变化
|
|
|
+ System.out.println(departmentDingding.getName()+" -- 已存在:"+departmentDingding.getDdDeptid());
|
|
|
+ if (!old.getName().equals(departmentDingding.getName()) || !old.getDdParentid().equals(departmentDingding.getDdParentid())) {
|
|
|
+ departmentDingdingMapper.updateById(departmentDingding);
|
|
|
+ System.out.println("更新该部门");
|
|
|
}
|
|
|
} else {
|
|
|
- departmentMapper.insert(department);
|
|
|
- departmentDingding.setSysDeptid(department.getDepartmentId());
|
|
|
departmentDingdingMapper.insert(departmentDingding);
|
|
|
}
|
|
|
}
|
|
|
}
|
|
|
|
|
|
//获取该部门下的人员, 如果是根部门,不会创建,人员的部门id会使用数据库默认的0
|
|
|
- getDeptUserIdList(roleId, roleName, companyId, deptId, department.getDepartmentId(), accessToken);
|
|
|
+ getDeptUserIdList(corpid, deptId, accessToken, addTempUserList);
|
|
|
//获取子部门
|
|
|
- getDepartmentList(roleId, roleName, companyId, corpid, accessToken, departmentDingding.getDdDeptid(), department.getDepartmentId());
|
|
|
+ getDepartmentList(roleId, roleName, companyId, corpid, accessToken, departmentDingding.getDdDeptid(), addTempUserList);
|
|
|
}
|
|
|
} catch (ApiException e) {
|
|
|
e.printStackTrace();
|
|
|
}
|
|
|
}
|
|
|
|
|
|
- //获取该部门下的人员和子部门列表,递归下一级子部门
|
|
|
- public String getDepartmentList(int roleId, String roleName, Integer companyId, String corpid, String access_token, long parentDeptId, Integer parentSysDeptId) throws ApiException {
|
|
|
+ //获取该部门下的子部门列表,递归下一级子部门
|
|
|
+ public String getDepartmentList(int roleId, String roleName, Integer companyId, String corpid, String access_token, long parentDeptId, List<TempDuser> addTempUserList) throws ApiException {
|
|
|
DingTalkClient client = new DefaultDingTalkClient("https://oapi.dingtalk.com/topapi/v2/department/listsub");
|
|
|
OapiV2DepartmentListsubRequest req = new OapiV2DepartmentListsubRequest();
|
|
|
req.setDeptId(parentDeptId);
|
|
@@ -1221,27 +1358,30 @@ public class DingDingServiceImpl implements DingDingService {
|
|
|
departmentDingding.setDdDeptid(dept.getInteger("dept_id"));
|
|
|
departmentDingding.setName(dept.getString("name"));
|
|
|
departmentDingding.setDdParentid(dept.getInteger("parent_id"));
|
|
|
- Department department = new Department();
|
|
|
- department.setDepartmentName(dept.getString("name"));
|
|
|
- department.setCompanyId(companyId);
|
|
|
- department.setSuperiorId(parentSysDeptId);
|
|
|
|
|
|
synchronized (deptLock) {
|
|
|
- //检查该部门是否已经创建,以钉钉deptid为唯一身份, 加上同步锁,防止递归请求的子部门和一级请求是同一个部门
|
|
|
- int cnt = departmentDingdingMapper.selectCount(new QueryWrapper<DepartmentDingding>()
|
|
|
+ List<DepartmentDingding> departmentDingdings = departmentDingdingMapper.selectList(new QueryWrapper<DepartmentDingding>()
|
|
|
.eq("corpid", corpid)
|
|
|
.eq("dd_deptid", departmentDingding.getDdDeptid()));
|
|
|
- if (cnt == 0) {
|
|
|
- departmentMapper.insert(department);
|
|
|
- departmentDingding.setSysDeptid(department.getDepartmentId());
|
|
|
+ //检查该部门是否已经创建,但是重名的可能是多个父部门下的同名子部门,所以不能用
|
|
|
+ if (departmentDingdings.size() > 0) {
|
|
|
+ DepartmentDingding old = departmentDingdings.get(0);
|
|
|
+ departmentDingding.setId(old.getId());
|
|
|
+ //检查名称是否发生变化
|
|
|
+ System.out.println(departmentDingding.getName()+" -- 已存在:"+departmentDingding.getDdDeptid());
|
|
|
+ if (!old.getName().equals(departmentDingding.getName()) || !old.getDdParentid().equals(departmentDingding.getDdParentid())) {
|
|
|
+ departmentDingdingMapper.updateById(departmentDingding);
|
|
|
+ System.out.println("更新该部门");
|
|
|
+ }
|
|
|
+ } else {
|
|
|
departmentDingdingMapper.insert(departmentDingding);
|
|
|
}
|
|
|
}
|
|
|
//获取子部门的数据
|
|
|
- getDepartmentList(roleId, roleName, companyId, corpid, access_token, departmentDingding.getDdDeptid(), department.getDepartmentId());
|
|
|
+ getDepartmentList(roleId, roleName, companyId, corpid, access_token, departmentDingding.getDdDeptid(), addTempUserList);
|
|
|
}
|
|
|
//获取部门下的人员列表
|
|
|
- getDeptUserIdList(roleId, roleName, companyId, parentDeptId, parentSysDeptId, access_token);
|
|
|
+ getDeptUserIdList(corpid, parentDeptId, access_token, addTempUserList);
|
|
|
} else {
|
|
|
return json.toJSONString();
|
|
|
}
|
|
@@ -1249,7 +1389,7 @@ public class DingDingServiceImpl implements DingDingService {
|
|
|
}
|
|
|
|
|
|
//获取部门下的人员ids
|
|
|
- public void getDeptUserIdList(int roleId, String roleName, int companyId, long ddDeptId,Integer sysDeptId, String access_token) throws ApiException {
|
|
|
+ public void getDeptUserIdList(String corpid, long ddDeptId, String access_token, List<TempDuser> addTempUserList) throws ApiException {
|
|
|
DingTalkClient client = new DefaultDingTalkClient("https://oapi.dingtalk.com/topapi/user/listid");
|
|
|
OapiUserListidRequest req = new OapiUserListidRequest();
|
|
|
req.setDeptId(ddDeptId);
|
|
@@ -1260,7 +1400,7 @@ public class DingDingServiceImpl implements DingDingService {
|
|
|
JSONArray jsonArray = resp.getJSONObject("result").getJSONArray("userid_list");
|
|
|
for (int i=0;i<jsonArray.size(); i++) {
|
|
|
String dduid = jsonArray.getString(i);
|
|
|
- getUserDetail(roleId, roleName, companyId, sysDeptId, dduid, access_token);
|
|
|
+ getUserDetail(corpid, dduid, access_token, addTempUserList);
|
|
|
}
|
|
|
}
|
|
|
}
|
|
@@ -1332,8 +1472,10 @@ public class DingDingServiceImpl implements DingDingService {
|
|
|
}
|
|
|
|
|
|
|
|
|
+
|
|
|
+
|
|
|
//获取人员详情
|
|
|
- private void getUserDetail(int roleId, String roleName, Integer companyId, Integer departmentId, String dingdingUserid, String access_token) throws ApiException {
|
|
|
+ private void getUserDetail(String corpid,String dingdingUserid, String access_token, List<TempDuser> addTempUserList) throws ApiException {
|
|
|
DingTalkClient client = new DefaultDingTalkClient("https://oapi.dingtalk.com/topapi/v2/user/get");
|
|
|
OapiV2UserGetRequest req = new OapiV2UserGetRequest();
|
|
|
req.setUserid(dingdingUserid);
|
|
@@ -1343,74 +1485,18 @@ public class DingDingServiceImpl implements DingDingService {
|
|
|
JSONObject resp = JSONObject.parseObject(rsp.getBody());
|
|
|
if (resp.getInteger("errcode") == 0) {
|
|
|
JSONObject userJson = resp.getJSONObject("result");
|
|
|
- User user = new User();
|
|
|
- user.setId(SnowFlake.nextId()+"")
|
|
|
- .setRoleId(roleId)
|
|
|
- .setRoleName(roleName)
|
|
|
- .setCompanyId(companyId)
|
|
|
- .setDepartmentId(departmentId)
|
|
|
- .setName(userJson.getString("name"))
|
|
|
- .setDingdingUserid(dingdingUserid)
|
|
|
- .setDingdingUnionid(userJson.getString("unionid"))
|
|
|
- .setJobNumber(userJson.getString("job_number"))
|
|
|
- .setColor(ColorUtil.randomColor());
|
|
|
-
|
|
|
- if (departmentId != null) {
|
|
|
- user.setDepartmentCascade(convertDepartmentIdToCascade(departmentId));
|
|
|
- }
|
|
|
+ JSONArray deptIdList = userJson.getJSONArray("dept_id_list");
|
|
|
+ int ddDeptId = getMaxDeptId(deptIdList);
|
|
|
//检查用户是否已经存在
|
|
|
- synchronized (userLock) {
|
|
|
- if (isDev) {
|
|
|
- long existsCount = tempDuserMapper.selectCount(new QueryWrapper<TempDuser>().eq("dingding_userid", dingdingUserid));
|
|
|
- if (existsCount == 0) {
|
|
|
- TempDuser duser = new TempDuser();
|
|
|
- duser.setDingdingUserid(user.getDingdingUserid());
|
|
|
- duser.setName(user.getName());
|
|
|
- tempDuserMapper.insert(duser);
|
|
|
- }
|
|
|
- }
|
|
|
-
|
|
|
- List<User> oldList = userMapper.selectList(new QueryWrapper<User>().eq("dingding_userid", dingdingUserid).eq("company_id", companyId));
|
|
|
- if (oldList.size() == 0) {
|
|
|
-// Integer employeeCnt = userMapper.selectCount(new QueryWrapper<User>().eq("company_id", companyId).eq("is_active",1));
|
|
|
-// Company company = companyMapper.selectOne(new QueryWrapper<Company>().eq("id", companyId));
|
|
|
-// ContactSyncLog contactSyncLog = new ContactSyncLog();
|
|
|
-// contactSyncLog.setCompanyId(companyId);
|
|
|
-// if (employeeCnt + 1 > company.getStaffCountMax()){
|
|
|
-// contactSyncLog.setResult(0);
|
|
|
-// //contactSyncLog.setMsg("公司人员已达上限,请联系客服提高人数上限。");
|
|
|
-// contactSyncLog.setMsg(MessageUtils.message("wx.employeeFull"));
|
|
|
-// contactSyncLogMapper.insert(contactSyncLog);
|
|
|
-// }else {
|
|
|
-// System.out.println("新增钉钉用户==" + user.getName());
|
|
|
-// userMapper.insert(user);
|
|
|
-// contactSyncLog.setResult(1);
|
|
|
-// //contactSyncLog.setMsg("同步成功");
|
|
|
-// contactSyncLog.setMsg(MessageUtils.message("wx.synSuccess"));
|
|
|
-// contactSyncLogMapper.insert(contactSyncLog);
|
|
|
-// }
|
|
|
- System.out.println("新增钉钉用户==" + user.getName());
|
|
|
- userMapper.insert(user);
|
|
|
- } else {
|
|
|
- //可能需要更新姓名
|
|
|
- User oldUser = oldList.get(0);
|
|
|
- if (oldUser.getName() == null || !oldUser.getName().equals(userJson.getString("name"))) {
|
|
|
- oldUser.setName(userJson.getString("name"));
|
|
|
- oldUser.setDingdingUnionid(userJson.getString("unionid"));
|
|
|
- userMapper.updateById(oldUser);
|
|
|
- System.out.println("更新用户姓名==" + oldUser.getName());
|
|
|
- }
|
|
|
- //可能需要更新工号
|
|
|
- if (!StringUtils.isEmpty(userJson.getString("job_number")) && (oldUser.getJobNumber() == null || !oldUser.getJobNumber().equals(userJson.getString("job_number")))) {
|
|
|
- oldUser.setJobNumber(userJson.getString("job_number"));
|
|
|
- userMapper.updateById(oldUser);
|
|
|
- }
|
|
|
-
|
|
|
-
|
|
|
- if (oldList.size() > 1) {
|
|
|
- System.err.println("Exception 存在重复用户 dingdingUserId="+oldUser.getDingdingUserid()+", name="+oldUser.getName()+", companyId"+oldUser.getCompanyId());
|
|
|
- }
|
|
|
- }
|
|
|
+ if (!addTempUserList.stream().anyMatch(add->add.getDingdingUserid().equals(dingdingUserid))) {
|
|
|
+ TempDuser duser = new TempDuser();
|
|
|
+ duser.setDingdingUserid(dingdingUserid);
|
|
|
+ duser.setName(userJson.getString("name"));
|
|
|
+ duser.setDdDeptid(ddDeptId);
|
|
|
+ duser.setCorpid(corpid);
|
|
|
+ duser.setJobNumber(userJson.getString("job_number"));
|
|
|
+ duser.setDingdingUnionid(userJson.getString("unionid"));
|
|
|
+ addTempUserList.add(duser);
|
|
|
}
|
|
|
}
|
|
|
}
|
|
@@ -2254,4 +2340,13 @@ public class DingDingServiceImpl implements DingDingService {
|
|
|
int cnt = projectAuditorMapper.selectCount(new QueryWrapper<ProjectAuditor>().eq("auditor_id", userId));
|
|
|
return cnt>0;
|
|
|
}
|
|
|
+
|
|
|
+ private Integer getMaxDeptId(JSONArray array) {
|
|
|
+ int deptId = 0;
|
|
|
+ for (int i=0;i<array.size(); i++) {
|
|
|
+ int bigInteger = array.getInteger(i);
|
|
|
+ if (deptId < bigInteger) deptId = bigInteger;
|
|
|
+ }
|
|
|
+ return deptId;
|
|
|
+ }
|
|
|
}
|