钉钉员工入职离职回调

This commit is contained in:
andy 2026-03-18 13:29:08 +08:00
parent 022bfe4fb4
commit cb1d56c751
6 changed files with 191 additions and 1 deletions

View File

@ -116,6 +116,20 @@ public class DingUtils {
}
return "";
}
//根据手机号获取用户id
public static String getUserInfoByUserId(String userId){
try {
DingTalkClient client = new DefaultDingTalkClient(DingGlobalParams.getUrl()+"v2/user/get");
OapiV2UserGetRequest req = new OapiV2UserGetRequest();
req.setUserid(userId);
OapiV2UserGetResponse rsp = client.execute(req, "");
return rsp.getBody();
} catch (Exception e) {
e.printStackTrace();
}
return "";
}
/***
* 获取班次信息
*

View File

@ -12,9 +12,14 @@ import com.alibaba.fastjson2.JSONObject;
*/
public interface DingCallBackExchangeProcessor {
//入职
static final String EVENT_TYPE_USER_ADD_ORG = "user_add_org";
//离职
static final String EVENT_TYPE_USER_LEAVE_ORG = "user_leave_org";
//打卡
static final String EVENT_TYPE_CHECK_RECORD = "attendance_check_record";
//审批实例订阅
//审批实例订阅-> 补卡
static final String EVENT_TYPE_INSTANCE_CHANGE = "bpms_instance_change";
//请假加班出差外出状态变更事件
static final String EVENT_TYPE_APPROVE_STATUS_CHANGE = "attendance_approve_status_change";

View File

@ -0,0 +1,41 @@
package com.evo.ding.processor.callback.impl;
import com.alibaba.fastjson2.JSONArray;
import com.alibaba.fastjson2.JSONObject;
import com.evo.ding.processor.callback.DingCallBackExchangeProcessor;
import com.evo.system.service.ISysStaffService;
import lombok.extern.slf4j.Slf4j;
import org.springframework.beans.factory.annotation.Autowired;
import org.springframework.stereotype.Service;
/**
* 员工离职 DingCallBackUseLeaveOrgExchangeProcessor
*
* @author andy.shi
* @ClassName:DingCallBackUseLeaveOrgExchangeProcessor
* @date: 2026年03月12日 9:02
* @remark: 开发人员联系方式 1042025947@qq.com/微信同步
*/
@Slf4j
@Service
public class DingCallBackUseLeaveOrgExchangeProcessor implements DingCallBackExchangeProcessor {
@Autowired
ISysStaffService sysStaffService;
@Override
public boolean accept(String eventType) {
return EVENT_TYPE_USER_LEAVE_ORG.equals(eventType);
}
@Override
public void exchange(JSONObject json) {
log.info("钉钉 员工离职========================>>>{}", json.toString());
JSONArray dataList = json.getJSONArray("userId");
if(dataList!= null && dataList.size() > 0){
dataList.forEach(data->{
sysStaffService.sysStaffLeaveByDingUserId(String.valueOf(data));
});
}
}
}

View File

@ -0,0 +1,45 @@
package com.evo.ding.processor.callback.impl;
import com.alibaba.fastjson2.JSONArray;
import com.alibaba.fastjson2.JSONObject;
import com.evo.attendance.service.IRzAttendanceService;
import com.evo.common.utils.StringUtils;
import com.evo.ding.DingUtils;
import com.evo.ding.processor.callback.DingCallBackExchangeProcessor;
import com.evo.system.service.ISysStaffService;
import lombok.extern.slf4j.Slf4j;
import org.springframework.beans.factory.annotation.Autowired;
import org.springframework.stereotype.Service;
/**
* 员工入职 DingCallBackUserAddOrgExchangeProcessor
*
* @author andy.shi
* @ClassName:DingCallBackUserAddOrgExchangeProcessor
* @date: 2026年03月12日 9:02
* @remark: 开发人员联系方式 1042025947@qq.com/微信同步
*/
@Slf4j
@Service
public class DingCallBackUserAddOrgExchangeProcessor implements DingCallBackExchangeProcessor {
@Autowired
ISysStaffService sysStaffService;
@Override
public boolean accept(String eventType) {
return EVENT_TYPE_USER_ADD_ORG.equals(eventType);
}
@Override
public void exchange(JSONObject json) {
log.info("钉钉 新增员工========================>>>{}", json.toString());
JSONArray dataList = json.getJSONArray("userId");
if(dataList!= null && dataList.size() > 0){
dataList.forEach(data->{
DingUtils.getUserInfoByUserId(String.valueOf(data));
sysStaffService.sysStaffLeaveByDingUserId(String.valueOf(data));
});
}
}
}

View File

@ -39,6 +39,13 @@ public interface ISysStaffService extends IService<SysStaff>
* @return 结果
*/
public AjaxResult insertSysStaff(SysStaff sysStaff);
/**
* 新增员工管理
*
* @param result 员工管理
* @return 结果
*/
public void insertSysStaffByDingDing(String result);
/**
* 修改员工管理
*
@ -122,4 +129,10 @@ public interface ISysStaffService extends IService<SysStaff>
* @return 员工管理
*/
public SysStaff selectSysStaffByDingUserId(String dingUserId);
/***
* 根据钉钉的用户id做用户离职
* @param dingUserId
*/
public void sysStaffLeaveByDingUserId(String dingUserId);
}

