|
|
@ -1,10 +1,22 @@
|
|
|
|
package com.op.system.service.impl;
|
|
|
|
package com.op.system.service.impl;
|
|
|
|
|
|
|
|
|
|
|
|
import java.util.ArrayList;
|
|
|
|
import java.util.*;
|
|
|
|
import java.util.Iterator;
|
|
|
|
|
|
|
|
import java.util.List;
|
|
|
|
|
|
|
|
import java.util.stream.Collectors;
|
|
|
|
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.beans.factory.annotation.Autowired;
|
|
|
|
import org.springframework.stereotype.Service;
|
|
|
|
import org.springframework.stereotype.Service;
|
|
|
|
import com.op.common.core.constant.UserConstants;
|
|
|
|
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.SysDeptMapper;
|
|
|
|
import com.op.system.mapper.SysRoleMapper;
|
|
|
|
import com.op.system.mapper.SysRoleMapper;
|
|
|
|
import com.op.system.service.ISysDeptService;
|
|
|
|
import com.op.system.service.ISysDeptService;
|
|
|
|
|
|
|
|
import org.springframework.util.CollectionUtils;
|
|
|
|
|
|
|
|
|
|
|
|
/**
|
|
|
|
/**
|
|
|
|
* 部门管理 服务实现
|
|
|
|
* 部门管理 服务实现
|
|
|
@ -29,6 +42,11 @@ import com.op.system.service.ISysDeptService;
|
|
|
|
*/
|
|
|
|
*/
|
|
|
|
@Service
|
|
|
|
@Service
|
|
|
|
public class SysDeptServiceImpl implements ISysDeptService {
|
|
|
|
public class SysDeptServiceImpl implements ISysDeptService {
|
|
|
|
|
|
|
|
private static final Logger log = LoggerFactory.getLogger(SysUserServiceImpl.class);
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
@Autowired
|
|
|
|
|
|
|
|
private RemoteOpenService remoteOpenService;
|
|
|
|
|
|
|
|
|
|
|
|
@Autowired
|
|
|
|
@Autowired
|
|
|
|
private SysDeptMapper deptMapper;
|
|
|
|
private SysDeptMapper deptMapper;
|
|
|
|
|
|
|
|
|
|
|
@ -302,4 +320,107 @@ public class SysDeptServiceImpl implements ISysDeptService {
|
|
|
|
private boolean hasChild(List<SysDept> list, SysDept t) {
|
|
|
|
private boolean hasChild(List<SysDept> list, SysDept t) {
|
|
|
|
return getChildList(list, t).size() > 0 ? true : false;
|
|
|
|
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<HRDeptInfo> infoList = new ArrayList<HRDeptInfo>();
|
|
|
|
|
|
|
|
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<HRDeptInfo> 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<Long> codes = dtos.stream().map(HRDeptInfo::getDeptId).collect(Collectors.toList());
|
|
|
|
|
|
|
|
//本地已存在
|
|
|
|
|
|
|
|
List<Long> existCodes = deptMapper.getExistCodes(codes);
|
|
|
|
|
|
|
|
//本地不存在// 差集 (list2 - list1)
|
|
|
|
|
|
|
|
List<Long> noExistCodes = codes.stream().filter(item -> !existCodes.contains(item)).collect(Collectors.toList());
|
|
|
|
|
|
|
|
//Hr不存在但是本地存在
|
|
|
|
|
|
|
|
List<Long> hrNoExistCodes = existCodes.stream().filter(item -> !codes.contains(item)).collect(Collectors.toList());
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
//3.更新
|
|
|
|
|
|
|
|
List<HRDeptInfo> updates = new ArrayList<>();
|
|
|
|
|
|
|
|
for(Long existCode:existCodes){
|
|
|
|
|
|
|
|
List<HRDeptInfo> 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<HRDeptInfo> subList = updates.subList(i, toIndex);
|
|
|
|
|
|
|
|
deptMapper.updateDeptBatch(subList);
|
|
|
|
|
|
|
|
}
|
|
|
|
|
|
|
|
}
|
|
|
|
|
|
|
|
log.info("部门更新成功条数:"+ toIndex);
|
|
|
|
|
|
|
|
}else{
|
|
|
|
|
|
|
|
log.info("部门更新成功条数:0");
|
|
|
|
|
|
|
|
}
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
//4.新增
|
|
|
|
|
|
|
|
List<HRDeptInfo> adds = new ArrayList<>();
|
|
|
|
|
|
|
|
for(Long noExistCode:noExistCodes){
|
|
|
|
|
|
|
|
List<HRDeptInfo> 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;
|
|
|
|
|
|
|
|
}
|
|
|
|
}
|
|
|
|
}
|
|
|
|