From bb970a144a2ea7fe3122a478c19eacc31c4819a5 Mon Sep 17 00:00:00 2001 From: andy <1042025947@qq.com> Date: Sat, 26 Jul 2025 09:55:57 +0800 Subject: [PATCH] =?UTF-8?q?=E6=8E=A8=E9=80=81=E9=87=91=E8=9D=B6=E8=B0=83?= =?UTF-8?q?=E6=95=B4?= MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit --- evo-admin/pom.xml | 6 + .../evo/kingdeeUtils/KingdeeRequestUtils.java | 108 +++++++++++++++--- .../com/evo/kingdeeUtils/kenum/BaseEnum.java | 2 + .../kingdeeUtils/kenum/KingdeeParamsEnum.java | 20 +++- .../service/impl/SysStaffServiceImpl.java | 19 ++- .../src/main/resources/kdwebapi.properties | 13 +++ .../mapper/system/SysStaffMapper.xml | 1 + 7 files changed, 142 insertions(+), 27 deletions(-) create mode 100644 evo-admin/src/main/resources/kdwebapi.properties diff --git a/evo-admin/pom.xml b/evo-admin/pom.xml index ae0e554..e967172 100644 --- a/evo-admin/pom.xml +++ b/evo-admin/pom.xml @@ -223,6 +223,12 @@ system ${project.basedir}/src/main/resources/lib/k3cloud-webapi-sdk-java11-v8.2.0.jar + + + com.google.code.gson + gson + 2.8.9 + diff --git a/evo-admin/src/main/java/com/evo/kingdeeUtils/KingdeeRequestUtils.java b/evo-admin/src/main/java/com/evo/kingdeeUtils/KingdeeRequestUtils.java index b5201bb..da6483d 100644 --- a/evo-admin/src/main/java/com/evo/kingdeeUtils/KingdeeRequestUtils.java +++ b/evo-admin/src/main/java/com/evo/kingdeeUtils/KingdeeRequestUtils.java @@ -1,6 +1,7 @@ package com.evo.kingdeeUtils; import com.alibaba.fastjson2.JSON; +import com.alibaba.fastjson2.JSONArray; import com.evo.common.utils.DateUtils; import com.evo.common.utils.spring.SpringUtils; import com.evo.kingdeeUtils.exception.KingdeeException; @@ -10,6 +11,7 @@ import com.evo.kingdeeUtils.mapper.LogKingDeeMapper; import com.evo.kingdeeUtils.vo.LogKingDee; import com.kingdee.bos.webapi.sdk.K3CloudApi; import lombok.extern.slf4j.Slf4j; +import org.apache.commons.lang3.StringUtils; import java.util.Date; import java.util.List; @@ -39,17 +41,26 @@ public class KingdeeRequestUtils { * FPostDept_FNumber_岗位所属部门编号 */ public static void employeeSave(Map params){ -// request(params, KingdeeParamsEnum.Employee.SAVE); + request(params, KingdeeParamsEnum.Employee.SAVE); } /*** * 员工禁用接口 * @param params * 参数说明对照关系: key-value - * Numbers-员工编码 (多个使用,分割, 即: 001,002,003) + * userCode-员工编码 (多个使用,分割, 即: 001,002,003) */ public static void employeeDisabled(Map params){ -// request(params, KingdeeParamsEnum.Employee.DISABLED); + excuteOperation(params, KingdeeParamsEnum.Employee.DISABLED); + } + /*** + * 员工反禁用接口 + * @param params + * 参数说明对照关系: key-value + * userCode-员工编码 (多个使用,分割, 即: 001,002,003) + */ + public static void employeeReverseDisabled(Map params){ + excuteOperation(params, KingdeeParamsEnum.Employee.REVERSE_DISABLED); } /*** @@ -58,15 +69,87 @@ public class KingdeeRequestUtils { * 参数说明对照关系: key-value * NeedUpDateFields-更新字段 (多个使用,分割, 如:FDept_FNumber,FPosition_FNumber ) * FNumber-员工编号 - * FDept_FNumber-部门编号 - * FPosition_FNumber-岗位编号 + * deptCode-部门编号 + * jobCode-岗位编号 + * + * + */ public static void updateJobInfo(Map params){ -// request(params, KingdeeParamsEnum.JobInfo.UPDATE); + if(StringUtils.isNotEmpty(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); } + + private static void request(Map params, BaseEnum paramEnum){ log.error("{}====> 接口调用, 参数为:{} ", paramEnum.getDes(), JSON.toJSONString(params)); + String requestParam = buildParams(params, paramEnum); + String resultJson = ""; + try { + K3CloudApi client = new K3CloudApi(); + resultJson = client.save(paramEnum.getFromId(), requestParam); + log.info("{}====>接口返回结果: {}", paramEnum.getDes(), resultJson); + + } catch (Exception e) { + resultJson = e.getMessage(); + log.error("{}====>请求错误: {}", paramEnum.getDes(), e.getMessage()); + e.printStackTrace(); + }finally { + //记录日志 + instLog(paramEnum, params, requestParam, resultJson); + } + + } + + + public static String executeBillQuery(Map params, BaseEnum paramEnum){ + K3CloudApi client = new K3CloudApi(); + //请求参数,要求为json字符串 + String jsonData = buildParams(params, paramEnum);; + String resultJson = ""; + try { + //调用接口 + resultJson = String.valueOf(client.executeBillQuery(jsonData)); + } catch (Exception e) { + resultJson = e.getMessage(); + log.error("{}====>请求错误: {}", paramEnum.getDes(), e.getMessage()); + }finally { + //记录日志 + instLog(paramEnum, params, jsonData, resultJson); + } + + return resultJson; + } + + public static void excuteOperation(Map params, BaseEnum paramEnum){ + K3CloudApi client = new K3CloudApi(); + //请求参数,要求为json字符串 + String jsonData = buildParams(params, paramEnum);; + String resultJson = ""; + try { + //调用接口 + resultJson = client.excuteOperation(paramEnum.getFromId(),paramEnum.getOperateNumber(),jsonData); + } catch (Exception e) { + resultJson = e.getMessage(); + log.error("{}====>请求错误: {}", paramEnum.getDes(), e.getMessage()); + }finally { + //记录日志 + instLog(paramEnum, params, jsonData, resultJson); + } + + } + + + + + private static String buildParams(Map params, BaseEnum paramEnum){ List keyList = params.entrySet().stream().map(Map.Entry::getKey).collect(Collectors.toList()); Map requiredParams = paramEnum.getRequiredParams(); for (String key : requiredParams.keySet()){ @@ -80,19 +163,8 @@ public class KingdeeRequestUtils { } //更新时间 requestParam = requestParam.replaceAll("date"+KingdeeParamsEnum.REQUEST_PARAM_SUFFIX, DateUtils.parseDateToStr("yyyy-MM-dd HH:mm:ss", new Date())); - String resultJson = ""; - try { - K3CloudApi client = new K3CloudApi(); - resultJson = client.save(paramEnum.getFromId(), requestParam); - log.info("{}====>接口返回结果: {}", paramEnum.getDes(), resultJson); - } catch (Exception e) { - resultJson = e.getMessage(); - log.error("{}====>请求错误: {}", paramEnum.getDes(), e.getMessage()); - }finally { - //记录日志 - instLog(paramEnum, params, requestParam, resultJson); - } + return requestParam; } diff --git a/evo-admin/src/main/java/com/evo/kingdeeUtils/kenum/BaseEnum.java b/evo-admin/src/main/java/com/evo/kingdeeUtils/kenum/BaseEnum.java index ff2dd55..57968fd 100644 --- a/evo-admin/src/main/java/com/evo/kingdeeUtils/kenum/BaseEnum.java +++ b/evo-admin/src/main/java/com/evo/kingdeeUtils/kenum/BaseEnum.java @@ -21,4 +21,6 @@ public interface BaseEnum { abstract String getFromId(); abstract String getDes(); + + abstract String getOperateNumber(); } diff --git a/evo-admin/src/main/java/com/evo/kingdeeUtils/kenum/KingdeeParamsEnum.java b/evo-admin/src/main/java/com/evo/kingdeeUtils/kenum/KingdeeParamsEnum.java index 1335b0d..0476a2a 100644 --- a/evo-admin/src/main/java/com/evo/kingdeeUtils/kenum/KingdeeParamsEnum.java +++ b/evo-admin/src/main/java/com/evo/kingdeeUtils/kenum/KingdeeParamsEnum.java @@ -30,7 +30,8 @@ public enum KingdeeParamsEnum { public static final String REQUEST_PARAM_SUFFIX="_param"; public enum JobInfo implements BaseEnum{ - UPDATE("岗位信息修改", "BD_NEWSTAFF", Collections.asMap("FNumber","员工编号不能为空","FDept_FNumber","部门编号不能为空","FPosition_FNumber","岗位编号不能为空"),"{\"NeedUpDateFields\":[NeedUpDateFields"+REQUEST_PARAM_SUFFIX+"],\"NeedReturnFields\":[],\"IsDeleteEntry\":\"true\",\"SubSystemId\":\"\",\"IsVerifyBaseDataField\":\"false\",\"IsEntryBatchFill\":\"true\",\"ValidateFlag\":\"true\",\"NumberSearch\":\"true\",\"IsAutoAdjustField\":\"true\",\"InterationFlags\":\"\",\"IgnoreInterationFlag\":\"\",\"IsControlPrecision\":\"false\",\"ValidateRepeatJson\":\"false\",\"Model\":{\"FSTAFFID\":0,\"FNumber\":\"FNumber"+REQUEST_PARAM_SUFFIX+"\",\"FPerson\":{\"FNumber\":\"FNumber"+REQUEST_PARAM_SUFFIX+"\"},\"FDept\":{\"FNumber\":\"FDept_FNumber"+REQUEST_PARAM_SUFFIX+"\"},\"FPosition\":{\"FNumber\":\"FPosition_FNumber"+REQUEST_PARAM_SUFFIX+"\"},\"FStartDate\":\"date"+REQUEST_PARAM_SUFFIX+"\",\"FEmpInfoId\":{\"FNumber\":\"FNumber"+REQUEST_PARAM_SUFFIX+"\"},\"FPOSTBILLEntity\":{\"FIsFirstPost\":false},\"FOtherEntity\":{},\"FSHRMapEntity\":{}}}"), + 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\":{}}}"), + 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; String fromId; @@ -58,21 +59,30 @@ public enum KingdeeParamsEnum { public String getDes() { return this.des; } + @Override + public String getOperateNumber() {return "";} } /*** * 金蝶请求参数, 员工 */ public enum Employee implements BaseEnum { - SAVE("员工保存", "BD_Empinfo", Collections.asMap("FName","员工姓名不能为空","FStaffNumber","员工编号不能为空","FNumber","岗位编号不能为空"),"{\"NeedUpDateFields\":[],\"NeedReturnFields\":[],\"IsDeleteEntry\":\"true\",\"SubSystemId\":\"\",\"IsVerifyBaseDataField\":\"false\",\"IsEntryBatchFill\":\"true\",\"ValidateFlag\":\"true\",\"NumberSearch\":\"true\",\"IsAutoAdjustField\":\"true\",\"InterationFlags\":\"\",\"IgnoreInterationFlag\":\"\",\"IsControlPrecision\":\"false\",\"ValidateRepeatJson\":\"false\",\"Model\":{\"FID\":0,\"FName\":\"FName"+REQUEST_PARAM_SUFFIX+"\",\"FStaffNumber\":\"FStaffNumber"+REQUEST_PARAM_SUFFIX+"\",\"FCreateSaler\":false,\"FCreateUser\":false,\"FCreateCashier\":false,\"FJoinDate\":\"date"+REQUEST_PARAM_SUFFIX+"\",\"FSHRMapEntity\":{},\"FPostEntity\":[{\"FPostDept\":{\"FNumber\":\"FPostDept_FNumber"+REQUEST_PARAM_SUFFIX+"\"},\"FPost\":{\"FNumber\":\"FNumber"+REQUEST_PARAM_SUFFIX+"\"},\"FStaffStartDate\":\"date"+REQUEST_PARAM_SUFFIX+"\",\"FIsFirstPost\":true,\"FStaffDetails\":0}]}}"), - DISABLED("员工禁用","BD_Empinfo", Collections.asMap("Numbers","员工编码不能为空"),"{\"Numbers\":[Numbers"+REQUEST_PARAM_SUFFIX+"],\"Ids\":\"\",\"PkEntryIds\":[],\"UseOrgId\":0,\"NetworkCtrl\":\"\",\"IgnoreInterationFlag\":\"\"}") + 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}]}}"), + 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\":\"\"}"), ; String des; String fromId; + + String operateNumber; + Map requiredParams; String paramJson; - Employee(String des, String fromId, Map requiredParams, String paramJson) { + + + Employee(String des, String fromId, String operateNumber, Map requiredParams, String paramJson) { this.des = des; this.fromId = fromId; + this.operateNumber = operateNumber; this.requiredParams = requiredParams; this.paramJson = paramJson; } @@ -92,6 +102,8 @@ public enum KingdeeParamsEnum { public String getDes() { return this.des; } + @Override + public String getOperateNumber() {return this.operateNumber;} } } 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 b0c21f2..c1d494a 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 @@ -161,7 +161,7 @@ public class SysStaffServiceImpl extends ServiceImpl i initCheckDevice(sysStaff); //新增员工信息到金蝶 if(StringUtils.isNotEmpty(sysStaff.getJobCode())){ - KingdeeRequestUtils.employeeSave(Collections.asMap("FName", sysStaff.getName(), "FStaffNumber", sysStaff.getCode(), "FNumber", sysStaff.getJobCode().split("_")[0])); + KingdeeRequestUtils.employeeSave(Collections.asMap("userName", sysStaff.getName(), "userCode", sysStaff.getCode(), "jobCode", sysStaff.getJobCode().split("_")[0],"deptCode", sysStaff.getJobCode().split("_")[1])); } return AjaxResult.success(); } @@ -190,7 +190,7 @@ public class SysStaffServiceImpl extends ServiceImpl i dkj_list.add(com.evo.equipment.constant.Constants.EQ_DEVICE_PUBLIC_CODE); //公共 dkj_list.add(sysStaff.getTimeClock()); //下发照片 - eqSnDetailService.sendPhoto(dkj_list, Collections.asList(Collections.asMap("userId", String.valueOf(sysStaff.getUserId()), "name", sysStaff.getName(), "photoUrl", ParamUtils.getGlobalStaticUrl()+upload.getFileName()))); + //eqSnDetailService.sendPhoto(dkj_list, Collections.asList(Collections.asMap("userId", String.valueOf(sysStaff.getUserId()), "name", sysStaff.getName(), "photoUrl", ParamUtils.getGlobalStaticUrl()+upload.getFileName()))); } } @@ -235,8 +235,8 @@ public class SysStaffServiceImpl extends ServiceImpl i return AjaxResult.error(); } //如果是离职, 推送金蝶禁用 - if(StringUtils.isNotEmpty(sysStaff.getJobCode())){ - KingdeeRequestUtils.employeeDisabled(Collections.asMap("Numbers",sysStaff.getJobCode().split("_")[0])); + if(StringUtils.isNotEmpty(sysStaff.getCode())){ + KingdeeRequestUtils.employeeDisabled(Collections.asMap("userCode","\""+sysStaff.getCode()+"\"")); } return AjaxResult.success(); @@ -263,7 +263,11 @@ public class SysStaffServiceImpl extends ServiceImpl i deptNum = sysStaff.getJobCode().split("_")[1]; positionNum = sysStaff.getJobCode().split("_")[0]; } - KingdeeRequestUtils.updateJobInfo(Collections.asMap("NeedUpDateFields","FDept,FPosition", "FNumber", sysStaff.getCode(), "FDept_FNumber", deptNum, "FPosition_FNumber", positionNum)); + String oldPositionNum = ""; + 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)); } //判断员工更换公司 if(!old_staff.getCompanyName().equals(sysStaff.getCompanyName())) { @@ -741,6 +745,11 @@ public class SysStaffServiceImpl extends ServiceImpl i try { update(new UpdateWrapper().set("status", Constants.JOB_STATIS_1).set("quit_date", null).eq("user_id", userId)); SysStaff sysStaff = getBaseMapper().selectById(userId); + //恢复金蝶 + if(StringUtils.isNotEmpty(sysStaff.getCode())){ + KingdeeRequestUtils.employeeReverseDisabled(Collections.asMap("userCode","\""+sysStaff.getCode()+"\"")); + } + //打卡统计,打卡详情 rzAttendanceStatisticalService.createRzAttendance(sysStaff, Collections.emptyList(), null); //处理餐饮信息 diff --git a/evo-admin/src/main/resources/kdwebapi.properties b/evo-admin/src/main/resources/kdwebapi.properties new file mode 100644 index 0000000..cea9c28 --- /dev/null +++ b/evo-admin/src/main/resources/kdwebapi.properties @@ -0,0 +1,13 @@ +#??ID-PROD +X-KDApi-AcctID = 670768a85463de +#X-KDApi-AcctID = 6723465a38c722 +X-KDApi-UserName = Administrator +#??IDID +X-KDApi-AppID = 288012_Rc0C0zCG2lga0/Vs2Y4pzYSL6hQcWOko +# ?? +X-KDApi-AppSec = 8a76cd746fa24636b2c65ef9f313c640 +X-KDApi-ServerUrl =http://192.168.5.8/K3Cloud/ +X-KDApi-LCID = 2052 +X-KDApi-OrgNum = 100 +X-KDApi-ConnectTimeout = 120 +X-KDApi-RequestTimeout = 120 diff --git a/evo-admin/src/main/resources/mapper/system/SysStaffMapper.xml b/evo-admin/src/main/resources/mapper/system/SysStaffMapper.xml index 7521f1f..980851d 100644 --- a/evo-admin/src/main/resources/mapper/system/SysStaffMapper.xml +++ b/evo-admin/src/main/resources/mapper/system/SysStaffMapper.xml @@ -229,6 +229,7 @@ PUBLIC "-//mybatis.org//DTD Mapper 3.0//EN" image_url = #{imageUrl}, time_clock = #{timeClock}, subsidys = #{subsidys}, + job_Code=#{jobCode}, where user_id = #{userId}