From cb1d56c751836f2a7830facd49ee68614178fd6c Mon Sep 17 00:00:00 2001 From: andy <1042025947@qq.com> Date: Wed, 18 Mar 2026 13:29:08 +0800 Subject: [PATCH] =?UTF-8?q?=E9=92=89=E9=92=89=E5=91=98=E5=B7=A5=E5=85=A5?= =?UTF-8?q?=E8=81=8C=E7=A6=BB=E8=81=8C=E5=9B=9E=E8=B0=83?= MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit --- .../src/main/java/com/evo/ding/DingUtils.java | 14 ++++ .../DingCallBackExchangeProcessor.java | 7 +- ...gCallBackUseLeaveOrgExchangeProcessor.java | 41 +++++++++++ ...ngCallBackUserAddOrgExchangeProcessor.java | 45 ++++++++++++ .../evo/system/service/ISysStaffService.java | 13 ++++ .../service/impl/SysStaffServiceImpl.java | 72 +++++++++++++++++++ 6 files changed, 191 insertions(+), 1 deletion(-) create mode 100644 evo-admin/src/main/java/com/evo/ding/processor/callback/impl/DingCallBackUseLeaveOrgExchangeProcessor.java create mode 100644 evo-admin/src/main/java/com/evo/ding/processor/callback/impl/DingCallBackUserAddOrgExchangeProcessor.java diff --git a/evo-admin/src/main/java/com/evo/ding/DingUtils.java b/evo-admin/src/main/java/com/evo/ding/DingUtils.java index 1bfc872..9ad7133 100644 --- a/evo-admin/src/main/java/com/evo/ding/DingUtils.java +++ b/evo-admin/src/main/java/com/evo/ding/DingUtils.java @@ -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 ""; + } /*** * 获取班次信息 * diff --git a/evo-admin/src/main/java/com/evo/ding/processor/callback/DingCallBackExchangeProcessor.java b/evo-admin/src/main/java/com/evo/ding/processor/callback/DingCallBackExchangeProcessor.java index f08c20d..d664024 100644 --- a/evo-admin/src/main/java/com/evo/ding/processor/callback/DingCallBackExchangeProcessor.java +++ b/evo-admin/src/main/java/com/evo/ding/processor/callback/DingCallBackExchangeProcessor.java @@ -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"; diff --git a/evo-admin/src/main/java/com/evo/ding/processor/callback/impl/DingCallBackUseLeaveOrgExchangeProcessor.java b/evo-admin/src/main/java/com/evo/ding/processor/callback/impl/DingCallBackUseLeaveOrgExchangeProcessor.java new file mode 100644 index 0000000..4430eb7 --- /dev/null +++ b/evo-admin/src/main/java/com/evo/ding/processor/callback/impl/DingCallBackUseLeaveOrgExchangeProcessor.java @@ -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)); + }); + } + } +} diff --git a/evo-admin/src/main/java/com/evo/ding/processor/callback/impl/DingCallBackUserAddOrgExchangeProcessor.java b/evo-admin/src/main/java/com/evo/ding/processor/callback/impl/DingCallBackUserAddOrgExchangeProcessor.java new file mode 100644 index 0000000..70ca2b8 --- /dev/null +++ b/evo-admin/src/main/java/com/evo/ding/processor/callback/impl/DingCallBackUserAddOrgExchangeProcessor.java @@ -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)); + }); + } + } +} diff --git a/evo-admin/src/main/java/com/evo/system/service/ISysStaffService.java b/evo-admin/src/main/java/com/evo/system/service/ISysStaffService.java index 751247e..89a1a7c 100644 --- a/evo-admin/src/main/java/com/evo/system/service/ISysStaffService.java +++ b/evo-admin/src/main/java/com/evo/system/service/ISysStaffService.java @@ -39,6 +39,13 @@ public interface ISysStaffService extends IService * @return 结果 */ public AjaxResult insertSysStaff(SysStaff sysStaff); + /** + * 新增员工管理 + * + * @param result 员工管理 + * @return 结果 + */ + public void insertSysStaffByDingDing(String result); /** * 修改员工管理 * @@ -122,4 +129,10 @@ public interface ISysStaffService extends IService * @return 员工管理 */ public SysStaff selectSysStaffByDingUserId(String dingUserId); + + /*** + * 根据钉钉的用户id做用户离职 + * @param dingUserId + */ + public void sysStaffLeaveByDingUserId(String dingUserId); } diff --git a/evo-admin/src/main/java/com/evo/system/service/impl/SysStaffServiceImpl.java b/evo-admin/src/main/java/com/evo/system/service/impl/SysStaffServiceImpl.java index 19cedb4..76ba1b6 100644 --- a/evo-admin/src/main/java/com/evo/system/service/impl/SysStaffServiceImpl.java +++ b/evo-admin/src/main/java/com/evo/system/service/impl/SysStaffServiceImpl.java @@ -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 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 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); + } }