View File

@ -47,6 +47,8 @@ import org.springframework.web.multipart.MultipartFile;
import javax.annotation.Resource;
import javax.servlet.http.HttpServletResponse;
import java.io.BufferedReader;
import java.io.FileReader;
import java.io.IOException;
import java.io.InputStream;
import java.math.BigDecimal;
@ -179,6 +181,68 @@ public class SysStaffServiceImpl extends ServiceImpl<SysStaffMapper, SysStaff> i
return AjaxResult.success();
}
@Override
public void insertSysStaffByDingDing(String result) {
JSONObject dingResult = JSONObject.parseObject(result);
dingResult.getJSONObject("result");
// //根据省份证号查询是否已经录入
// SysStaff p_staff = getBaseMapper().queryysStaffByIdCard(sysStaff.getIdCard());
// if(StringUtils.isNotNull(p_staff)){
// return AjaxResult.error("此人录入过!!");
// }
// //判断是否是领导是反写部门信息
// if("".equals(sysStaff.getIsLeader())){
// //根据ID查询部门信息
// SysDept sysDept = deptMapper.selectDeptById(sysStaff.getDeptId());
// sysDept.setPhone(sysStaff.getPhone());
// sysDept.setLeader(sysStaff.getName());
// int i = deptMapper.updateDept(sysDept);
// if(i < 1){
// return AjaxResult.error("更新部门负责人失败");
// }
// }
// //根据省份证确定性别和年龄
// sysStaff.setAge(Long.parseLong(new SimpleDateFormat("yyyy").format(new Date())) - Long.parseLong(sysStaff.getIdCard().substring(6,10)));
// //性别
// sysStaff.setSex((Integer.parseInt(sysStaff.getIdCard().substring(16,17)) % 2 == 0) ? "1" : "0");
// //员工编码
// sysStaff.setCode(getCodeByCompanyName());
// sysStaff.setSeniority(0l);
// sysStaff.setStatus(Constants.JOB_STATIS_0);
// sysStaff.setCreateTime(DateUtils.getNowDate());
// sysStaff.setCreateBy(SecurityUtils.getUsername());
// sysStaff.setDelFlag(Constants.DELETE_FLAG_0);
//
// if(CollectionUtils.isNotEmpty(sysStaff.getSubsidyList())){
// sysStaff.setSubsidys(sysStaff.getSubsidyList().stream().map(String::valueOf).collect(Collectors.joining(",")));
// }
// //打卡位置改为多选
// if(CollectionUtils.isNotEmpty(sysStaff.getTimeClockList())){
// sysStaff.setTimeClock(sysStaff.getTimeClockList().stream().collect(Collectors.joining(",")));
// }
// //新增员工信息到金蝶
// if(StringUtils.isNotEmpty(sysStaff.getJobCode())){
// sysStaff.setExtended(KingdeeRequestUtils.employeeSave(Collections.asMap("userName", sysStaff.getName(), "userCode", sysStaff.getCode(), "jobCode", sysStaff.getJobCode().split("_")[0],"deptCode", sysStaff.getJobCode().split("_")[1])));
// }else if(StringUtils.isEmpty(sysStaff.getJobCode())){
// sysStaff.setExtended(KingdeeRequestUtils.employeeSaveEmptyJob(Collections.asMap("userName", sysStaff.getName(), "userCode", sysStaff.getCode())));
// }
//
// int i = getBaseMapper().insertSysStaff(sysStaff);
// if(i < 1){
// return AjaxResult.error("员工添加失败");
// }
// //员工详情
// createStaffDetail(sysStaff);
// //打卡统计打卡详情
// rzAttendanceStatisticalService.createRzAttendance(sysStaff, Collections.emptyList(), null);
// //处理餐饮信息
// rzRestaurantStatisticsService.createRestaurantStatistics(sysStaff, DateUtils.getNowDate());
// //处理考勤机相关信息
// initCheckDevice(sysStaff);
}
private void initCheckDevice(SysStaff sysStaff){
//如果文件Id不为空, 则需要更新打卡设备信息, 完成后, 同步更新图片的业务Id数据
@ -843,4 +907,12 @@ public class SysStaffServiceImpl extends ServiceImpl<SysStaffMapper, SysStaff> i
public SysStaff selectSysStaffByDingUserId(String dingUserId) {
return getBaseMapper().selectSysStaffByDingUserId(dingUserId);
}
@Override
public void sysStaffLeaveByDingUserId(String dingUserId) {
SysStaff sysStaff = selectSysStaffByDingUserId(dingUserId);
//减去一分钟, 防止离职失败
sysStaff.setQuitDate(DateUtils.addMinutes(new Date(), -1));
updateSysStaff(sysStaff);
}
}