|
@@ -36,6 +36,7 @@ public class WeiXinCorpController {
|
|
|
public static final String TRANSMIT_SERVER_GET_DEPTDETAIL = "http://47.101.180.183:10010/wxcorp/getCorpDeptDetail?accessToken=ACCESS_TOKEN&deptId=DEPTID";
|
|
|
public static final String TRANSMIT_SERVER_GET_DEPTMEMBDETAIL = "http://47.101.180.183:10010/wxcorp/getDeptUserDetail?accessToken=ACCESS_TOKEN&deptId=DEPTID";
|
|
|
public static final String TRANSMIT_SERVER_GET_CONTACT_TOKEN = "http://47.101.180.183:10010/wxcorp/getCorpConcactAccessToken?corpid=CORPID&contactSecret=CONTACT_SECRET";
|
|
|
+ public static final String TRANSMIT_SERVER_GET_USERDETAIL = "http://47.101.180.183:10010/wxcorp/getUserInfoFromTranServer?accessToken=ACCESS_TOKEN&userId=USERID";
|
|
|
|
|
|
public static final String POST_CONVERT_USERID = "https://qyapi.weixin.qq.com/cgi-bin/batch/userid_to_openuserid?access_token=ACCESS_TOKEN";
|
|
|
|
|
@@ -345,7 +346,7 @@ public class WeiXinCorpController {
|
|
|
param.setIndate(LocalDateTime.now());
|
|
|
sysConfigMapper.updateById(param);
|
|
|
}
|
|
|
- } else if (jsonObject.has("ChangeType")) {
|
|
|
+ } else if ("change_contact".equals(jsonObject.get("InfoType")) && jsonObject.has("ChangeType")) {
|
|
|
//{"xml":{"ChangeType":"delete_user","UserID":"ShanShuiGongZhangTianYiSe",
|
|
|
// "SuiteId":"ww4e237fd6abb635af","InfoType":"change_contact","AuthCorpId":"wwf11426cf618e1703",
|
|
|
// "TimeStamp":1655908762,"OpenUserID":"woy9TkCAAApdqSxsfJbmK4cBJhbzI5Ug"}}
|
|
@@ -356,11 +357,94 @@ public class WeiXinCorpController {
|
|
|
String corpWxUserId = jsonObject.getString("UserID");
|
|
|
Integer companyId = wxCorpInfoMapper.selectById(corpId).getCompanyId();
|
|
|
User user = userMapper.selectOne(new QueryWrapper<User>().eq("corpwx_userid", corpWxUserId).eq("company_id", companyId));
|
|
|
- if (user.getIsActive() == 1) {
|
|
|
+ if (user != null && user.getIsActive() == 1) {
|
|
|
user.setIsActive(0);
|
|
|
user.setInactiveDate(LocalDate.now());
|
|
|
userMapper.updateById(user);
|
|
|
}
|
|
|
+ } else if ("create_user".equals(changeType)) {
|
|
|
+ //新增员工
|
|
|
+ String corpId = jsonObject.getString("AuthCorpId");
|
|
|
+ String corpWxUserId = jsonObject.getString("UserID");
|
|
|
+ WxCorpInfo wxCorpInfo = wxCorpInfoMapper.selectById(corpId);
|
|
|
+ if (!StringUtils.isEmpty(wxCorpInfo.getContactSecret())) {
|
|
|
+ Integer companyId = wxCorpInfo.getCompanyId();
|
|
|
+ SysRole defaultRole = sysRoleMapper.selectOne(new QueryWrapper<SysRole>().eq("company_id", companyId).eq("is_default", 1));
|
|
|
+ //通过通讯录secret获取到员工姓名
|
|
|
+ String remoteCorpConcactAccessToken = getRemoteCorpConcactAccessToken(wxCorpInfo);
|
|
|
+ JSONObject userObj = remoteGetUserDetail(remoteCorpConcactAccessToken, corpWxUserId);
|
|
|
+ if (userObj.getInteger("errcode") == 0) {
|
|
|
+ //成功获取到通讯录的个人详情
|
|
|
+ Long id = SnowFlake.nextId();
|
|
|
+ JSONArray department = userObj.getJSONArray("department");
|
|
|
+ Integer curUserWXDeptid = department.getInteger(department.size() - 1);
|
|
|
+ Department sysDept = departmentMapper.selectOne(new QueryWrapper<Department>().eq("company_id", companyId).eq("corpwx_deptid", curUserWXDeptid));
|
|
|
+
|
|
|
+ User user = new User()
|
|
|
+ .setId(id.toString())
|
|
|
+ .setRoleId(defaultRole.getId())
|
|
|
+ .setRoleName(defaultRole.getRolename())
|
|
|
+ .setName(userObj.getString("name"))
|
|
|
+ .setPassword(MD5Util.getPassword("000000"))
|
|
|
+ .setCorpwxUserid(corpWxUserId)
|
|
|
+ .setColor(ColorUtil.randomColor())
|
|
|
+ .setCompanyId(companyId);
|
|
|
+ if (sysDept != null) {
|
|
|
+ user.setDepartmentId(sysDept.getDepartmentId());
|
|
|
+ }
|
|
|
+ if (userObj.containsKey("direct_leader") && userObj.getJSONArray("direct_leader").size() > 0) {
|
|
|
+ String directLeader = userObj.getJSONArray("direct_leader").getString(0);
|
|
|
+ User leader = userMapper.selectOne(new QueryWrapper<User>().eq("company_id", companyId).eq("corpwx_userid", directLeader));
|
|
|
+ if (leader != null) {
|
|
|
+ user.setSuperiorId(leader.getId());
|
|
|
+ }
|
|
|
+ }
|
|
|
+ userMapper.insert(user);
|
|
|
+ }
|
|
|
+ }
|
|
|
+ } else if ("update_user".equals(changeType)) {
|
|
|
+ String corpId = jsonObject.getString("AuthCorpId");
|
|
|
+ String corpWxUserId = jsonObject.getString("UserID");
|
|
|
+ WxCorpInfo wxCorpInfo = wxCorpInfoMapper.selectById(corpId);
|
|
|
+ Integer companyId = wxCorpInfo.getCompanyId();
|
|
|
+ //只有授权通讯录同步的,才有机会更新部门或者上级
|
|
|
+ if (!StringUtils.isEmpty(wxCorpInfo.getContactSecret())) {
|
|
|
+ String remoteCorpConcactAccessToken = getRemoteCorpConcactAccessToken(wxCorpInfo);
|
|
|
+ JSONObject userObj = remoteGetUserDetail(remoteCorpConcactAccessToken, corpWxUserId);
|
|
|
+ if (userObj.getInteger("errcode") == 0) {
|
|
|
+ //成功获取到通讯录的个人详情
|
|
|
+ JSONArray department = userObj.getJSONArray("department");
|
|
|
+ Integer curUserWXDeptid = department.getInteger(department.size() - 1);
|
|
|
+ Department sysDept = departmentMapper.selectOne(new QueryWrapper<Department>().eq("company_id", companyId).eq("corpwx_deptid", curUserWXDeptid));
|
|
|
+
|
|
|
+ User user = userMapper.selectOne(new QueryWrapper<User>().eq("company_id", companyId).eq("corpwx_userid", corpWxUserId));
|
|
|
+ User changeUser = new User();
|
|
|
+ changeUser.setId(user.getId());
|
|
|
+
|
|
|
+ boolean change = false;
|
|
|
+ //姓名变化
|
|
|
+ if (!user.getName().equals(userObj.getString("name"))) {
|
|
|
+ changeUser.setName(userObj.getString("name"));
|
|
|
+ change = true;
|
|
|
+ }
|
|
|
+ if (sysDept != null && !user.getDepartmentId().equals(sysDept.getDepartmentId())) {
|
|
|
+ changeUser.setDepartmentId(sysDept.getDepartmentId());
|
|
|
+ change = true;
|
|
|
+ }
|
|
|
+ if (userObj.containsKey("direct_leader") && userObj.getJSONArray("direct_leader").size() > 0) {
|
|
|
+ String directLeader = userObj.getJSONArray("direct_leader").getString(0);
|
|
|
+ User leader = userMapper.selectOne(new QueryWrapper<User>().eq("company_id", companyId).eq("corpwx_userid", directLeader));
|
|
|
+ if (leader != null && !leader.equals(user.getSuperiorId())) {
|
|
|
+ changeUser.setSuperiorId(leader.getId());
|
|
|
+ change = true;
|
|
|
+ }
|
|
|
+ }
|
|
|
+ if (change) {
|
|
|
+ userMapper.updateById(changeUser);
|
|
|
+ }
|
|
|
+ }
|
|
|
+ }
|
|
|
+
|
|
|
}
|
|
|
}
|
|
|
} catch (Exception e) {
|
|
@@ -1214,7 +1298,7 @@ public class WeiXinCorpController {
|
|
|
User oldUser = userMapper.selectOne(new QueryWrapper<User>().select("id, name").eq("corpwx_userid", curUserid).eq("company_id", companyId));
|
|
|
if (oldUser == null) {
|
|
|
//先检查姓名+手机号是否存在,如果存在,则更新corpwxId
|
|
|
- User sameNameUser = userMapper.selectOne(new QueryWrapper<User>().eq("name", user.getName()).eq("mobile", user.getPhone()).eq("company_id", companyId).isNull("corpwx_userid").last("limit 1"));
|
|
|
+ User sameNameUser = userMapper.selectOne(new QueryWrapper<User>().eq("name", user.getName()).eq("phone", user.getPhone()).eq("company_id", companyId).isNull("corpwx_userid").last("limit 1"));
|
|
|
if (sameNameUser != null) {
|
|
|
User upUser = new User();
|
|
|
upUser.setId(sameNameUser.getId());
|
|
@@ -1346,7 +1430,7 @@ public class WeiXinCorpController {
|
|
|
User oldUser = userMapper.selectOne(new QueryWrapper<User>().eq("corpwx_userid", curUserid).eq("company_id", companyId));
|
|
|
if (oldUser == null) {
|
|
|
//先检查姓名是否存在,如果存在,则更新corpwxId
|
|
|
- User sameNameUser = userMapper.selectOne(new QueryWrapper<User>().eq("name", user.getName()).eq("mobile", user.getPhone()).eq("company_id", companyId).isNull("corpwx_userid").last("limit 1"));
|
|
|
+ User sameNameUser = userMapper.selectOne(new QueryWrapper<User>().eq("name", user.getName()).eq("phone", user.getPhone()).eq("company_id", companyId).isNull("corpwx_userid").last("limit 1"));
|
|
|
if (sameNameUser != null) {
|
|
|
User upUser = new User();
|
|
|
upUser.setId(sameNameUser.getId());
|
|
@@ -1657,6 +1741,15 @@ public class WeiXinCorpController {
|
|
|
return obj;
|
|
|
}
|
|
|
|
|
|
+ private JSONObject remoteGetUserDetail(String accessToken, String userId) {
|
|
|
+ String url = TRANSMIT_SERVER_GET_USERDETAIL.replace("ACCESS_TOKEN", accessToken).replace("USERID", userId);
|
|
|
+ System.out.println("请求URL="+url);
|
|
|
+ String result = restTemplate.getForObject(url, String.class);
|
|
|
+ System.out.println("远程人员详情:"+result);
|
|
|
+ JSONObject obj = JSONObject.parseObject(JSONObject.parseObject(result).getString("data"));
|
|
|
+ return obj;
|
|
|
+ }
|
|
|
+
|
|
|
//通过中转服务器,调用通讯录的accessToken
|
|
|
private String getRemoteCorpConcactAccessToken(WxCorpInfo corpInfo) throws Exception {
|
|
|
String url = TRANSMIT_SERVER_GET_CONTACT_TOKEN.replace("CORPID", corpInfo.getCorpid()).replace("CONTACT_SECRET", corpInfo.getContactSecret());
|
|
@@ -1726,6 +1819,17 @@ public class WeiXinCorpController {
|
|
|
msg.data = userList.toString();
|
|
|
return msg;
|
|
|
}
|
|
|
+ //用于从中转服务器获取企业通讯录的单个人员详情
|
|
|
+ @RequestMapping("/getUserInfoFromTranServer")
|
|
|
+ public HttpRespMsg getUserInfoFromTranServer(String accessToken, String userId) {
|
|
|
+ String url = GET_USER_INFO_URL.replace("ACCESS_TOKEN", accessToken).replace("USERID", userId);
|
|
|
+ String result = restTemplate.getForObject(url, String.class);
|
|
|
+ JSONObject obj = JSONObject.parseObject(result);
|
|
|
+ HttpRespMsg msg = new HttpRespMsg();
|
|
|
+ msg.data = obj.toString();
|
|
|
+ return msg;
|
|
|
+ }
|
|
|
+
|
|
|
|
|
|
private boolean judgeIsLeader(String userId) {
|
|
|
int cnt = projectAuditorMapper.selectCount(new QueryWrapper<ProjectAuditor>().eq("auditor_id", userId));
|