diff --git a/evo-admin/src/main/java/com/evo/attendance/service/impl/RzAttendanceServiceImpl.java b/evo-admin/src/main/java/com/evo/attendance/service/impl/RzAttendanceServiceImpl.java index 1e9a085..356d9ca 100644 --- a/evo-admin/src/main/java/com/evo/attendance/service/impl/RzAttendanceServiceImpl.java +++ b/evo-admin/src/main/java/com/evo/attendance/service/impl/RzAttendanceServiceImpl.java @@ -666,8 +666,12 @@ public class RzAttendanceServiceImpl extends ServiceImpl children = new ArrayList(); diff --git a/evo-admin/src/main/java/com/evo/common/utils/SecurityUtils.java b/evo-admin/src/main/java/com/evo/common/utils/SecurityUtils.java index 63b0e5b..705c5f5 100644 --- a/evo-admin/src/main/java/com/evo/common/utils/SecurityUtils.java +++ b/evo-admin/src/main/java/com/evo/common/utils/SecurityUtils.java @@ -3,6 +3,8 @@ package com.evo.common.utils; import java.util.Collection; import java.util.List; import java.util.stream.Collectors; + +import lombok.extern.slf4j.Slf4j; import org.springframework.security.core.Authentication; import org.springframework.security.core.context.SecurityContextHolder; import org.springframework.security.crypto.bcrypt.BCryptPasswordEncoder; @@ -18,6 +20,7 @@ import com.evo.common.exception.ServiceException; * * @author evo */ +@Slf4j public class SecurityUtils { @@ -62,7 +65,9 @@ public class SecurityUtils } catch (Exception e) { - throw new ServiceException("获取用户账户异常", HttpStatus.UNAUTHORIZED); + log.error("获取用户账户异常", HttpStatus.UNAUTHORIZED); + return "system"; +// throw new ServiceException("获取用户账户异常", HttpStatus.UNAUTHORIZED); } } 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 293526e..8d649b8 100644 --- a/evo-admin/src/main/java/com/evo/ding/DingUtils.java +++ b/evo-admin/src/main/java/com/evo/ding/DingUtils.java @@ -10,6 +10,7 @@ import com.dingtalk.api.request.*; import com.dingtalk.api.response.*; import com.evo.common.core.redis.RedisCache; import com.evo.common.utils.StringUtils; +import com.taobao.api.ApiException; import lombok.extern.slf4j.Slf4j; import org.springframework.beans.factory.annotation.Autowired; import org.springframework.stereotype.Service; @@ -243,4 +244,18 @@ public class DingUtils { } return ""; } + + + public static String getDeptInfo(Long deptId){ + try { + DingTalkClient client = new DefaultDingTalkClient(DingGlobalParams.getUrl()+"v2/department/get"); + OapiV2DepartmentGetRequest req = new OapiV2DepartmentGetRequest(); + req.setDeptId(deptId); + OapiV2DepartmentGetResponse rsp = client.execute(req, getAccessToken()); + return rsp.getBody(); + } catch (Exception e) { + e.printStackTrace(); + } + return ""; + } } 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 index 36a836c..642e0c1 100644 --- 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 @@ -34,7 +34,7 @@ public class DingCallBackUserAddOrgExchangeProcessor implements DingCallBackExch @Override public void exchange(JSONObject json) { log.info("钉钉 新增员工========================>>>{}", json.toString()); - JSONArray dataList = json.getJSONArray("userId"); + JSONArray dataList = json.getJSONArray("UserId"); if(dataList!= null && dataList.size() > 0){ dataList.forEach(data->{ sysStaffService.insertSysStaffByDingDing(DingUtils.getUserInfoByUserId(String.valueOf(data))); diff --git a/evo-admin/src/main/java/com/evo/system/mapper/SysDeptMapper.java b/evo-admin/src/main/java/com/evo/system/mapper/SysDeptMapper.java index 9826fc8..a5784fb 100644 --- a/evo-admin/src/main/java/com/evo/system/mapper/SysDeptMapper.java +++ b/evo-admin/src/main/java/com/evo/system/mapper/SysDeptMapper.java @@ -129,4 +129,9 @@ public interface SysDeptMapper extends BaseMapper * @return 结果 */ public int updateDeptForLeader(SysDept dept); + + + public SysDept selectByDingDeptId(String dingId); + + public SysDept selectByName(String name); } 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 3f66c7e..c2dbb61 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 @@ -3,6 +3,8 @@ package com.evo.system.service.impl; import com.alibaba.fastjson2.JSON; import com.alibaba.fastjson2.JSONArray; import com.alibaba.fastjson2.JSONObject; +import com.baomidou.mybatisplus.annotation.FieldFill; +import com.baomidou.mybatisplus.annotation.TableField; import com.baomidou.mybatisplus.core.conditions.query.LambdaQueryWrapper; import com.baomidou.mybatisplus.core.conditions.update.UpdateWrapper; import com.baomidou.mybatisplus.extension.service.impl.ServiceImpl; @@ -19,6 +21,7 @@ import com.evo.common.utils.*; import com.evo.common.utils.Collections; import com.evo.common.utils.bean.BeanUtils; import com.evo.common.utils.poi.ExcelUtil1; +import com.evo.ding.DingUtils; import com.evo.equipment.service.IEqSnDetailService; import com.evo.finance.domain.RzSalaryDetail; import com.evo.finance.processor.SalaryCalculationStrategyExchangeProcessor; @@ -38,6 +41,7 @@ import com.evo.system.mapper.SysStaffMapper; import com.evo.system.service.ISysStaffService; import com.evo.system.service.RzUploadService; import com.evo.system.utils.SubsidyCalculationUtils; +import com.fasterxml.jackson.annotation.JsonFormat; import lombok.extern.slf4j.Slf4j; import org.apache.commons.collections4.CollectionUtils; import org.apache.commons.lang3.ObjectUtils; @@ -209,19 +213,39 @@ public class SysStaffServiceImpl extends ServiceImpl i log.info("当前员工信息已经存在, 无法再次入库, 钉钉返回员工信息为{}", dingUserInfo); return; } + //解析部门信息 + JSONArray deptIds = result.getJSONArray("leader_in_dept"); + Long deptId = 1l; + if(deptIds.size() > 0){ + String dingDeptId= deptIds.getJSONObject(0).getString("dept_id"); + String deptIdAncestors = findDeptId(dingDeptId); + deptId = Long.valueOf(deptIdAncestors.split("_")[0]); + } + //创建新的用户 sysStaff = new SysStaff(); sysStaff.setName(name); sysStaff.setPhone(mobile); sysStaff.setDingUserId(dingResult.getString("userid")); + sysStaff.setDeptId(deptId); //员工编码 sysStaff.setCode(getCodeByCompanyName()); + sysStaff.setEmploymentDate(new Date()); + sysStaff.setWorkerTerm(1l); sysStaff.setSeniority(0l); + sysStaff.setCompanyName("YT"); + sysStaff.setIsLeader("否"); + sysStaff.setSex("0"); + sysStaff.setLevel("10"); + sysStaff.setRegularDate(DateUtils.addMonths(sysStaff.getEmploymentDate(),1)); + sysStaff.setContractStart(sysStaff.getEmploymentDate()); + sysStaff.setContractEnd(DateUtils.addYears(sysStaff.getEmploymentDate(), 1)); + sysStaff.setDingUserId(result.getString("userid")); sysStaff.setStatus(Constants.JOB_STATIS_0); sysStaff.setCreateTime(DateUtils.getNowDate()); - sysStaff.setCreateBy(SecurityUtils.getUsername()); + sysStaff.setCreateBy("admin-钉钉推送"); sysStaff.setDelFlag(Constants.DELETE_FLAG_0); sysStaff.setSource(Constants.SOURCE_DING); @@ -267,6 +291,39 @@ public class SysStaffServiceImpl extends ServiceImpl i } } + public String findDeptId(String dingDeptId){ + SysDept dept = deptMapper.selectByDingDeptId(dingDeptId); + if(dept == null){ + String deptResult = DingUtils.getDeptInfo(Long.valueOf(dingDeptId)); + JSONObject deptObject = JSONObject.parseObject(deptResult).getJSONObject("result"); + String deptName = deptObject.getString("name"); + dept = deptMapper.selectByName(deptName); + if(dept != null){ + return dept.getDeptId()+"_"+dept.getAncestors(); + }else{ + Long parentId = deptObject.getLong("parent_id"); + String parentIdStr = "1_"; + if(parentId != 1){ + parentIdStr = findDeptId(String.valueOf(parentId)); + } + String[] idArrays = parentIdStr.split("_"); + dept = new SysDept(); + dept.setParentId(Long.valueOf(idArrays[0])); + dept.setAncestors(idArrays[1]+","+idArrays[0]); + dept.setDeptName(deptName); + dept.setStatus("0"); + dept.setDelFlag("0"); + dept.setIsOverTime("0"); + dept.setDingId(dingDeptId); + deptMapper.insert(dept); + return dept.getDeptId()+"_"+dept.getAncestors(); + } + }else { + return dept.getDeptId()+"_"+dept.getAncestors(); + } + } + + /** * 创建员工详情信息 * @param sysStaff diff --git a/evo-admin/src/main/resources/mapper/system/SysDeptMapper.xml b/evo-admin/src/main/resources/mapper/system/SysDeptMapper.xml index bbbdf06..9298e44 100644 --- a/evo-admin/src/main/resources/mapper/system/SysDeptMapper.xml +++ b/evo-admin/src/main/resources/mapper/system/SysDeptMapper.xml @@ -22,7 +22,7 @@ PUBLIC "-//mybatis.org//DTD Mapper 3.0//EN" - select d.dept_id, d.parent_id, d.ancestors, d.dept_name, d.leader, d.phone,d.status, d.del_flag,d.is_over_time, d.create_by, d.create_time + select d.dept_id, d.parent_id, d.ancestors, d.dept_name, d.leader, d.phone,d.status, d.del_flag,d.is_over_time, d.create_by, d.create_time, d.ding_id from sys_dept d @@ -100,6 +100,8 @@ PUBLIC "-//mybatis.org//DTD Mapper 3.0//EN" status, is_over_time, create_by, + ding_id, + create_time )values( #{deptId}, @@ -111,6 +113,7 @@ PUBLIC "-//mybatis.org//DTD Mapper 3.0//EN" #{status}, #{isOverTime}, #{createBy}, + #{dingId}, sysdate() ) @@ -126,6 +129,7 @@ PUBLIC "-//mybatis.org//DTD Mapper 3.0//EN" status = #{status}, is_over_time = #{isOverTime}, update_by = #{updateBy}, + ding_id = #{dingId}, update_time = sysdate() where dept_id = #{deptId} @@ -164,6 +168,20 @@ PUBLIC "-//mybatis.org//DTD Mapper 3.0//EN" where dept_id not in (select parent_id from sys_dept) and del_flag = '0' + + + + + + + +