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