From 264916d0733d201c33d25c452db4f110b5a7e071 Mon Sep 17 00:00:00 2001 From: A0010407 Date: Wed, 20 Mar 2024 15:31:20 +0800 Subject: [PATCH] =?UTF-8?q?2024.3.19-3.20=20=E7=B3=BB=E7=BB=9F=E6=A8=A1?= =?UTF-8?q?=E5=9D=97=E3=80=81=E5=AE=9A=E6=97=B6=E4=BB=BB=E5=8A=A1=E6=A8=A1?= =?UTF-8?q?=E5=9D=97-=E4=BA=BA=E5=8A=9B=E8=B5=84=E6=BA=90=E5=9F=BA?= =?UTF-8?q?=E7=A1=80=E4=BF=A1=E6=81=AF=E9=83=A8=E9=97=A8=E3=80=81=E5=B2=97?= =?UTF-8?q?=E4=BD=8D=E5=AE=9A=E6=97=B6=E4=BB=BB=E5=8A=A1?= MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit --- .../com/op/system/api/RemoteOpenService.java | 8 + .../com/op/system/api/RemoteUserService.java | 8 + .../system/api/domain/quality/HRDeptInfo.java | 203 ++++++++++++++++++ .../system/api/domain/quality/HRPostInfo.java | 152 +++++++++++++ .../factory/RemoteOpenFallbackFactory.java | 12 +- .../factory/RemoteUserFallbackFactory.java | 10 + .../src/main/java/com/op/job/task/RyTask.java | 16 ++ .../system/controller/SysDeptController.java | 7 + .../system/controller/SysPostController.java | 7 + .../com/op/system/mapper/SysDeptMapper.java | 14 ++ .../com/op/system/mapper/SysPostMapper.java | 18 ++ .../op/system/service/ISysDeptService.java | 6 + .../op/system/service/ISysPostService.java | 6 + .../service/impl/SysDeptServiceImpl.java | 127 ++++++++++- .../service/impl/SysPostServiceImpl.java | 133 +++++++++++- .../resources/mapper/system/SysDeptMapper.xml | 71 ++++++ .../resources/mapper/system/SysPostMapper.xml | 64 ++++++ 17 files changed, 857 insertions(+), 5 deletions(-) create mode 100644 op-api/op-api-system/src/main/java/com/op/system/api/domain/quality/HRDeptInfo.java create mode 100644 op-api/op-api-system/src/main/java/com/op/system/api/domain/quality/HRPostInfo.java diff --git a/op-api/op-api-system/src/main/java/com/op/system/api/RemoteOpenService.java b/op-api/op-api-system/src/main/java/com/op/system/api/RemoteOpenService.java index 5438acc82..e2095be21 100644 --- a/op-api/op-api-system/src/main/java/com/op/system/api/RemoteOpenService.java +++ b/op-api/op-api-system/src/main/java/com/op/system/api/RemoteOpenService.java @@ -27,4 +27,12 @@ public interface RemoteOpenService { /**获取HR人员信息**/ @GetMapping("/openInterface/GetHrUserInfo/{dateTime}") public AjaxResult GetHrUserInfo(@PathVariable("dateTime") String dateTime); + + /**获取HR岗位信息**/ + @GetMapping("/openInterface/GetHrPostInfo") + public AjaxResult GetHrPostInfo(); + + /**获取HR岗位信息**/ + @GetMapping("/openInterface/GetHrDeptInfo") + public AjaxResult GetHrDeptInfo(); } diff --git a/op-api/op-api-system/src/main/java/com/op/system/api/RemoteUserService.java b/op-api/op-api-system/src/main/java/com/op/system/api/RemoteUserService.java index b923879f1..06377cb34 100644 --- a/op-api/op-api-system/src/main/java/com/op/system/api/RemoteUserService.java +++ b/op-api/op-api-system/src/main/java/com/op/system/api/RemoteUserService.java @@ -61,4 +61,12 @@ public interface RemoteUserService { /**hr 人力基础数据数据-人员基本信息**/ @PostMapping("/user/syncUserInfoTask") public R syncUserInfoTask(); + + /**岗位基础数据数据**/ + @PostMapping("/post/sysPostInfoTask") + public R sysPostInfoTask(); + + /**部门基础数据数据**/ + @PostMapping("/dept/sysDeptInfoTask") + public R sysDeptInfoTask(); } diff --git a/op-api/op-api-system/src/main/java/com/op/system/api/domain/quality/HRDeptInfo.java b/op-api/op-api-system/src/main/java/com/op/system/api/domain/quality/HRDeptInfo.java new file mode 100644 index 000000000..d5c75fb98 --- /dev/null +++ b/op-api/op-api-system/src/main/java/com/op/system/api/domain/quality/HRDeptInfo.java @@ -0,0 +1,203 @@ +package com.op.system.api.domain.quality; + +import com.op.common.core.annotation.Excel; +import com.op.common.core.web.domain.BaseEntity; +import com.op.system.api.domain.SysDept; +import org.apache.commons.lang3.builder.ToStringBuilder; +import org.apache.commons.lang3.builder.ToStringStyle; + +import javax.validation.constraints.Email; +import javax.validation.constraints.NotBlank; +import javax.validation.constraints.NotNull; +import javax.validation.constraints.Size; +import java.util.ArrayList; +import java.util.List; + +/** + * hr岗位返回信息 + * + * @author Open Platform + * @date 2023-10-31 + */ +public class HRDeptInfo extends BaseEntity { + private static final long serialVersionUID = 1L; + + /** 部门ID */ + private Long deptId; + + /** 父部门ID */ + private Long parentId; + + /** 祖级列表 */ + private String ancestors; + + /** 部门名称 */ + private String deptName; + + /** 显示顺序 */ + private Integer orderNum; + + /** 负责人 */ + private String leader; + + /** 联系电话 */ + private String phone; + + /** 邮箱 */ + private String email; + + /** 部门状态:0正常,1停用 */ + private String status; + + /** 删除标志(0代表存在 2代表删除) */ + private String delFlag; + + /** 父部门名称 */ + private String parentName; + + /** 子部门 */ +// private List children = new ArrayList(); + + public Long getDeptId() { + return deptId; + } + + public void setDeptId(Long deptId) { + this.deptId = deptId; + } + + public Long getParentId() { + return parentId; + } + + public void setParentId(Long parentId) { + this.parentId = parentId; + } + + public String getAncestors() { + return ancestors; + } + + public void setAncestors(String ancestors) { + this.ancestors = ancestors; + } + + @NotBlank(message = "部门名称不能为空") + @Size(min = 0, max = 30, message = "部门名称长度不能超过30个字符") + public String getDeptName() { + return deptName; + } + + public void setDeptName(String deptName) { + this.deptName = deptName; + } + + @NotNull(message = "显示顺序不能为空") + public Integer getOrderNum() { + return orderNum; + } + + public void setOrderNum(Integer orderNum) { + this.orderNum = orderNum; + } + + public String getLeader() { + return leader; + } + + public void setLeader(String leader) { + this.leader = leader; + } + + @Size(min = 0, max = 11, message = "联系电话长度不能超过11个字符") + public String getPhone() { + return phone; + } + + public void setPhone(String phone) { + this.phone = phone; + } + + @Email(message = "邮箱格式不正确") + @Size(min = 0, max = 50, message = "邮箱长度不能超过50个字符") + public String getEmail() { + return email; + } + + public void setEmail(String email) { + this.email = email; + } + + public String getStatus() { + return status; + } + + public void setStatus(String status) { + this.status = status; + } + + public String getDelFlag() { + return delFlag; + } + + public void setDelFlag(String delFlag) { + this.delFlag = delFlag; + } + + public String getParentName() { + return parentName; + } + + public void setParentName(String parentName) { + this.parentName = parentName; + } + +// public List getChildren() { +// return children; +// } +// +// public void setChildren(List children) { +// this.children = children; +// } + + //接口传入参数 + /** 部门code */ + private Long orgCode; + + /** 部门名称 */ + private String orgName; + + /** 部门父级code */ + private Long parentCode; + + public Long getOrgCode() { + return orgCode; + } + public void setOrgCode(Long orgCode) { + this.orgCode = orgCode; + } + + public String getOrgName() { + return orgName; + } + public void setOrgName(String orgName) { + this.orgName = orgName; + } + + public Long getParentCode() { + return parentCode; + } + public void setParentCode(Long parentCode) { + this.parentCode = parentCode; + } + + @Override + public String toString() { + return new ToStringBuilder(this, ToStringStyle.MULTI_LINE_STYLE).append("deptId", getDeptId()) + .append("parentId", getParentId()).append("ancestors", getAncestors()).append("deptName", getDeptName()) + .append("orderNum", getOrderNum()).append("leader", getLeader()).append("phone", getPhone()) + .append("email", getEmail()).append("status", getStatus()).append("delFlag", getDelFlag()) + .append("createBy", getCreateBy()).append("createTime", getCreateTime()) + .append("updateBy", getUpdateBy()).append("updateTime", getUpdateTime()).toString(); + } +} diff --git a/op-api/op-api-system/src/main/java/com/op/system/api/domain/quality/HRPostInfo.java b/op-api/op-api-system/src/main/java/com/op/system/api/domain/quality/HRPostInfo.java new file mode 100644 index 000000000..404f456e4 --- /dev/null +++ b/op-api/op-api-system/src/main/java/com/op/system/api/domain/quality/HRPostInfo.java @@ -0,0 +1,152 @@ +package com.op.system.api.domain.quality; + +import com.alibaba.fastjson2.annotation.JSONField; +import com.op.common.core.annotation.Excel; +import com.op.common.core.web.domain.BaseEntity; +import com.op.system.api.domain.SysDept; +import com.op.system.api.domain.SysRole; +import org.apache.commons.lang3.builder.ToStringBuilder; +import org.apache.commons.lang3.builder.ToStringStyle; + +import javax.validation.constraints.NotBlank; +import javax.validation.constraints.NotNull; +import javax.validation.constraints.Size; +import java.util.Date; +import java.util.List; + +/** + * hr岗位返回信息 + * + * @author Open Platform + * @date 2023-10-31 + */ +public class HRPostInfo extends BaseEntity { + private static final long serialVersionUID = 1L; + + /** + * 岗位序号 + */ + @Excel(name = "岗位序号", cellType = Excel.ColumnType.NUMERIC) + private Long postId; + + /** + * 岗位编码 + */ + @Excel(name = "岗位编码") + private String postCode; + + /** + * 岗位名称 + */ + @Excel(name = "岗位名称") + private String postName; + + /** + * 岗位排序 + */ + @Excel(name = "岗位排序") + private Integer postSort; + + /** + * 状态(0正常 1停用) + */ + @Excel(name = "状态", readConverterExp = "0=正常,1=停用") + private String status; + + /** + * 用户是否存在此岗位标识 默认不存在 + */ + private boolean flag = false; + + public Long getPostId() { + return postId; + } + + public void setPostId(Long postId) { + this.postId = postId; + } + + @NotBlank(message = "岗位编码不能为空") + @Size(min = 0, max = 64, message = "岗位编码长度不能超过64个字符") + public String getPostCode() { + return postCode; + } + +// @JSONField(name="poscd") + public void setPostCode(String postCode) { + this.postCode = postCode; + } + + @NotBlank(message = "岗位名称不能为空") + @Size(min = 0, max = 50, message = "岗位名称长度不能超过50个字符") + public String getPostName() { + return postName; + } + +// @JSONField(name="posnm") + public void setPostName(String postName) { + this.postName = postName; + } + + @NotNull(message = "显示顺序不能为空") + public Integer getPostSort() { + return postSort; + } + + public void setPostSort(Integer postSort) { + this.postSort = postSort; + } + + public String getStatus() { + return status; + } + + public void setStatus(String status) { + this.status = status; + } + + public boolean isFlag() { + return flag; + } + + public void setFlag(boolean flag) { + this.flag = flag; + } + + //open接口传过来的值 + /** + * 岗位编码 + */ + private String poscd; + + /** + * 岗位名称 + */ + private String posnm; + + public String getPoscd() { + return poscd; + } + + public void setPoscd(String poscd) { + this.poscd = poscd; + } + + public String getPosnm() { + return posnm; + } + + public void setPosnm(String posnm) { + this.posnm = posnm; + } + + + @Override + public String toString() { + return new ToStringBuilder(this, ToStringStyle.MULTI_LINE_STYLE).append("postId", getPostId()) + .append("postCode", getPostCode()).append("postName", getPostName()).append("postSort", getPostSort()) + .append("status", getStatus()).append("createBy", getCreateBy()).append("createTime", getCreateTime()) + .append("updateBy", getUpdateBy()).append("updateTime", getUpdateTime()).append("remark", getRemark()) + .toString(); + } +} diff --git a/op-api/op-api-system/src/main/java/com/op/system/api/factory/RemoteOpenFallbackFactory.java b/op-api/op-api-system/src/main/java/com/op/system/api/factory/RemoteOpenFallbackFactory.java index 48f8fe0ef..40aa7c513 100644 --- a/op-api/op-api-system/src/main/java/com/op/system/api/factory/RemoteOpenFallbackFactory.java +++ b/op-api/op-api-system/src/main/java/com/op/system/api/factory/RemoteOpenFallbackFactory.java @@ -32,7 +32,17 @@ public class RemoteOpenFallbackFactory implements FallbackFactory posts = postService.selectPostAll(); return success(posts); } + + /**更新岗位基本信息**/ + @PostMapping("/sysPostInfoTask") + public R sysPostInfoTask() { + return R.ok(postService.sysPostInfoTask()); + } } diff --git a/op-modules/op-system/src/main/java/com/op/system/mapper/SysDeptMapper.java b/op-modules/op-system/src/main/java/com/op/system/mapper/SysDeptMapper.java index 6beaebc06..6766879fc 100644 --- a/op-modules/op-system/src/main/java/com/op/system/mapper/SysDeptMapper.java +++ b/op-modules/op-system/src/main/java/com/op/system/mapper/SysDeptMapper.java @@ -1,7 +1,10 @@ package com.op.system.mapper; +import java.util.Date; import java.util.List; +import com.op.system.api.domain.quality.HRDeptInfo; +import com.op.system.api.domain.quality.HRPostInfo; import org.apache.ibatis.annotations.Param; import com.op.system.api.domain.SysDept; @@ -116,4 +119,15 @@ public interface SysDeptMapper { * @return 结果 */ public int deleteDeptById(Long deptId); + + public Date getMaxTime(); + + List getExistCodes(@Param("list") List codes); + + int updateDeptBatch(@Param("list") List updates); + + int deleteDeptBatch(@Param("list") List hrNoExistCodes); + + int addDeptBatch(@Param("list") List adds); + } diff --git a/op-modules/op-system/src/main/java/com/op/system/mapper/SysPostMapper.java b/op-modules/op-system/src/main/java/com/op/system/mapper/SysPostMapper.java index 9ee0e9e07..52d97233f 100644 --- a/op-modules/op-system/src/main/java/com/op/system/mapper/SysPostMapper.java +++ b/op-modules/op-system/src/main/java/com/op/system/mapper/SysPostMapper.java @@ -1,8 +1,12 @@ package com.op.system.mapper; +import java.util.Date; import java.util.List; +import com.op.system.api.domain.quality.HRInfo; +import com.op.system.api.domain.quality.HRPostInfo; import com.op.system.domain.SysPost; +import org.apache.ibatis.annotations.Param; /** * 岗位信息 数据层 @@ -96,4 +100,18 @@ public interface SysPostMapper { * @return 结果 */ public SysPost checkPostCodeUnique(String postCode); + + public Date getMaxTime(); + + List getExistCodes(@Param("list") List code); + + int updatePostBatch(@Param("list") List updates); + + int addPostBatch(@Param("list") List adds); + + int deletePostBatch(@Param("list")List deletes); + + Integer getMaxSort(); + + List selectPostAllList(); } diff --git a/op-modules/op-system/src/main/java/com/op/system/service/ISysDeptService.java b/op-modules/op-system/src/main/java/com/op/system/service/ISysDeptService.java index dacf587cb..af8ca21be 100644 --- a/op-modules/op-system/src/main/java/com/op/system/service/ISysDeptService.java +++ b/op-modules/op-system/src/main/java/com/op/system/service/ISysDeptService.java @@ -2,6 +2,7 @@ package com.op.system.service; import java.util.List; +import com.op.common.core.domain.R; import com.op.system.api.domain.SysDept; import com.op.system.domain.vo.TreeSelect; @@ -121,4 +122,9 @@ public interface ISysDeptService { * @return 结果 */ public int deleteDeptById(Long deptId); + + /** + * 部门基础信息定时任务 + */ + public R sysDeptInfoTask(); } diff --git a/op-modules/op-system/src/main/java/com/op/system/service/ISysPostService.java b/op-modules/op-system/src/main/java/com/op/system/service/ISysPostService.java index f8c7aa6ae..e7e897618 100644 --- a/op-modules/op-system/src/main/java/com/op/system/service/ISysPostService.java +++ b/op-modules/op-system/src/main/java/com/op/system/service/ISysPostService.java @@ -2,6 +2,7 @@ package com.op.system.service; import java.util.List; +import com.op.common.core.domain.R; import com.op.system.domain.SysPost; /** @@ -96,4 +97,9 @@ public interface ISysPostService { * @return 结果 */ public int updatePost(SysPost post); + + /** + * 岗位基础信息定时任务 + */ + public R sysPostInfoTask(); } diff --git a/op-modules/op-system/src/main/java/com/op/system/service/impl/SysDeptServiceImpl.java b/op-modules/op-system/src/main/java/com/op/system/service/impl/SysDeptServiceImpl.java index f582674f0..84b4ff5e8 100644 --- a/op-modules/op-system/src/main/java/com/op/system/service/impl/SysDeptServiceImpl.java +++ b/op-modules/op-system/src/main/java/com/op/system/service/impl/SysDeptServiceImpl.java @@ -1,10 +1,22 @@ package com.op.system.service.impl; -import java.util.ArrayList; -import java.util.Iterator; -import java.util.List; +import java.util.*; import java.util.stream.Collectors; +import com.alibaba.fastjson2.JSONArray; +import com.alibaba.fastjson2.JSONObject; +import com.baomidou.dynamic.datasource.toolkit.DynamicDataSourceContextHolder; +import com.op.common.core.domain.R; +import com.op.common.core.utils.DateUtils; +import com.op.common.core.web.domain.AjaxResult; +import com.op.system.api.RemoteOpenService; +import com.op.system.api.domain.quality.HRDeptInfo; +import com.op.system.api.domain.quality.HRPostInfo; +import com.op.system.mapper.SysPostMapper; +import com.op.system.mapper.SysUserPostMapper; +import org.apache.commons.lang3.time.DateFormatUtils; +import org.slf4j.Logger; +import org.slf4j.LoggerFactory; import org.springframework.beans.factory.annotation.Autowired; import org.springframework.stereotype.Service; import com.op.common.core.constant.UserConstants; @@ -21,6 +33,7 @@ import com.op.system.domain.vo.TreeSelect; import com.op.system.mapper.SysDeptMapper; import com.op.system.mapper.SysRoleMapper; import com.op.system.service.ISysDeptService; +import org.springframework.util.CollectionUtils; /** * 部门管理 服务实现 @@ -29,6 +42,11 @@ import com.op.system.service.ISysDeptService; */ @Service public class SysDeptServiceImpl implements ISysDeptService { + private static final Logger log = LoggerFactory.getLogger(SysUserServiceImpl.class); + + @Autowired + private RemoteOpenService remoteOpenService; + @Autowired private SysDeptMapper deptMapper; @@ -302,4 +320,107 @@ public class SysDeptServiceImpl implements ISysDeptService { private boolean hasChild(List list, SysDept t) { return getChildList(list, t).size() > 0 ? true : false; } + + @Override + public R sysDeptInfoTask() { + DynamicDataSourceContextHolder.push("master");// 这是数据源的key + + Date maxTime0 = deptMapper.getMaxTime(); + if(maxTime0 != null){ + Calendar calendar = Calendar.getInstance(); + calendar.setTime(maxTime0); + calendar.add(Calendar.DAY_OF_YEAR, 1); + Date maxTime = calendar.getTime(); + String ymd = DateFormatUtils.format(maxTime, "yyyy-MM-dd");//yyyy-MM-dd + log.info("更新部门-参数:"+ ymd); + AjaxResult hrR = remoteOpenService.GetHrDeptInfo(); + log.info("更新部门-结果:"+ hrR.get("data")); + List infoList = new ArrayList(); + if((int)hrR.get("code")==200){ + infoList = JSONArray.parseArray(JSONObject.toJSONString(hrR.get("data")),com.op.system.api.domain.quality.HRDeptInfo.class); + log.info(String.valueOf(infoList)); + if(!CollectionUtils.isEmpty(infoList)){ + this.sysDeptInfoFunc(infoList); + } + }else{ + log.info("无最新需要更新的部门数据"); + return R.fail("无最新需要更新的部门数据"); + } + } + + return R.ok(); + } + + + protected int sysDeptInfoFunc(List dtos){ + //1.初始化 + Date nowDate = DateUtils.getNowDate(); + String createBy = "job"; + for(HRDeptInfo dto:dtos){ + dto.setDeptId(dto.getOrgCode()); + dto.setDeptName(dto.getOrgName()); + dto.setParentId(dto.getParentCode()); + dto.setStatus("0"); + dto.setDelFlag("0"); + dto.setCreateTime(nowDate); + dto.setCreateBy(createBy); + dto.setUpdateBy(createBy); + dto.setUpdateTime(nowDate); + } + + //2.三个表筛选 + int n = 0; + //部门的id 就是code + List codes = dtos.stream().map(HRDeptInfo::getDeptId).collect(Collectors.toList()); + //本地已存在 + List existCodes = deptMapper.getExistCodes(codes); + //本地不存在// 差集 (list2 - list1) + List noExistCodes = codes.stream().filter(item -> !existCodes.contains(item)).collect(Collectors.toList()); + //Hr不存在但是本地存在 + List hrNoExistCodes = existCodes.stream().filter(item -> !codes.contains(item)).collect(Collectors.toList()); + + //3.更新 + List updates = new ArrayList<>(); + for(Long existCode:existCodes){ + List updates0 = dtos.stream().filter(dto -> dto.getDeptId().equals(existCode)).collect(Collectors.toList()); + updates.addAll(updates0); + } + if(!CollectionUtils.isEmpty(updates)){ + int batchSize = 100; // 每批次插入的数据量 + int toIndex = 0 ; + if (updates != null && updates.size() > 0) { + for (int i = 0; i < updates.size(); i += batchSize) { + toIndex = Math.min(i + batchSize, updates.size()); + List subList = updates.subList(i, toIndex); + deptMapper.updateDeptBatch(subList); + } + } + log.info("部门更新成功条数:"+ toIndex); + }else{ + log.info("部门更新成功条数:0"); + } + + //4.新增 + List adds = new ArrayList<>(); + for(Long noExistCode:noExistCodes){ + List adds0 = dtos.stream().filter(dto -> dto.getDeptId().equals(noExistCode)).collect(Collectors.toList()); + adds.addAll(adds0); + } + if(!CollectionUtils.isEmpty(adds)){ + n = deptMapper.addDeptBatch(adds); + log.info("部门新增成功条数:"+ n); + }else{ + log.info("部门新增成功条数:0"); + } + + //5.逻辑删除 + if(!CollectionUtils.isEmpty(hrNoExistCodes)){ + n = deptMapper.deleteDeptBatch(hrNoExistCodes); + log.info("部门逻辑删除成功条数:"+ n); + }else{ + log.info("部门逻辑删除成功条数:0"); + } + + return n; + } } diff --git a/op-modules/op-system/src/main/java/com/op/system/service/impl/SysPostServiceImpl.java b/op-modules/op-system/src/main/java/com/op/system/service/impl/SysPostServiceImpl.java index e3c45367d..4e895cabc 100644 --- a/op-modules/op-system/src/main/java/com/op/system/service/impl/SysPostServiceImpl.java +++ b/op-modules/op-system/src/main/java/com/op/system/service/impl/SysPostServiceImpl.java @@ -1,7 +1,23 @@ package com.op.system.service.impl; -import java.util.List; +import java.util.*; +import java.util.stream.Collectors; +import com.alibaba.fastjson.JSON; +import com.alibaba.fastjson2.JSONArray; +import com.alibaba.fastjson2.JSONObject; +import com.baomidou.dynamic.datasource.annotation.DS; +import com.baomidou.dynamic.datasource.toolkit.DynamicDataSourceContextHolder; +import com.op.common.core.domain.R; +import com.op.common.core.utils.DateUtils; +import com.op.common.core.web.domain.AjaxResult; +import com.op.system.api.RemoteOpenService; +import com.op.system.api.domain.quality.HRInfo; +import com.op.system.api.domain.quality.HRPostInfo; +import com.op.system.api.domain.quality.PostInfo; +import org.apache.commons.lang3.time.DateFormatUtils; +import org.slf4j.Logger; +import org.slf4j.LoggerFactory; import org.springframework.beans.factory.annotation.Autowired; import org.springframework.stereotype.Service; import com.op.common.core.constant.UserConstants; @@ -11,6 +27,7 @@ import com.op.system.domain.SysPost; import com.op.system.mapper.SysPostMapper; import com.op.system.mapper.SysUserPostMapper; import com.op.system.service.ISysPostService; +import org.springframework.util.CollectionUtils; /** * 岗位信息 服务层处理 @@ -19,12 +36,17 @@ import com.op.system.service.ISysPostService; */ @Service public class SysPostServiceImpl implements ISysPostService { + private static final Logger log = LoggerFactory.getLogger(SysUserServiceImpl.class); + @Autowired private SysPostMapper postMapper; @Autowired private SysUserPostMapper userPostMapper; + @Autowired + private RemoteOpenService remoteOpenService; + /** * 查询岗位信息集合 * @@ -160,4 +182,113 @@ public class SysPostServiceImpl implements ISysPostService { public int updatePost(SysPost post) { return postMapper.updatePost(post); } + + @Override + public R sysPostInfoTask() { + DynamicDataSourceContextHolder.push("master");// 这是数据源的key + + Date maxTime0 = postMapper.getMaxTime(); + if(maxTime0 != null){ + Calendar calendar = Calendar.getInstance(); + calendar.setTime(maxTime0); + calendar.add(Calendar.DAY_OF_YEAR, 1); + Date maxTime = calendar.getTime(); + String ymd = DateFormatUtils.format(maxTime, "yyyy-MM-dd");//yyyy-MM-dd + log.info("更新岗位-参数:"+ ymd); + AjaxResult hrR = remoteOpenService.GetHrPostInfo(); + log.info("更新岗位-结果:"+ hrR.get("data")); + List infoList = new ArrayList(); + if((int)hrR.get("code")==200){ + //code=200 获取成功 + infoList = JSONArray.parseArray(JSONObject.toJSONString(hrR.get("data")),com.op.system.api.domain.quality.HRPostInfo.class); + log.info(String.valueOf(infoList)); + if(!CollectionUtils.isEmpty(infoList)){ + this.sysPostInfoFunc(infoList); + } + + }else{ + log.info("无最新需要更新的岗位数据"); + return R.fail("无最新需要更新的岗位数据"); + } + } + + return R.ok(); + } + + + protected int sysPostInfoFunc(List dtos){ + //1.初始化 + Date nowDate = DateUtils.getNowDate(); + String createBy = "job"; + for(HRPostInfo dto:dtos){ + dto.setPostCode(dto.getPoscd()); + dto.setPostName(dto.getPosnm()); + dto.setStatus("0"); + dto.setCreateTime(nowDate); + dto.setCreateBy(createBy); + dto.setUpdateBy(createBy); + dto.setUpdateTime(nowDate); + } + + //2.求三个表 + int n = 0; + List codes = dtos.stream().map(HRPostInfo::getPostCode).collect(Collectors.toList()); + //本地已存在 + List existCodes = postMapper.getExistCodes(codes); + //本地不存在// 差集 (list2 - list1) + List noExistCodes = codes.stream().filter(item -> !existCodes.contains(item)).collect(Collectors.toList()); + //Hr不存在但是本地存在 + List hrNoExistCodes = existCodes.stream().filter(item -> !codes.contains(item)).collect(Collectors.toList()); + + //3.更新 + List updates = new ArrayList<>(); + for(String existCode:existCodes){ + List updates0 = dtos.stream().filter(dto -> dto.getPostCode().equals(existCode)).collect(Collectors.toList()); + updates.addAll(updates0); + } + if(!CollectionUtils.isEmpty(updates)){ + int batchSize = 100; // 每批次插入的数据量 + int toIndex = 0 ; + if (updates != null && updates.size() > 0) { + for (int i = 0; i < updates.size(); i += batchSize) { + toIndex = Math.min(i + batchSize, updates.size()); + List subList = updates.subList(i, toIndex); + postMapper.updatePostBatch(subList); + } + } + log.info("岗位更新成功条数:"+ toIndex); + }else{ + log.info("岗位更新成功条数:0"); + } + + //4.新增 + List adds = new ArrayList<>(); + for(String noExistCode:noExistCodes){ + List adds0 = dtos.stream().filter(dto -> dto.getPostCode().equals(noExistCode)).collect(Collectors.toList()); + adds.addAll(adds0); + } + //序列 + Integer sort = postMapper.getMaxSort(); + for(HRPostInfo add0 :adds){ + sort = sort + 1; + add0.setPostSort(sort); + } + if(!CollectionUtils.isEmpty(adds)){ + n = postMapper.addPostBatch(adds); + log.info("岗位新增成功条数:"+ n); + }else{ + log.info("岗位新增成功条数:0"); + } + + //5.逻辑删除 + if(!CollectionUtils.isEmpty(hrNoExistCodes)){ + n = postMapper.deletePostBatch(hrNoExistCodes); + log.info("岗位逻辑删除成功条数:"+ n); + }else{ + log.info("岗位逻辑删除成功条数:0"); + } + + return n; + } + } diff --git a/op-modules/op-system/src/main/resources/mapper/system/SysDeptMapper.xml b/op-modules/op-system/src/main/resources/mapper/system/SysDeptMapper.xml index ba892d258..822d4eda2 100644 --- a/op-modules/op-system/src/main/resources/mapper/system/SysDeptMapper.xml +++ b/op-modules/op-system/src/main/resources/mapper/system/SysDeptMapper.xml @@ -160,4 +160,75 @@ update sys_dept set del_flag = '2' where dept_id = #{deptId} + + + + + + + update sys_dept + set + parent_id = #{item.parentId}, + dept_name = #{item.deptName}, + order_num = #{item.orderNum}, + status = #{item.status}, + del_flag = #{item.delFlag}, + update_by = #{item.updateBy}, + update_time = #{item.updateTime} + where + dept_id = #{item.deptId} + + + + + + update sys_post + set + status = '1', + del_flag = '2', + update_by = 'job', + update_time = GETDATE() + where + dept_id = #{item} + + + + + insert into sys_dept + ( + dept_id, + parent_id, + dept_name, + order_num, + status, + del_flag, + create_by, + create_time + ) + VALUES + + ( + #{item.deptId}, + #{item.parentId}, + #{item.deptName}, + '0', + '0', + '0', + #{item.createBy}, + #{item.createTime} + ) + + + diff --git a/op-modules/op-system/src/main/resources/mapper/system/SysPostMapper.xml b/op-modules/op-system/src/main/resources/mapper/system/SysPostMapper.xml index 0265b84df..4a1ab0b7d 100644 --- a/op-modules/op-system/src/main/resources/mapper/system/SysPostMapper.xml +++ b/op-modules/op-system/src/main/resources/mapper/system/SysPostMapper.xml @@ -123,4 +123,68 @@ + + + + + + + + + update sys_post + set + post_name = #{item.postName}, + status = '0', + update_by = #{item.updateBy}, + update_time = #{item.updateTime} + where + post_id = #{item.postId} + + + + + + update sys_post + set + status = '1', + update_by = 'job', + update_time = GETDATE() + where + post_code = #{item} + + + + + insert into sys_post + ( + post_code, + post_name, + post_sort, + status, + create_by, + create_time + ) + VALUES + + ( + #{item.postCode}, + #{item.postName}, + #{item.postSort}, + #{item.status}, + #{item.createBy}, + #{item.createTime} + ) + + + +