考勤推送金蝶调整

This commit is contained in:
andy 2025-08-05 09:13:56 +08:00
parent d4658848cf
commit 20e4492b6b
7 changed files with 116 additions and 28 deletions

View File

@ -29,7 +29,7 @@ public class InsertAndUpdateMybatisHandler implements MetaObjectHandler {
try {
name = SecurityUtils.getUsername();
} catch (Exception e) {
log.error("获取当前登录用户异常"+e.getMessage());
//log.error("获取当前登录用户异常"+e.getMessage());
}
if(ObjectUtils.isNotEmpty(metaObject)){
mySetFieldValByName("createBy", name,metaObject);
@ -57,7 +57,7 @@ public class InsertAndUpdateMybatisHandler implements MetaObjectHandler {
try {
name = SecurityUtils.getUsername();
} catch (Exception e) {
log.error("获取当前登录用户异常"+e.getMessage());
//log.error("获取当前登录用户异常"+e.getMessage());
}
if(ObjectUtils.isNotEmpty(metaObject)){
mySetFieldValByName("updateBy",name,metaObject);

View File

@ -2,6 +2,8 @@ package com.evo.kingdeeUtils;
import com.alibaba.fastjson2.JSON;
import com.alibaba.fastjson2.JSONArray;
import com.alibaba.fastjson2.JSONObject;
import com.evo.common.utils.Collections;
import com.evo.common.utils.DateUtils;
import com.evo.common.utils.spring.SpringUtils;
import com.evo.kingdeeUtils.exception.KingdeeException;
@ -9,6 +11,8 @@ import com.evo.kingdeeUtils.kenum.BaseEnum;
import com.evo.kingdeeUtils.kenum.KingdeeParamsEnum;
import com.evo.kingdeeUtils.mapper.LogKingDeeMapper;
import com.evo.kingdeeUtils.vo.LogKingDee;
import com.google.gson.Gson;
import com.kingdee.bos.webapi.entity.RepoRet;
import com.kingdee.bos.webapi.sdk.K3CloudApi;
import lombok.extern.slf4j.Slf4j;
import org.apache.commons.lang3.StringUtils;
@ -31,8 +35,7 @@ import java.util.stream.Collectors;
@Slf4j
public class KingdeeRequestUtils {
/***
* 员工保存接口
/*** 员工保存接口
* @param params
* 参数说明对照关系: key-value
* FName-员工姓名
@ -40,12 +43,32 @@ public class KingdeeRequestUtils {
* FNumber-岗位编号
* FPostDept_FNumber_岗位所属部门编号
*/
public static void employeeSave(Map<String, String> params){
request(params, KingdeeParamsEnum.Employee.SAVE);
public static String employeeSave(Map<String, String> params){
return getSaveResultInfo(request(params, KingdeeParamsEnum.Employee.SAVE));
}
/*** 员工保存接口(没岗位的保存)
* @param params
* 参数说明对照关系: key-value
* FName-员工姓名
* FStaffNumber-员工编号
* FNumber-岗位编号
* FPostDept_FNumber_岗位所属部门编号
*/
public static String employeeSaveEmptyJob(Map<String, String> params){
return getSaveResultInfo(request(params, KingdeeParamsEnum.Employee.SAVE_EMPTY_DEPT));
}
/***
* 员工禁用接口
private static String getSaveResultInfo(JSONArray resultArray){
Map<String, Object> resultMap = Collections.emptyMap();
if(resultArray != null && resultArray.size() > 0){
JSONObject result = resultArray.getJSONObject(0);
resultMap.put("FID", result.getInteger("FID"));
}
return JSON.toJSONString(resultMap);
}
/** 员工禁用接口
* @param params
* 参数说明对照关系: key-value
* userCode-员工编码 (多个使用,分割, : 001,002,003)
@ -53,8 +76,7 @@ public class KingdeeRequestUtils {
public static void employeeDisabled(Map<String, String> params){
excuteOperation(params, KingdeeParamsEnum.Employee.DISABLED);
}
/***
* 员工反禁用接口
/** 员工反禁用接口
* @param params
* 参数说明对照关系: key-value
* userCode-员工编码 (多个使用,分割, : 001,002,003)
@ -71,32 +93,51 @@ public class KingdeeRequestUtils {
* FNumber-员工编号
* deptCode-部门编号
* jobCode-岗位编号
*
*
*/
public static void updateJobInfo(Map<String, String> params){
if(StringUtils.isNotEmpty(params.get("oldJobCode"))){
public static String updateJobInfo(Map<String, String> params){
if((StringUtils.isEmpty(params.get("FSTAFFID")) || "null".equals(params.get("FSTAFFID"))) && StringUtils.isNotEmpty(params.get("oldJobCode")) && !"null".equals(params.get("oldJobCode"))){
String result = executeBillQuery(params, KingdeeParamsEnum.JobInfo.DOCUMENT_INQUIRY);
JSONArray resJS = JSON.parseArray(result);
if(resJS.size() > 0){
params.put("FSTAFFID", resJS.getJSONArray(0).getString(0));
}
}
request(params, KingdeeParamsEnum.JobInfo.UPDATE);
if(StringUtils.isEmpty(params.get("FSTAFFID")) || "null".equals(params.get("FSTAFFID"))){
params.put("FSTAFFID", "0");
}
return getJobResultInfo(request(params, KingdeeParamsEnum.JobInfo.UPDATE));
}
private static String getJobResultInfo(JSONArray resultArray){
Map<String, Object> resultMap = Collections.emptyMap();
if(resultArray != null && resultArray.size() > 0){
JSONObject result = resultArray.getJSONObject(0);
resultMap.put("FSTAFFID", result.getInteger("FSTAFFID"));
}
return JSON.toJSONString(resultMap);
}
private static void request(Map<String, String> params, BaseEnum paramEnum){
private static JSONArray request(Map<String, String> params, BaseEnum paramEnum){
log.error("{}====> 接口调用, 参数为:{} ", paramEnum.getDes(), JSON.toJSONString(params));
String requestParam = buildParams(params, paramEnum);
String resultJson = "";
JSONArray resultArray = new JSONArray("");
try {
K3CloudApi client = new K3CloudApi();
resultJson = client.save(paramEnum.getFromId(), requestParam);
System.out.println(resultJson);
log.info("{}====>接口返回结果: {}", paramEnum.getDes(), resultJson);
//用于记录结果
Gson gson = new Gson();
//对返回结果进行解析和校验
RepoRet repoRet = gson.fromJson(resultJson, RepoRet.class);
if (repoRet.getResult().getResponseStatus().isIsSuccess()) {
JSONObject jo = JSON.parseObject(resultJson);
JSONObject result = jo.getJSONObject("Result");
resultArray = result.getJSONArray("NeedReturnData");
}
} catch (Exception e) {
resultJson = e.getMessage();
log.error("{}====>请求错误: {}", paramEnum.getDes(), e.getMessage());
@ -105,7 +146,7 @@ public class KingdeeRequestUtils {
//记录日志
instLog(paramEnum, params, requestParam, resultJson);
}
return resultArray;
}

View File

@ -30,7 +30,7 @@ public enum KingdeeParamsEnum {
public static final String REQUEST_PARAM_SUFFIX="_param";
public enum JobInfo implements BaseEnum{
UPDATE("岗位信息修改", "BD_NEWSTAFF", Collections.asMap("userCode","员工编号不能为空","deptCode","部门编号不能为空","jobCode","岗位编号不能为空", "FSTAFFID","修改的业务单据DI不能为空"),"{\"NeedUpDateFields\":[],\"NeedReturnFields\":[],\"IsDeleteEntry\":\"true\",\"SubSystemId\":\"\",\"IsVerifyBaseDataField\":\"false\",\"IsEntryBatchFill\":\"true\",\"ValidateFlag\":\"true\",\"NumberSearch\":\"true\",\"IsAutoAdjustField\":\"true\",\"InterationFlags\":\"\",\"IgnoreInterationFlag\":\"\",\"IsControlPrecision\":\"false\",\"ValidateRepeatJson\":\"false\",\"Model\":{\"FSTAFFID\":FSTAFFID"+REQUEST_PARAM_SUFFIX+",\"FNumber\":\"userCode"+REQUEST_PARAM_SUFFIX+"\",\"FPerson\":{\"FNumber\":\"userCode"+REQUEST_PARAM_SUFFIX+"\"},\"FDept\":{\"FNumber\":\"deptCode"+REQUEST_PARAM_SUFFIX+"\"},\"FPosition\":{\"FNumber\":\"jobCode"+REQUEST_PARAM_SUFFIX+"\"},\"FStartDate\":\"date"+REQUEST_PARAM_SUFFIX+"\",\"FEmpInfoId\":{\"FNumber\":\"userCode"+REQUEST_PARAM_SUFFIX+"\"},\"FPOSTBILLEntity\":{\"FIsFirstPost\":false},\"FOtherEntity\":{},\"FSHRMapEntity\":{}}}"),
UPDATE("岗位信息修改", "BD_NEWSTAFF", Collections.asMap("userCode","员工编号不能为空","deptCode","部门编号不能为空","jobCode","岗位编号不能为空", "FSTAFFID","修改的业务单据DI不能为空"),"{\"NeedUpDateFields\":[],\"NeedReturnFields\":[\"FSTAFFID\"],\"IsDeleteEntry\":\"true\",\"SubSystemId\":\"\",\"IsVerifyBaseDataField\":\"false\",\"IsEntryBatchFill\":\"true\",\"ValidateFlag\":\"true\",\"NumberSearch\":\"true\",\"IsAutoAdjustField\":\"true\",\"InterationFlags\":\"\",\"IgnoreInterationFlag\":\"\",\"IsControlPrecision\":\"false\",\"ValidateRepeatJson\":\"false\",\"Model\":{\"FSTAFFID\":FSTAFFID"+REQUEST_PARAM_SUFFIX+",\"FNumber\":\"userCode"+REQUEST_PARAM_SUFFIX+"\",\"FPerson\":{\"FNumber\":\"userCode"+REQUEST_PARAM_SUFFIX+"\"},\"FDept\":{\"FNumber\":\"deptCode"+REQUEST_PARAM_SUFFIX+"\"},\"FPosition\":{\"FNumber\":\"jobCode"+REQUEST_PARAM_SUFFIX+"\"},\"FStartDate\":\"date"+REQUEST_PARAM_SUFFIX+"\",\"FEmpInfoId\":{\"FNumber\":\"userCode"+REQUEST_PARAM_SUFFIX+"\"},\"FPOSTBILLEntity\":{\"FIsFirstPost\":false},\"FOtherEntity\":{},\"FSHRMapEntity\":{}}}"),
DOCUMENT_INQUIRY("单据查询", "BD_NEWSTAFF", Collections.asMap("userCode","员工编号不能为空","oldJobCode","岗位编号不能为空"),"{\"FormId\":\"BD_NEWSTAFF\",\"FieldKeys\":\"FSTAFFID\",\"FilterString\":[{\"Left\":\"\",\"FieldName\":\"FNumber\",\"Compare\":\"17\",\"Value\":\"userCode"+REQUEST_PARAM_SUFFIX+"\",\"Right\":\"\",\"Logic\":0},{\"Left\":\"\",\"FieldName\":\"FStaffNumber\",\"Compare\":\"17\",\"Value\":\"oldJobCode"+REQUEST_PARAM_SUFFIX+"\",\"Right\":\"\",\"Logic\":0}],\"OrderString\":\"\",\"TopRowCount\":0,\"StartRow\":0,\"Limit\":2000,\"SubSystemId\":\"\"}"),
;
String des;
@ -66,9 +66,11 @@ public enum KingdeeParamsEnum {
* 金蝶请求参数, 员工
*/
public enum Employee implements BaseEnum {
SAVE("员工保存", "BD_Empinfo", "",Collections.asMap("userName","员工姓名不能为空","userCode","员工编号不能为空","jobCode","岗位编号不能为空"),"{\"NeedUpDateFields\":[],\"NeedReturnFields\":[],\"IsDeleteEntry\":\"true\",\"SubSystemId\":\"\",\"IsVerifyBaseDataField\":\"false\",\"IsEntryBatchFill\":\"true\",\"ValidateFlag\":\"true\",\"NumberSearch\":\"true\",\"IsAutoSubmitAndAudit\":\"true\",\"IsAutoAdjustField\":\"true\",\"InterationFlags\":\"\",\"IgnoreInterationFlag\":\"\",\"IsControlPrecision\":\"false\",\"ValidateRepeatJson\":\"false\",\"Model\":{\"FID\":0,\"FName\":\"userName"+REQUEST_PARAM_SUFFIX+"\",\"FStaffNumber\":\"userCode"+REQUEST_PARAM_SUFFIX+"\",\"FCreateSaler\":false,\"FCreateUser\":false,\"FCreateCashier\":false,\"FJoinDate\":\"date"+REQUEST_PARAM_SUFFIX+"\",\"FSHRMapEntity\":{},\"FPostEntity\":[{\"FPostDept\":{\"FNumber\":\"deptCode"+REQUEST_PARAM_SUFFIX+"\"},\"FPost\":{\"FNumber\":\"jobCode"+REQUEST_PARAM_SUFFIX+"\"},\"FStaffStartDate\":\"date"+REQUEST_PARAM_SUFFIX+"\",\"FIsFirstPost\":true,\"FStaffDetails\":0}]}}"),
SAVE("员工保存", "BD_Empinfo", "",Collections.asMap("userName","员工姓名不能为空","userCode","员工编号不能为空","jobCode","岗位编号不能为空"),"{\"NeedUpDateFields\":[],\"NeedReturnFields\":[\"FID\"],\"IsDeleteEntry\":\"true\",\"SubSystemId\":\"\",\"IsVerifyBaseDataField\":\"false\",\"IsEntryBatchFill\":\"true\",\"ValidateFlag\":\"true\",\"NumberSearch\":\"true\",\"IsAutoSubmitAndAudit\":\"true\",\"IsAutoAdjustField\":\"true\",\"InterationFlags\":\"\",\"IgnoreInterationFlag\":\"\",\"IsControlPrecision\":\"false\",\"ValidateRepeatJson\":\"false\",\"Model\":{\"FID\":0,\"FName\":\"userName"+REQUEST_PARAM_SUFFIX+"\",\"FStaffNumber\":\"userCode"+REQUEST_PARAM_SUFFIX+"\",\"FCreateSaler\":false,\"FCreateUser\":false,\"FCreateCashier\":false,\"FJoinDate\":\"date"+REQUEST_PARAM_SUFFIX+"\",\"FSHRMapEntity\":{},\"FPostEntity\":[{\"FPostDept\":{\"FNumber\":\"deptCode"+REQUEST_PARAM_SUFFIX+"\"},\"FPost\":{\"FNumber\":\"jobCode"+REQUEST_PARAM_SUFFIX+"\"},\"FStaffStartDate\":\"date"+REQUEST_PARAM_SUFFIX+"\",\"FIsFirstPost\":true,\"FStaffDetails\":0}]}}"),
SAVE_EMPTY_DEPT("员工保存_岗位为空", "BD_Empinfo", "",Collections.asMap("userName","员工姓名不能为空","userCode","员工编号不能为空"),"{\"NeedUpDateFields\":[],\"NeedReturnFields\":[\"FID\"],\"IsDeleteEntry\":\"true\",\"SubSystemId\":\"\",\"IsVerifyBaseDataField\":\"false\",\"IsEntryBatchFill\":\"true\",\"ValidateFlag\":\"true\",\"NumberSearch\":\"true\",\"IsAutoSubmitAndAudit\":\"true\",\"IsAutoAdjustField\":\"true\",\"InterationFlags\":\"\",\"IgnoreInterationFlag\":\"\",\"IsControlPrecision\":\"false\",\"ValidateRepeatJson\":\"false\",\"Model\":{\"FID\":0,\"FName\":\"userName"+REQUEST_PARAM_SUFFIX+"\",\"FStaffNumber\":\"userCode"+REQUEST_PARAM_SUFFIX+"\",\"FCreateSaler\":false,\"FCreateUser\":false,\"FCreateCashier\":false,\"FJoinDate\":\"date"+REQUEST_PARAM_SUFFIX+"\",\"FSHRMapEntity\":{}}}"),
DISABLED("员工禁用","BD_Empinfo", "Forbid", Collections.asMap("userCode","员工编码不能为空"),"{\"Numbers\":[userCode"+REQUEST_PARAM_SUFFIX+"],\"Ids\":\"\",\"PkEntryIds\":[],\"UseOrgId\":0,\"NetworkCtrl\":\"\",\"IgnoreInterationFlag\":\"\"}"),
REVERSE_DISABLED("员工反禁用","BD_Empinfo", "Enable", Collections.asMap("userCode","员工编码不能为空"),"{\"Numbers\":[userCode"+REQUEST_PARAM_SUFFIX+"],\"Ids\":\"\",\"PkEntryIds\":[],\"UseOrgId\":0,\"NetworkCtrl\":\"\",\"IgnoreInterationFlag\":\"\"}"),
DOCUMENT_INQUIRY("单据查询", "BD_Empinfo", "", Collections.asMap("userCode","员工编号不能为空"),"{\"FormId\":\"BD_Empinfo\",\"FieldKeys\":\"FID\",\"FilterString\":[{\"Left\":\"\",\"FieldName\":\"FStaffNumber\",\"Compare\":\"17\",\"Value\":\"userCode"+REQUEST_PARAM_SUFFIX+"\",\"Right\":\"\",\"Logic\":0}],\"OrderString\":\"\",\"TopRowCount\":0,\"StartRow\":0,\"Limit\":2000,\"SubSystemId\":\"\"}"),
;
String des;
String fromId;

View File

@ -12,6 +12,7 @@ import lombok.Data;
import java.util.Date;
import java.util.List;
import java.util.Map;
import java.util.stream.Collectors;
/**
@ -204,6 +205,9 @@ public class SysStaff extends BaseEntity
@TableField(exist = false)
private List<Long> subsidyList;
private String extended;
public List<Long> getSubsidyList() {
if(Collections.isEmpty(subsidyList) && StringUtils.isNotEmpty(subsidys)){
subsidyList = Collections.asList(subsidys.split(",")).stream().map(Long::valueOf).collect(Collectors.toList());

View File

@ -1,5 +1,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.core.conditions.query.LambdaQueryWrapper;
import com.baomidou.mybatisplus.core.conditions.update.UpdateWrapper;
import com.baomidou.mybatisplus.extension.service.impl.ServiceImpl;
@ -17,6 +20,7 @@ import com.evo.common.utils.bean.BeanUtils;
import com.evo.common.utils.poi.ExcelUtil1;
import com.evo.equipment.service.IEqSnDetailService;
import com.evo.kingdeeUtils.KingdeeRequestUtils;
import com.evo.kingdeeUtils.kenum.KingdeeParamsEnum;
import com.evo.personnelMatters.domain.RzSubsidyInfo;
import com.evo.personnelMatters.mapper.RzSubsidyInfoMapper;
import com.evo.restaurant.service.IRzRestaurantStatisticsService;
@ -161,7 +165,11 @@ public class SysStaffServiceImpl extends ServiceImpl<SysStaffMapper, SysStaff> i
initCheckDevice(sysStaff);
//新增员工信息到金蝶
if(StringUtils.isNotEmpty(sysStaff.getJobCode())){
KingdeeRequestUtils.employeeSave(Collections.asMap("userName", sysStaff.getName(), "userCode", sysStaff.getCode(), "jobCode", sysStaff.getJobCode().split("_")[0],"deptCode", sysStaff.getJobCode().split("_")[1]));
sysStaff.setExtended(KingdeeRequestUtils.employeeSave(Collections.asMap("userName", sysStaff.getName(), "userCode", sysStaff.getCode(), "jobCode", sysStaff.getJobCode().split("_")[0],"deptCode", sysStaff.getJobCode().split("_")[1])));
updateById(sysStaff);
}else if(StringUtils.isEmpty(sysStaff.getJobCode())){
sysStaff.setExtended(KingdeeRequestUtils.employeeSaveEmptyJob(Collections.asMap("userName", sysStaff.getName(), "userCode", sysStaff.getCode())));
updateById(sysStaff);
}
return AjaxResult.success();
}
@ -238,7 +246,6 @@ public class SysStaffServiceImpl extends ServiceImpl<SysStaffMapper, SysStaff> i
if(StringUtils.isNotEmpty(sysStaff.getCode())){
KingdeeRequestUtils.employeeDisabled(Collections.asMap("userCode","\""+sysStaff.getCode()+"\""));
}
return AjaxResult.success();
}
}
@ -267,7 +274,40 @@ public class SysStaffServiceImpl extends ServiceImpl<SysStaffMapper, SysStaff> i
if(StringUtils.isNotEmpty(old_staff.getJobCode())){
oldPositionNum = old_staff.getJobCode().split("_")[0];
}
KingdeeRequestUtils.updateJobInfo(Collections.asMap( "userCode", sysStaff.getCode(), "deptCode", deptNum, "jobCode", positionNum, "oldJobCode", oldPositionNum));
String fstaffId = "";
String fid = null;
JSONObject extended = new JSONObject();
if(StringUtils.isNotEmpty(sysStaff.getExtended())){
extended = JSON.parseObject(sysStaff.getExtended());
fstaffId = extended.getString("FSTAFFID");
fid = extended.getString("FID");
}
//都为空, 不确定金蝶是否存在员工信息
if(StringUtils.isEmpty(fid) && StringUtils.isEmpty(fstaffId)){
//查询金蝶的表单
String result = KingdeeRequestUtils.executeBillQuery(Collections.asMap("userCode", sysStaff.getCode()), KingdeeParamsEnum.Employee.DOCUMENT_INQUIRY);
JSONArray resJS = JSON.parseArray(result);
if(resJS.size() > 0){
fid = resJS.getJSONArray(0).getString(0);
extended.put("FID", fid);
}
}
//如果fid还为空, 则证明金蝶不存在员工信息
if(StringUtils.isEmpty(fid)){
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())));
}
}else{
String result = KingdeeRequestUtils.updateJobInfo(Collections.asMap( "userCode", sysStaff.getCode(), "deptCode", deptNum, "jobCode", positionNum, "oldJobCode", oldPositionNum,"FSTAFFID", fstaffId));
if(StringUtils.isNotEmpty(result)){
extended.put("FSTAFFID",JSON.parseObject(result).getString("FSTAFFID"));
sysStaff.setExtended(extended.toString());
}
}
}
//判断员工更换公司
if(!old_staff.getCompanyName().equals(sysStaff.getCompanyName())) {
@ -293,8 +333,7 @@ public class SysStaffServiceImpl extends ServiceImpl<SysStaffMapper, SysStaff> i
sysStaff.setUpdateTime(DateUtils.getNowDate());
sysStaff.setUpdateBy(SecurityUtils.getUsername());
int i= getBaseMapper().updateSysStaff(sysStaff);
if(i < 1){
if(!updateById(sysStaff)){
return AjaxResult.error();
}
//修改考勤统计

View File

@ -103,7 +103,7 @@ PUBLIC "-//mybatis.org//DTD Mapper 3.0//EN"
<select id="selectRzLeaveDetailByUserIdAndDate" resultMap="RzLeaveDetailResult">
select d.*
from rz_leave_detail d left join rz_leave l on d.leave_id = l.id,
from rz_leave_detail d left join rz_leave l on d.leave_id = l.id
where l.user_id = #{userId}
and l.del_flag = '0'
and DATE_FORMAT( d.leave_start_time, '%Y%m%d' ) &lt;= DATE_FORMAT(#{date} , '%Y%m%d' )

View File

@ -76,6 +76,8 @@ PUBLIC "-//mybatis.org//DTD Mapper 3.0//EN"
<if test="isOvertimePay != null and isOvertimePay != ''"> and ss.is_overtime_pay = #{isOvertimePay}</if>
<if test="zsFlag != null and zsFlag != ''"> and ss.zs_flag = #{zsFlag}</if>
<if test="companyName != null and companyName != ''"> and ss.company_name = #{companyName}</if>
order by create_time desc
</where>
</select>