From f91c09e452ce121a66755e8b6f133efeac4edead Mon Sep 17 00:00:00 2001
From: 啊鑫 <t2856754968@163.com>
Date: 星期二, 18 二月 2025 14:14:27 +0800
Subject: [PATCH] 钉钉获取人员的接口
---
src/main/java/com/gs/xky/task/ScheduledTasks.java | 27 +
src/main/java/com/gs/xky/dto/EmployeeInfo.java | 78 ++++
src/main/java/com/gs/xky/entity/SysUser.java | 211 ++++++++++++
src/main/java/com/gs/xky/mapper/MesStaffMapper.java | 23 +
src/main/java/com/gs/xky/entity/MesStaff.java | 125 +++++++
src/main/java/com/gs/xky/service/MesStaffService.java | 20 +
src/main/java/com/gs/xky/config/DingTalkResponse.java | 29 +
src/test/java/com/gs/xky/XkyApplicationTests.java | 51 ++
src/main/java/com/gs/xky/service/ApiService.java | 48 ++
src/main/java/com/gs/xky/service/Impl/MesStaffServiceImpl.java | 238 ++++++++++++++
src/main/java/com/gs/xky/service/XkyService.java | 2
src/main/java/com/gs/xky/service/SysUserService.java | 13
src/main/java/com/gs/xky/mapper/SysUserMapper.java | 18 +
src/main/java/com/gs/xky/config/DingTalkParam.java | 50 ++
src/main/resources/mapper/SysUserMapper.xml | 7
src/main/java/com/gs/xky/service/Impl/SysUserServiceImpl.java | 22 +
src/main/resources/mapper/MesStaffMapper.xml | 22 +
17 files changed, 979 insertions(+), 5 deletions(-)
diff --git a/src/main/java/com/gs/xky/config/DingTalkParam.java b/src/main/java/com/gs/xky/config/DingTalkParam.java
new file mode 100644
index 0000000..f960ba4
--- /dev/null
+++ b/src/main/java/com/gs/xky/config/DingTalkParam.java
@@ -0,0 +1,50 @@
+package com.gs.xky.config;
+
+
+import cn.hutool.core.date.DateUtil;
+import com.fasterxml.jackson.annotation.JsonInclude;
+import lombok.AllArgsConstructor;
+import lombok.Data;
+import lombok.NoArgsConstructor;
+import lombok.ToString;
+
+import java.util.Date;
+
+@Data
+@AllArgsConstructor
+@NoArgsConstructor
+@ToString
+@JsonInclude(JsonInclude.Include.NON_EMPTY) // 杩欒浼氭帓闄ゆ帀鎵�鏈夊�间负 null 鐨勫瓧娈�
+public class DingTalkParam {
+
+ private String AccessToken = "21AAA085-BE3A-4BB4-BFA4-1D0A8F973EAD";
+
+ private String LogonInfo;
+
+ public DingTalkParam(int flag) {
+
+ Date now = new Date();
+
+ // 鑾峰彇涓嬩竴涓暣鐐规椂闂�
+ Date nextHour = getNextHour(now);
+
+ String expiredDate = DateUtil.format(nextHour, "yyyy-MM-dd HH:mm:ss");
+
+ String serviceCode = "getEmployeeListForMes";
+ if (flag == 1) {
+ serviceCode = "getEmployeeIncUpdateListForMes";
+ }
+
+// String template = "Hello, %s! Your age is %d.";
+ String template = "LoginName=sa&BusinessUnit=0&LogonRegion=zh-CN&ExpiredDate=%s&ServiceCode=%s";
+ String result = String.format(template, expiredDate, serviceCode);
+ this.LogonInfo = result;
+ }
+
+ private Date getNextHour(Date date) {
+ // 浣跨敤 Hutool 鎴柇鍒板綋鍓嶅皬鏃�
+ Date truncatedDate = DateUtil.beginOfHour(date);
+ // 娣诲姞涓�涓皬鏃�
+ return DateUtil.offsetHour(truncatedDate, 1);
+ }
+}
diff --git a/src/main/java/com/gs/xky/config/DingTalkResponse.java b/src/main/java/com/gs/xky/config/DingTalkResponse.java
new file mode 100644
index 0000000..adf3b64
--- /dev/null
+++ b/src/main/java/com/gs/xky/config/DingTalkResponse.java
@@ -0,0 +1,29 @@
+package com.gs.xky.config;
+
+
+import com.fasterxml.jackson.annotation.JsonIgnoreProperties;
+import com.fasterxml.jackson.annotation.JsonProperty;
+import lombok.AllArgsConstructor;
+import lombok.Data;
+import lombok.NoArgsConstructor;
+
+import java.util.List;
+
+@Data
+@AllArgsConstructor
+@NoArgsConstructor
+@JsonIgnoreProperties(ignoreUnknown = true)
+public class DingTalkResponse<T> {
+
+ @JsonProperty("Message")
+ private String message;
+
+ @JsonProperty("MessageID")
+ private String messageID;
+
+ @JsonProperty("IsSuccess")
+ private String isSuccess;
+
+ @JsonProperty("Data")
+ private List<T> data;
+}
diff --git a/src/main/java/com/gs/xky/dto/EmployeeInfo.java b/src/main/java/com/gs/xky/dto/EmployeeInfo.java
new file mode 100644
index 0000000..1faa5c2
--- /dev/null
+++ b/src/main/java/com/gs/xky/dto/EmployeeInfo.java
@@ -0,0 +1,78 @@
+package com.gs.xky.dto;
+
+
+import com.fasterxml.jackson.annotation.JsonProperty;
+import lombok.AllArgsConstructor;
+import lombok.Data;
+import lombok.NoArgsConstructor;
+import lombok.ToString;
+
+@Data
+@NoArgsConstructor
+@ToString
+@AllArgsConstructor
+public class EmployeeInfo {
+
+ /**
+ * 鍛樺伐鍞竴鏍囪瘑绗�
+ */
+ @JsonProperty("PERSONID")
+ private String personId;
+
+ /**
+ * 鍛樺伐璐﹀彿
+ */
+ @JsonProperty("EMPLOYEEID")
+ private String employeeId;
+
+ /**
+ * 鍛樺伐鐪熷疄濮撳悕
+ */
+ @JsonProperty("TRUENAME")
+ private String trueName;
+
+ /**
+ * 宀椾綅鍚嶇О
+ */
+ @JsonProperty("NAMES")
+ private String names;
+
+ /**
+ * 鏄惁鏄叧閿矖浣嶏紙1 鏄紝0 鍚︼級
+ */
+ @JsonProperty("IS_CORE")
+ private Integer isCore;
+
+ /**
+ * 鍦ㄨ亴鐘舵��
+ */
+ @JsonProperty("State")
+ private String state;
+
+ /**
+ * 鍏ヨ亴鏃ユ湡
+ */
+ @JsonProperty("ATTENDONDATE")
+ private String attendOnDate;
+
+ /**
+ * 绂昏亴鏃ユ湡
+ */
+ @JsonProperty("DIMISSIONDATE")
+ private String dimissionDate;
+
+ /**
+ * 鐩村睘缁勭粐
+ */
+ @JsonProperty("UNITNAME")
+ private String unitName;
+
+ /**
+ * 鍏徃鍚嶇О
+ */
+ @JsonProperty("CUNITNAME")
+ private String cUnitName;
+
+ @JsonProperty("laowugongsi")
+ private String laowugongsi;
+}
diff --git a/src/main/java/com/gs/xky/entity/MesStaff.java b/src/main/java/com/gs/xky/entity/MesStaff.java
new file mode 100644
index 0000000..8a23996
--- /dev/null
+++ b/src/main/java/com/gs/xky/entity/MesStaff.java
@@ -0,0 +1,125 @@
+package com.gs.xky.entity;
+
+import com.baomidou.mybatisplus.annotation.*;
+import lombok.Data;
+
+import java.io.Serializable;
+import java.util.Date;
+
+/**
+ * 鍛樺伐淇℃伅琛�
+ *
+ * @TableName MES_STAFF
+ */
+@TableName(value = "MES_STAFF")
+@Data
+@KeySequence(value = "SEQ_MES_STAFF", dbType = DbType.ORACLE)
+public class MesStaff implements Serializable {
+ @TableField(exist = false)
+ private static final long serialVersionUID = 1L;
+ /**
+ * ID
+ */
+ @TableId
+ private Long id;
+ /**
+ * 鍛樺伐缂栫爜
+ */
+ private String staffNo;
+ /**
+ * 鍛樺伐濮撳悕
+ */
+ private String staffName;
+ /**
+ * 閮ㄩ棬缂栫爜
+ */
+ private String departmentNo;
+ /**
+ * 閮ㄩ棬鍚嶇О
+ */
+ private String departmentName;
+ /**
+ * 宀椾綅缂栫爜
+ */
+ private String positionCode;
+ /**
+ * 宀椾綅鍚嶇О
+ */
+ private String positionName;
+ /**
+ * 鎵嬫満鍙�
+ */
+ private String phoneNumber;
+ /**
+ * 浠诲矖寮�濮嬫棩鏈�
+ */
+ private Date startDate;
+ /**
+ * 澶囨敞
+ */
+ private String remark;
+ /**
+ * 鍒涘缓缁勭粐
+ */
+ private Long createOrg;
+ /**
+ * 浣跨敤缁勭粐
+ */
+ private String useOrg;
+ /**
+ * 鑷畾涔夊瓧娈�3
+ */
+ private String remark3;
+ /**
+ * 鑷畾涔夊瓧娈�4
+ */
+ private String remark4;
+ /**
+ * 鑷畾涔夊瓧娈�5
+ */
+ private String remark5;
+ /**
+ * 鍒涘缓浜�
+ */
+ private String createBy;
+ /**
+ * 鍒涘缓鏃堕棿
+ */
+ private Date createDate;
+ /**
+ * 鏇存柊浜�
+ */
+ private String lastupdateBy;
+ /**
+ * 鏇存柊鏃堕棿
+ */
+ private Date lastupdateDate;
+ /**
+ * 澶囨敞
+ */
+ private String memo;
+ /**
+ * 鐢熶骇绾�
+ */
+ private String lineNo;
+ /**
+ * 鐢熶骇鍛樺伐鏍囪瘑
+ */
+ private Long workMk;
+ /**
+ * 鏄惁绂佺敤
+ */
+ private String fforbidStatus;
+ /**
+ * 涓氬姟鍛樼被鍨�
+ */
+ private String operatorType;
+ /**
+ * 绂昏亴鏃堕棿
+ */
+ private Date separationTime;
+ /**
+ * 鏄惁鏄叧閿矖浣� 0锛氬惁锛�1锛氭槸
+ */
+ private String keyPosts;
+}
\ No newline at end of file
diff --git a/src/main/java/com/gs/xky/entity/SysUser.java b/src/main/java/com/gs/xky/entity/SysUser.java
new file mode 100644
index 0000000..f55ac3d
--- /dev/null
+++ b/src/main/java/com/gs/xky/entity/SysUser.java
@@ -0,0 +1,211 @@
+package com.gs.xky.entity;
+
+import com.baomidou.mybatisplus.annotation.*;
+import lombok.Data;
+
+import java.io.Serializable;
+import java.util.Date;
+
+/**
+ * @TableName SYS_USER
+ */
+@TableName(value = "SYS_USER")
+@Data
+@KeySequence(value = "BASEINFO", dbType = DbType.ORACLE)
+public class SysUser implements Serializable {
+ @TableField(exist = false)
+ private static final long serialVersionUID = 1L;
+ /**
+ *
+ */
+ @TableId
+ private String fid;
+ /**
+ *
+ */
+ private String fcode;
+ /**
+ *
+ */
+ private String fname;
+ /**
+ *
+ */
+ private String fpassword;
+ /**
+ *
+ */
+ private String fbranch;
+ /**
+ *
+ */
+ private String fplant;
+ /**
+ *
+ */
+ private String fsystem;
+ /**
+ *
+ */
+ private String freadonly;
+ /**
+ *
+ */
+ private String floginName;
+ /**
+ * 閮ㄩ棬
+ */
+ private String departmentid;
+ /**
+ * 瑙掕壊
+ */
+ private Long roleid;
+ /**
+ * 鐝
+ */
+ private String expField1;
+ /**
+ * 绾夸綋
+ */
+ private String expField2;
+ /**
+ * 鐓х墖
+ */
+ private Object expField3;
+ /**
+ * 鑱旂郴鏂瑰紡
+ */
+ private String expField4;
+ /**
+ * 鍥剧墖鍚�
+ */
+ private String expField5;
+ /**
+ * 1涓哄紑鍙戠敤鎴凤紝0涓轰竴鑸搷浣滅敤鎴�
+ */
+ private Integer lever;
+ /**
+ *
+ */
+ private String createBy;
+ /**
+ *
+ */
+ private Date createDate;
+ /**
+ *
+ */
+ private Integer dev;
+ /**
+ *
+ */
+ private Integer tet;
+ /**
+ *
+ */
+ private Integer prd;
+ /**
+ * 鏄惁涓虹鐞嗕汉鍛�
+ */
+ private Integer ismanager;
+ /**
+ * 鏄惁涓洪噰闆嗕汉鍛�
+ */
+ private Integer isacq;
+ /**
+ *
+ */
+ private String expField6;
+ /**
+ * 杞﹂棿缂栫爜
+ */
+ private String expField7;
+ /**
+ *
+ */
+ private String expField8;
+ /**
+ *
+ */
+ private String expField9;
+ /**
+ *
+ */
+ private String expFiel10;
+ /**
+ *
+ */
+ private String expFiel11;
+ /**
+ * 璐ㄩ噺妯″潡棣栦欢纭-鍘熷洜鍒嗘瀽璐d换浜�
+ */
+ private Integer qmUser;
+ /**
+ * 鏄惁涓轰复鏃剁敤鎴�
+ */
+ private Integer status;
+ /**
+ * 1涓虹鑱岋紝0涓烘甯稿憳宸�
+ */
+ private Integer isdeparture;
+ /**
+ * 鍏徃
+ */
+ private String fcompany;
+ /**
+ * 鏄惁鏈夊垹闄ょ壒鏉�
+ */
+ private Long delFlag;
+ /**
+ * 鎺ユ敹鐗╂枡鏄惁杩涜妫�鏌�
+ */
+ private Long checkFlag;
+ /**
+ *
+ */
+ private Long expFiel12;
+ /**
+ * 宸ュ巶
+ */
+ private String ffactory;
+ /**
+ *
+ */
+ private Date pswEditTime;
+ /**
+ * 棣栨鐧婚檰
+ */
+ private Integer firstLogin;
+ /**
+ * 鏈夋晥鏈�
+ */
+ private Date periodValidity;
+ /**
+ * 宸ュ巶
+ */
+ private String factory;
+ /**
+ *
+ */
+ private String company;
+ /**
+ *
+ */
+ private Date lastlogin;
+ /**
+ * 鏈�鍚庢洿鏂颁汉
+ */
+ private String lastupdateBy;
+ /**
+ * 鏈�鍚庢洿鏂版棩鏈�
+ */
+ private Date lastupdateDate;
+ /**
+ *
+ */
+ private Long sid;
+ /**
+ *
+ */
+ private String organizeId;
+}
\ No newline at end of file
diff --git a/src/main/java/com/gs/xky/mapper/MesStaffMapper.java b/src/main/java/com/gs/xky/mapper/MesStaffMapper.java
new file mode 100644
index 0000000..7005096
--- /dev/null
+++ b/src/main/java/com/gs/xky/mapper/MesStaffMapper.java
@@ -0,0 +1,23 @@
+package com.gs.xky.mapper;
+
+import com.baomidou.mybatisplus.core.mapper.BaseMapper;
+import com.gs.xky.entity.MesStaff;
+
+/**
+ * @author 28567
+ * @description 閽堝琛ㄣ�怣ES_STAFF(鍛樺伐淇℃伅琛�)銆戠殑鏁版嵁搴撴搷浣淢apper
+ * @createDate 2025-02-17 20:59:36
+ * @Entity com.gs.xky.entity.MesStaff
+ */
+public interface MesStaffMapper extends BaseMapper<MesStaff> {
+
+ long getNextVal();
+
+ int updateStaff();
+
+ int deleteStaff();
+}
+
+
+
+
diff --git a/src/main/java/com/gs/xky/mapper/SysUserMapper.java b/src/main/java/com/gs/xky/mapper/SysUserMapper.java
new file mode 100644
index 0000000..4d9eb2b
--- /dev/null
+++ b/src/main/java/com/gs/xky/mapper/SysUserMapper.java
@@ -0,0 +1,18 @@
+package com.gs.xky.mapper;
+
+import com.baomidou.mybatisplus.core.mapper.BaseMapper;
+import com.gs.xky.entity.SysUser;
+
+/**
+ * @author 28567
+ * @description 閽堝琛ㄣ�怱YS_USER銆戠殑鏁版嵁搴撴搷浣淢apper
+ * @createDate 2025-02-17 21:00:07
+ * @Entity com.gs.xky.entity.SysUser
+ */
+public interface SysUserMapper extends BaseMapper<SysUser> {
+
+}
+
+
+
+
diff --git a/src/main/java/com/gs/xky/service/ApiService.java b/src/main/java/com/gs/xky/service/ApiService.java
index f4222d9..9569184 100644
--- a/src/main/java/com/gs/xky/service/ApiService.java
+++ b/src/main/java/com/gs/xky/service/ApiService.java
@@ -1,12 +1,17 @@
package com.gs.xky.service;
+import com.fasterxml.jackson.databind.DeserializationFeature;
import com.fasterxml.jackson.databind.ObjectMapper;
+import com.fasterxml.jackson.databind.SerializationFeature;
import com.gs.xky.config.ApiResponse;
+import com.gs.xky.config.DingTalkParam;
+import com.gs.xky.config.DingTalkResponse;
import com.gs.xky.config.XkyCommonParam;
import okhttp3.*;
import org.springframework.stereotype.Service;
import java.io.IOException;
+import java.text.SimpleDateFormat;
import java.util.concurrent.TimeUnit;
@Service
@@ -14,11 +19,18 @@
private final OkHttpClient client;
private final ObjectMapper objectMapper;
+
public ApiService() {
this.client = new OkHttpClient.Builder().connectTimeout(90, TimeUnit.SECONDS) // Set connection timeout
.readTimeout(90, TimeUnit.SECONDS) // Set read timeout
.build();
this.objectMapper = new ObjectMapper();
+
+ objectMapper.configure(DeserializationFeature.FAIL_ON_UNKNOWN_PROPERTIES, false);
+
+ objectMapper.setDateFormat(new SimpleDateFormat("yyyy-MM-dd"));
+
+ objectMapper.configure(SerializationFeature.WRITE_DATES_AS_TIMESTAMPS, false);
}
public <T> ApiResponse<T> sendListRequest(XkyCommonParam requestBody, Class<T> responseType, String url) throws IOException {
@@ -55,4 +67,40 @@
// Optionally set other fields like list or total
return errorResponse;
}
+
+ public <T> DingTalkResponse<T> sendListRequest(DingTalkParam requestBody, Class<T> responseType, String url) throws IOException {
+
+ // 璁剧疆璇锋眰浣撶殑濯掍綋绫诲瀷涓� application/json
+ MediaType mediaType = MediaType.parse("application/json");
+
+ // 灏� ApiCommonParam 瀵硅薄杞崲涓� JSON 瀛楃涓�
+ String jsonBody = objectMapper.writeValueAsString(requestBody);
+
+ // 鍒涘缓璇锋眰浣�
+ RequestBody body = RequestBody.create(mediaType, jsonBody);
+
+ Request request = new Request.Builder()
+ .url(url)
+ .method("POST", body)
+ .addHeader("Content-Type", "application/json")
+ .addHeader("Accept", "*/*")
+ .addHeader("Connection", "keep-alive")
+ .build();
+
+ try (Response response = client.newCall(request).execute()) {
+ if (response.isSuccessful()) {
+ return objectMapper.readValue(response.body().string(), objectMapper.getTypeFactory().constructParametricType(DingTalkResponse.class, responseType));
+ } else {
+ return handleErrorResponse1(response);
+ }
+ }
+ }
+
+ private <T> DingTalkResponse<T> handleErrorResponse1(Response response) throws IOException {
+ DingTalkResponse<T> errorResponse = new DingTalkResponse<>();
+ errorResponse.setIsSuccess(String.valueOf(response.code()));
+// errorResponse.setError(response.message());
+ // Optionally set other fields like list or total
+ return errorResponse;
+ }
}
diff --git a/src/main/java/com/gs/xky/service/Impl/MesStaffServiceImpl.java b/src/main/java/com/gs/xky/service/Impl/MesStaffServiceImpl.java
new file mode 100644
index 0000000..8ca75ae
--- /dev/null
+++ b/src/main/java/com/gs/xky/service/Impl/MesStaffServiceImpl.java
@@ -0,0 +1,238 @@
+package com.gs.xky.service.Impl;
+
+import cn.hutool.core.util.StrUtil;
+import com.baomidou.mybatisplus.core.conditions.query.LambdaQueryWrapper;
+import com.baomidou.mybatisplus.extension.service.impl.ServiceImpl;
+import com.gs.xky.dto.EmployeeInfo;
+import com.gs.xky.entity.MesStaff;
+import com.gs.xky.entity.SysUser;
+import com.gs.xky.mapper.MesStaffMapper;
+import com.gs.xky.service.MesStaffService;
+import com.gs.xky.service.SysUserService;
+import lombok.RequiredArgsConstructor;
+import org.springframework.stereotype.Service;
+import org.springframework.transaction.annotation.Transactional;
+
+import java.text.ParseException;
+import java.text.SimpleDateFormat;
+import java.util.ArrayList;
+import java.util.Date;
+import java.util.List;
+import java.util.stream.Collectors;
+
+/**
+ * @author 28567
+ * @description 閽堝琛ㄣ�怣ES_STAFF(鍛樺伐淇℃伅琛�)銆戠殑鏁版嵁搴撴搷浣淪ervice瀹炵幇
+ * @createDate 2025-02-17 20:59:36
+ */
+@Service
+@RequiredArgsConstructor
+@Transactional(rollbackFor = Exception.class)
+public class MesStaffServiceImpl extends ServiceImpl<MesStaffMapper, MesStaff> implements MesStaffService {
+
+ private final SysUserService sysUserService;
+
+ private final SimpleDateFormat sdf = new SimpleDateFormat("yyyy-MM-dd");
+
+ @Override
+ public boolean SaveStaff(List<EmployeeInfo> employeeInfos) {
+
+ List<SysUser> sysUsers = new ArrayList<>();
+ List<MesStaff> mesStaffs = new ArrayList<>();
+
+ for (EmployeeInfo employeeInfo : employeeInfos) {
+ MesStaff mesStaff = getMesStaff(employeeInfo);
+ SysUser user = getUser(employeeInfo, mesStaff.getId());
+ sysUsers.add(user);
+ mesStaffs.add(mesStaff);
+ }
+
+ // 鎵归噺鎻掑叆鎴栨洿鏂�
+ return batchInsert(sysUsers, mesStaffs);
+ }
+
+ private MesStaff getMesStaff(EmployeeInfo employeeInfo) {
+ MesStaff mesStaff = new MesStaff();
+
+ LambdaQueryWrapper<MesStaff> wrapper = new LambdaQueryWrapper<>();
+ wrapper.eq(MesStaff::getRemark4, employeeInfo.getPersonId());
+
+ MesStaff one = getOne(wrapper, false);
+
+ if (one != null) {
+ mesStaff.setId(one.getId());
+ }
+
+ mesStaff.setStaffNo(employeeInfo.getEmployeeId());
+ mesStaff.setStaffName(employeeInfo.getTrueName());
+ mesStaff.setPositionCode(employeeInfo.getNames());
+
+ mesStaff.setKeyPosts("鍚�");
+
+ if (employeeInfo.getIsCore() != null && employeeInfo.getIsCore() == 1) {
+ mesStaff.setKeyPosts("鏄�");
+ }
+
+ // 澶勭悊鏃ユ湡瀛楁
+
+ try {
+ if (StrUtil.isNotEmpty(employeeInfo.getAttendOnDate())) {
+ Date startDate = sdf.parse(employeeInfo.getAttendOnDate());
+ mesStaff.setStartDate(startDate);
+ }
+ if (StrUtil.isNotEmpty(employeeInfo.getDimissionDate())) {
+ Date separationTime = sdf.parse(employeeInfo.getDimissionDate());
+ mesStaff.setSeparationTime(separationTime);
+ }
+ } catch (ParseException e) {
+ throw new RuntimeException("鏃ユ湡鏍煎紡涓嶆纭�", e);
+ }
+
+ // 璧嬪�煎叾浠栦俊鎭�
+
+// mesStaff.setFforbidStatus("1");
+// if ("绂昏亴".equals(employeeInfo.getState()) || "閫�浼�".equals(employeeInfo.getState())) {
+// mesStaff.setFforbidStatus("0");
+// }
+ mesStaff.setFforbidStatus(employeeInfo.getState());
+ mesStaff.setDepartmentName(employeeInfo.getUnitName());
+ mesStaff.setRemark(StrUtil.isNotEmpty(employeeInfo.getLaowugongsi()) ? "娲鹃仯宸�" : "姝e紡宸�");
+ mesStaff.setRemark3(employeeInfo.getCUnitName());
+ mesStaff.setRemark4(employeeInfo.getPersonId());
+
+ return mesStaff;
+ }
+
+ private SysUser getUser(EmployeeInfo staff, Long id) {
+ SysUser sysUser = new SysUser();
+
+ LambdaQueryWrapper<SysUser> wrapper = new LambdaQueryWrapper<>();
+ wrapper.eq(SysUser::getFcode, staff.getEmployeeId()).eq(SysUser::getFname, staff.getTrueName());
+
+ SysUser one = sysUserService.getOne(wrapper, false);
+ if (one == null) {
+ // 鏄犲皠鍛樺伐ID
+ sysUser.setSid(id);
+ } else {
+ sysUser.setSid(one.getSid());
+ sysUser.setFid(one.getFid());
+ }
+
+ // 鏄犲皠鍛樺伐缂栧彿
+ sysUser.setFcode(staff.getEmployeeId());
+
+ // 鏄犲皠鍛樺伐濮撳悕
+ sysUser.setFname(staff.getTrueName());
+
+ // 璁剧疆鍒濆瀵嗙爜
+ sysUser.setFpassword("8+()./,");
+
+ // 璁剧疆鏉冮檺绾у埆
+ sysUser.setLever(0);
+
+ // 璁剧疆鍏徃浠g爜
+ sysUser.setFcompany("1000");
+
+ // 璁剧疆宸ュ巶浠g爜
+ sysUser.setFfactory("1000");
+
+ // 璁剧疆鍒犻櫎鏍囧織
+ sysUser.setDelFlag(0L);
+
+ // 璁剧疆璁惧鐩稿叧鏍囧織
+ sysUser.setDev(0);
+
+ // 璁剧疆娴嬭瘯鐩稿叧鏍囧織
+ sysUser.setTet(0);
+
+ // 璁剧疆鐢熶骇鐩稿叧鏍囧織
+ sysUser.setPrd(1);
+
+ // 璁剧疆绠$悊鏍囧織
+ sysUser.setIsmanager(0);
+
+ // 璁剧疆鏀惰喘鏍囧織
+ sysUser.setIsacq(0);
+
+ // 璁剧疆鎵╁睍瀛楁
+ sysUser.setExpField9("1020");
+
+ // 璁剧疆璐ㄩ噺妫�娴嬬敤鎴锋爣蹇�
+ sysUser.setQmUser(0);
+
+ // 璁剧疆鐢ㄦ埛鐘舵��
+ sysUser.setStatus(0);
+
+ // 璁剧疆绂昏亴鏍囧織
+ sysUser.setIsdeparture(0);
+
+ // 璁剧疆妫�鏌ユ爣蹇�
+ sysUser.setCheckFlag(0L);
+
+ // 璁剧疆鎵╁睍瀛楁12
+ sysUser.setExpFiel12(0L);
+
+ // 璁剧疆棣栨鐧诲綍鏍囧織
+ sysUser.setFirstLogin(0);
+
+ // 璁剧疆鍒涘缓鏃ユ湡
+ sysUser.setCreateDate(new Date());
+
+ // 璁剧疆瀵嗙爜淇敼鏃堕棿
+ sysUser.setPswEditTime(new Date());
+
+ return sysUser;
+ }
+
+ private boolean batchInsert(List<SysUser> sysUsers, List<MesStaff> mesStaffs) {
+ // 鎵归噺妫�鏌� SysUser 鏄惁瀛樺湪
+ List<Long> sysUserSids = sysUsers.stream().map(SysUser::getSid).collect(Collectors.toList());
+ LambdaQueryWrapper<SysUser> wrapper = new LambdaQueryWrapper<>();
+ wrapper.in(SysUser::getSid, sysUserSids);
+ List<SysUser> existingUsers = sysUserService.list(wrapper);
+
+ // 鍒嗙闇�瑕佹彃鍏ョ殑鏂扮敤鎴�
+ List<SysUser> newUserList = sysUsers.stream().filter(user -> existingUsers.stream().noneMatch(e -> e.getSid().equals(user.getSid()))).collect(Collectors.toList());
+
+ // 鎵归噺鎻掑叆鏂扮敤鎴�
+ if (!newUserList.isEmpty()) {
+ sysUserService.saveBatch(newUserList);
+ }
+
+ // 鎵归噺鍒犻櫎鏃х殑 MesStaff 璁板綍
+ //baseMapper.deleteStaff();
+
+ // 鎵归噺鎻掑叆鏂扮殑 MesStaff 璁板綍
+ if (!mesStaffs.isEmpty()) {
+ saveBatch(mesStaffs);
+ }
+
+ //baseMapper.updateStaff();
+
+ return true;
+ }
+
+ @Override
+ public boolean UpdateStaff(List<EmployeeInfo> employeeInfos) {
+ List<SysUser> sysUsers = new ArrayList<>();
+ List<MesStaff> mesStaffs = new ArrayList<>();
+
+ for (EmployeeInfo employeeInfo : employeeInfos) {
+ MesStaff mesStaff = getMesStaff(employeeInfo);
+ SysUser user = getUser(employeeInfo, mesStaff.getId());
+ sysUsers.add(user);
+ mesStaffs.add(mesStaff);
+ }
+
+ // 鎵归噺鎻掑叆鎴栨洿鏂�
+ boolean b = saveOrUpdateBatch(mesStaffs) && sysUserService.saveOrUpdateBatch(sysUsers);
+
+ baseMapper.updateStaff();
+
+ return b;
+ }
+}
+
+
+
+
diff --git a/src/main/java/com/gs/xky/service/Impl/SysUserServiceImpl.java b/src/main/java/com/gs/xky/service/Impl/SysUserServiceImpl.java
new file mode 100644
index 0000000..4e3e458
--- /dev/null
+++ b/src/main/java/com/gs/xky/service/Impl/SysUserServiceImpl.java
@@ -0,0 +1,22 @@
+package com.gs.xky.service.Impl;
+
+import com.baomidou.mybatisplus.extension.service.impl.ServiceImpl;
+import com.gs.xky.entity.SysUser;
+import com.gs.xky.mapper.SysUserMapper;
+import com.gs.xky.service.SysUserService;
+import org.springframework.stereotype.Service;
+
+/**
+ * @author 28567
+ * @description 閽堝琛ㄣ�怱YS_USER銆戠殑鏁版嵁搴撴搷浣淪ervice瀹炵幇
+ * @createDate 2025-02-17 21:00:07
+ */
+@Service
+public class SysUserServiceImpl extends ServiceImpl<SysUserMapper, SysUser>
+ implements SysUserService {
+
+}
+
+
+
+
diff --git a/src/main/java/com/gs/xky/service/MesStaffService.java b/src/main/java/com/gs/xky/service/MesStaffService.java
new file mode 100644
index 0000000..6124bee
--- /dev/null
+++ b/src/main/java/com/gs/xky/service/MesStaffService.java
@@ -0,0 +1,20 @@
+package com.gs.xky.service;
+
+import com.baomidou.mybatisplus.extension.service.IService;
+import com.gs.xky.dto.EmployeeInfo;
+import com.gs.xky.entity.MesStaff;
+
+import java.util.List;
+
+/**
+ * @author 28567
+ * @description 閽堝琛ㄣ�怣ES_STAFF(鍛樺伐淇℃伅琛�)銆戠殑鏁版嵁搴撴搷浣淪ervice
+ * @createDate 2025-02-17 20:59:36
+ */
+public interface MesStaffService extends IService<MesStaff> {
+
+ boolean SaveStaff(List<EmployeeInfo> employeeInfos);
+
+ boolean UpdateStaff(List<EmployeeInfo> employeeInfos);
+
+}
diff --git a/src/main/java/com/gs/xky/service/SysUserService.java b/src/main/java/com/gs/xky/service/SysUserService.java
new file mode 100644
index 0000000..5d31ee4
--- /dev/null
+++ b/src/main/java/com/gs/xky/service/SysUserService.java
@@ -0,0 +1,13 @@
+package com.gs.xky.service;
+
+import com.baomidou.mybatisplus.extension.service.IService;
+import com.gs.xky.entity.SysUser;
+
+/**
+ * @author 28567
+ * @description 閽堝琛ㄣ�怱YS_USER銆戠殑鏁版嵁搴撴搷浣淪ervice
+ * @createDate 2025-02-17 21:00:07
+ */
+public interface SysUserService extends IService<SysUser> {
+
+}
diff --git a/src/main/java/com/gs/xky/service/XkyService.java b/src/main/java/com/gs/xky/service/XkyService.java
index fb17ddf..4202850 100644
--- a/src/main/java/com/gs/xky/service/XkyService.java
+++ b/src/main/java/com/gs/xky/service/XkyService.java
@@ -44,7 +44,7 @@
XkyCommonParam param = XkyCommonParam.GetInit();
// 璁$畻浜斿垎閽熷墠鐨勬椂闂存埑
- long startDate = currentTimeMillis - (6 * 60 * 1000); // 5 鍒嗛挓 = 5 * 60 * 1000 姣
+ long startDate = currentTimeMillis - (20 * 60 * 1000); // 5 鍒嗛挓 = 5 * 60 * 1000 姣
// 鍒涘缓 BodyParam 瀵硅薄骞惰祴鍊�
BodyParam bodyParam = new BodyParam();
diff --git a/src/main/java/com/gs/xky/task/ScheduledTasks.java b/src/main/java/com/gs/xky/task/ScheduledTasks.java
index 9135558..15cf084 100644
--- a/src/main/java/com/gs/xky/task/ScheduledTasks.java
+++ b/src/main/java/com/gs/xky/task/ScheduledTasks.java
@@ -1,18 +1,30 @@
package com.gs.xky.task;
+import cn.hutool.core.collection.ListUtil;
+import com.gs.xky.config.DingTalkParam;
+import com.gs.xky.config.DingTalkResponse;
+import com.gs.xky.dto.EmployeeInfo;
+import com.gs.xky.service.ApiService;
+import com.gs.xky.service.MesStaffService;
import com.gs.xky.service.XkyService;
import lombok.RequiredArgsConstructor;
import org.springframework.scheduling.annotation.Scheduled;
import org.springframework.stereotype.Component;
import java.io.IOException;
+import java.util.List;
+import java.util.stream.Collectors;
@Component
@RequiredArgsConstructor
public class ScheduledTasks {
private final XkyService xkyService;
+
+ private final ApiService apiService;
+
+ private final MesStaffService staffService;
/**
* 姣忎簲鍒嗛挓鎵ц涓�娆�
@@ -27,4 +39,19 @@
public void getDeviceRealTimeData() throws IOException {
xkyService.GetSaveDetail();
}
+
+ @Scheduled(cron = "0 0 0/1 * * ?")
+ public void getDinTalkData() throws IOException {
+ DingTalkParam dingTalkParam = new DingTalkParam(1);
+
+ DingTalkResponse<EmployeeInfo> employeeInfoDingTalkResponse = apiService.sendListRequest(dingTalkParam, EmployeeInfo.class, "http://192.168.1.64/eHR/eHRExternalService/Service.ashx");
+
+
+ List<EmployeeInfo> collect = employeeInfoDingTalkResponse.getData().stream().filter(s -> "閫犳ⅵ鑰咃紙娴欐睙锛夌鎶�鏈夐檺鍏徃".equals(s.getCUnitName())).collect(Collectors.toList());
+ System.out.println(collect.size());
+
+ List<List<EmployeeInfo>> partition = ListUtil.partition(collect, 100);
+
+ partition.forEach(staffService::UpdateStaff);
+ }
}
diff --git a/src/main/resources/mapper/MesStaffMapper.xml b/src/main/resources/mapper/MesStaffMapper.xml
new file mode 100644
index 0000000..9f5095a
--- /dev/null
+++ b/src/main/resources/mapper/MesStaffMapper.xml
@@ -0,0 +1,22 @@
+<?xml version="1.0" encoding="UTF-8"?>
+<!DOCTYPE mapper
+ PUBLIC "-//mybatis.org//DTD Mapper 3.0//EN"
+ "http://mybatis.org/dtd/mybatis-3-mapper.dtd">
+<mapper namespace="com.gs.xky.mapper.MesStaffMapper">
+ <update id="updateStaff">
+ update SYS_USER a
+ set SID = (select ID from MES_STAFF where STAFF_NO = a.FCODE and STAFF_NAME = a.FNAME)
+ where 1 = 1
+ </update>
+ <delete id="deleteStaff">
+ delete
+ from MES_STAFF
+ where 1 = 1
+ </delete>
+
+
+ <select id="getNextVal" resultType="java.lang.Long">
+ select SEQ_MES_STAFF.NextVal
+ from dual
+ </select>
+</mapper>
diff --git a/src/main/resources/mapper/SysUserMapper.xml b/src/main/resources/mapper/SysUserMapper.xml
new file mode 100644
index 0000000..2d591bc
--- /dev/null
+++ b/src/main/resources/mapper/SysUserMapper.xml
@@ -0,0 +1,7 @@
+<?xml version="1.0" encoding="UTF-8"?>
+<!DOCTYPE mapper
+ PUBLIC "-//mybatis.org//DTD Mapper 3.0//EN"
+ "http://mybatis.org/dtd/mybatis-3-mapper.dtd">
+<mapper namespace="com.gs.xky.mapper.SysUserMapper">
+
+</mapper>
diff --git a/src/test/java/com/gs/xky/XkyApplicationTests.java b/src/test/java/com/gs/xky/XkyApplicationTests.java
index 83d8dec..c69cba4 100644
--- a/src/test/java/com/gs/xky/XkyApplicationTests.java
+++ b/src/test/java/com/gs/xky/XkyApplicationTests.java
@@ -1,18 +1,20 @@
package com.gs.xky;
+import cn.hutool.core.collection.ListUtil;
import com.alibaba.fastjson2.JSON;
-import com.gs.xky.config.ApiResponse;
-import com.gs.xky.config.BodyParam;
-import com.gs.xky.config.DataAcquisitionConfiguration;
-import com.gs.xky.config.XkyCommonParam;
+import com.gs.xky.config.*;
+import com.gs.xky.dto.EmployeeInfo;
import com.gs.xky.dto.XkyDetail;
import com.gs.xky.service.ApiService;
+import com.gs.xky.service.MesStaffService;
import com.gs.xky.service.XkyService;
import org.junit.jupiter.api.Test;
import org.springframework.beans.factory.annotation.Autowired;
import org.springframework.boot.test.context.SpringBootTest;
import java.io.IOException;
+import java.util.List;
+import java.util.stream.Collectors;
@SpringBootTest
class XkyApplicationTests {
@@ -23,6 +25,9 @@
@Autowired
private ApiService apiService;
+
+ @Autowired
+ private MesStaffService staffService;
@Test
void contextLoads() throws IOException {
@@ -47,4 +52,42 @@
System.out.println(JSON.toJSONString(noList.getData()));
}
+ @Test
+ void cs1() throws IOException {
+ DingTalkParam dingTalkParam = new DingTalkParam();
+
+ DingTalkResponse<EmployeeInfo> employeeInfoDingTalkResponse = apiService.sendListRequest(dingTalkParam, EmployeeInfo.class, "http://192.168.1.64/eHR/eHRExternalService/Service.ashx");
+
+ //閫犳ⅵ鑰咃紙娴欐睙锛夌鎶�鏈夐檺鍏徃 cUnitName
+ //http://192.168.1.64/eHR
+ List<EmployeeInfo> collect = employeeInfoDingTalkResponse.getData().stream().filter(s -> "閫犳ⅵ鑰咃紙娴欐睙锛夌鎶�鏈夐檺鍏徃".equals(s.getCUnitName())).collect(Collectors.toList());
+ System.out.println(collect.size());
+
+ List<List<EmployeeInfo>> partition = ListUtil.partition(collect, 500);
+
+ partition.forEach(list -> {
+ staffService.SaveStaff(list);
+ });
+
+ }
+
+
+ @Test
+ void cs2() throws IOException {
+ DingTalkParam dingTalkParam = new DingTalkParam(1);
+
+ DingTalkResponse<EmployeeInfo> employeeInfoDingTalkResponse = apiService.sendListRequest(dingTalkParam, EmployeeInfo.class, "http://192.168.1.64/eHR/eHRExternalService/Service.ashx");
+
+ //閫犳ⅵ鑰咃紙娴欐睙锛夌鎶�鏈夐檺鍏徃 cUnitName
+ //http://192.168.1.64/eHR
+ List<EmployeeInfo> collect = employeeInfoDingTalkResponse.getData().stream().filter(s -> "閫犳ⅵ鑰咃紙娴欐睙锛夌鎶�鏈夐檺鍏徃".equals(s.getCUnitName())).collect(Collectors.toList());
+ System.out.println(collect.size());
+
+ List<List<EmployeeInfo>> partition = ListUtil.partition(collect, 100);
+
+ partition.forEach(list -> {
+ staffService.UpdateStaff(list);
+ });
+
+ }
}
\ No newline at end of file
--
Gitblit v1.9.3