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