|
|
|
@ -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<HRPostInfo> infoList = new ArrayList<HRPostInfo>();
|
|
|
|
|
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<HRPostInfo> 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<String> codes = dtos.stream().map(HRPostInfo::getPostCode).collect(Collectors.toList());
|
|
|
|
|
//本地已存在
|
|
|
|
|
List<String> existCodes = postMapper.getExistCodes(codes);
|
|
|
|
|
//本地不存在// 差集 (list2 - list1)
|
|
|
|
|
List<String> noExistCodes = codes.stream().filter(item -> !existCodes.contains(item)).collect(Collectors.toList());
|
|
|
|
|
//Hr不存在但是本地存在
|
|
|
|
|
List<String> hrNoExistCodes = existCodes.stream().filter(item -> !codes.contains(item)).collect(Collectors.toList());
|
|
|
|
|
|
|
|
|
|
//3.更新
|
|
|
|
|
List<HRPostInfo> updates = new ArrayList<>();
|
|
|
|
|
for(String existCode:existCodes){
|
|
|
|
|
List<HRPostInfo> 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<HRPostInfo> subList = updates.subList(i, toIndex);
|
|
|
|
|
postMapper.updatePostBatch(subList);
|
|
|
|
|
}
|
|
|
|
|
}
|
|
|
|
|
log.info("岗位更新成功条数:"+ toIndex);
|
|
|
|
|
}else{
|
|
|
|
|
log.info("岗位更新成功条数:0");
|
|
|
|
|
}
|
|
|
|
|
|
|
|
|
|
//4.新增
|
|
|
|
|
List<HRPostInfo> adds = new ArrayList<>();
|
|
|
|
|
for(String noExistCode:noExistCodes){
|
|
|
|
|
List<HRPostInfo> 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;
|
|
|
|
|
}
|
|
|
|
|
|
|
|
|
|
}
|
|
|
|
|