员工更新接口
This commit is contained in:
parent
9187c6d535
commit
37169f571b
|
@ -8,20 +8,24 @@ import kd.bos.context.RequestContext;
|
|||
import kd.bos.dataentity.entity.DynamicObject;
|
||||
import kd.bos.dataentity.entity.DynamicObjectCollection;
|
||||
import kd.bos.exception.KDException;
|
||||
import kd.bos.org.model.OrgParam;
|
||||
import kd.bos.permission.model.UserParam;
|
||||
import kd.bos.schedule.executor.AbstractTask;
|
||||
import kd.bos.service.ServiceFactory;
|
||||
|
||||
import kd.bos.servicehelper.QueryServiceHelper;
|
||||
import kd.bos.servicehelper.org.OrgUnitServiceHelper;
|
||||
import kd.bos.servicehelper.user.UserServiceHelper;
|
||||
import kd.bos.servicehelper.operation.SaveServiceHelper;
|
||||
import org.slf4j.Logger;
|
||||
import org.slf4j.LoggerFactory;
|
||||
import shkd.cosmic.cxkg.task.DTO.Query;
|
||||
import shkd.cosmic.cxkg.task.DTO.QueryDTO;
|
||||
|
||||
import java.util.ArrayList;
|
||||
import java.util.HashMap;
|
||||
import java.util.List;
|
||||
import java.util.Map;
|
||||
import java.io.UnsupportedEncodingException;
|
||||
import java.math.BigDecimal;
|
||||
import java.math.RoundingMode;
|
||||
import java.util.*;
|
||||
|
||||
/**
|
||||
*
|
||||
|
@ -29,86 +33,166 @@ import java.util.Map;
|
|||
*/
|
||||
public class UserTaskImpl extends AbstractTask {
|
||||
|
||||
|
||||
private static Logger logger = LoggerFactory.getLogger(HrmDepartmentTaskImpl.class);
|
||||
private static final int PAGESIZE = 20;
|
||||
private int CURPAGE = 1;
|
||||
private DynamicObjectCollection queryOrges;
|
||||
|
||||
static boolean flag = false; //判断当前用户集合是否存在需要设置的用户还没存入系统的情况
|
||||
|
||||
@Override
|
||||
public void execute(RequestContext requestContext, Map<String, Object> map) throws KDException {
|
||||
DynamicObjectCollection queryOrges = QueryServiceHelper.query("bos_adminorg",
|
||||
"id,number,shkd_oaid", null);//查询星瀚系统部门集合
|
||||
Map<Object, String> orgIds = new HashMap<Object, String>();//存放系统中已经存在的用户id集合
|
||||
for (DynamicObject queryOrg : queryOrges) {
|
||||
orgIds.put(queryOrg.getString("number"), (queryOrg.getLong("id") + ""));//存放已经存在的部门的id以及oaid
|
||||
}
|
||||
|
||||
|
||||
//bos_base_user_syn_weaver2kd
|
||||
//构造请求体
|
||||
QueryDTO queryDTO = new QueryDTO();
|
||||
queryDTO.setCurpage(4);
|
||||
queryDTO.setPagesize(1);
|
||||
queryDTO.setPagesize(PAGESIZE);
|
||||
queryDTO.setCurpage(CURPAGE);
|
||||
Query query = new Query();
|
||||
query.setQueryDTO(queryDTO);
|
||||
String requestBody = JSON.toJSONString(query);
|
||||
String jsonResponse = HttpRequest.post("http://" + "10.157.226.9:8088" + "/api/hrm/resful/getHrmUserInfoWithPage")
|
||||
.body(requestBody).timeout(20000) //20s 超时
|
||||
.execute().body();
|
||||
JSONObject resultJson = JSONObject.parseObject(jsonResponse);
|
||||
JSONArray dataList = resultJson.getJSONObject("data").getJSONArray("dataList");
|
||||
|
||||
List<UserParam> paramList = new ArrayList<>();
|
||||
UserParam user = null;
|
||||
Object isFull = map.get("isfull");//判断是否全量。
|
||||
if("0".equals(isFull)){//判断是否全量,不是则设置时间戳参数
|
||||
Calendar calendar = Calendar.getInstance();// 获取当前日期
|
||||
calendar.set(Calendar.HOUR_OF_DAY, 0);
|
||||
calendar.set(Calendar.MINUTE, 0);
|
||||
calendar.set(Calendar.SECOND, 0);
|
||||
Long time = calendar.getTimeInMillis();
|
||||
queryDTO.setCreated(time.toString());
|
||||
}
|
||||
|
||||
JSONObject data = this.getOAUserData(query);
|
||||
if(data != null){
|
||||
//查询当前星瀚人员id集合
|
||||
DynamicObjectCollection queryUsers = QueryServiceHelper.query("bos_user",
|
||||
"id,number,shkd_oaid", null);//查询星瀚系统部门集合
|
||||
Map<Object, Long> userIds = new HashMap<Object, Long>();//存放系统中已经存在的用户id集合
|
||||
for (DynamicObject queryUser : queryUsers) {
|
||||
userIds.put(queryUser.getString("number"), queryUser.getLong("id"));//存放已经存在的人员的id以及number
|
||||
}
|
||||
|
||||
List<UserParam> paramList = new ArrayList<>();//创建存放人员类的集合
|
||||
JSONArray dataList = data.getJSONArray("dataList");//oa人员数据集合
|
||||
|
||||
BigDecimal totalSize = data.getBigDecimal("totalSize");//获取查询到人员总数;
|
||||
BigDecimal size = new BigDecimal(PAGESIZE);//设置页大小为20
|
||||
BigDecimal pageNumber = totalSize.divide(size, 0, RoundingMode.UP);//计算需要分页数量
|
||||
//查询成功取第一轮数据添加入参数集合
|
||||
this.buildUserParam(paramList,dataList,userIds);
|
||||
//判断分页数量是否大于1,是则进行遍历后续数据
|
||||
if (pageNumber.compareTo(new BigDecimal(1)) > 0) {//当页数为1时,不需要再次查询接口直接去同步数据
|
||||
for (int i = 1; i < pageNumber.intValue(); i++){//查询成功取第一轮数据同步
|
||||
//修改CURPAGE当前页数
|
||||
CURPAGE = i + 1;
|
||||
queryDTO.setCurpage(CURPAGE);
|
||||
JSONObject dataNext = this.getOAUserData(query);//获取查询的数据
|
||||
this.buildUserParam(paramList,dataNext.getJSONArray("dataList"),userIds);
|
||||
}
|
||||
}
|
||||
UserServiceHelper.addOrUpdate(paramList);
|
||||
int resultNumber = 0;
|
||||
for (UserParam userParam : paramList) {
|
||||
boolean success = userParam.isSuccess();
|
||||
if (!success){
|
||||
String name = userParam.getDataMap().get("name").toString();
|
||||
String msg = userParam.getMsg();
|
||||
logger.info(name+"数据同步失败:"+msg);//返回失败结果
|
||||
resultNumber++;
|
||||
String str = "第"+resultNumber+"次"+name+"数据同步失败:"+msg;
|
||||
System.out.println(str);
|
||||
}
|
||||
}
|
||||
|
||||
if(flag){//重新生成构造集合
|
||||
paramList.clear();
|
||||
userIds.clear();
|
||||
queryUsers = QueryServiceHelper.query("bos_user",
|
||||
"id,number,shkd_oaid", null);//查询星瀚系统部门集合
|
||||
userIds = new HashMap<Object, Long>();//存放系统中已经存在的用户id集合
|
||||
for (DynamicObject queryUser : queryUsers) {
|
||||
userIds.put(queryUser.getString("number"), queryUser.getLong("id"));//存放已经存在的人员的id以及number
|
||||
}
|
||||
for (int i = 1; i < pageNumber.intValue(); i++){//查询成功取第一轮数据同步
|
||||
CURPAGE = i ;
|
||||
queryDTO.setCurpage(CURPAGE);
|
||||
JSONObject dataNext = this.getOAUserData(query);//获取查询的数据
|
||||
this.buildUserParam(paramList,dataNext.getJSONArray("dataList"),userIds);
|
||||
}
|
||||
UserServiceHelper.addOrUpdate(paramList);//新增或更新全量数据
|
||||
for (UserParam userParam : paramList) {
|
||||
boolean success = userParam.isSuccess();
|
||||
if (!success){
|
||||
String name = userParam.getDataMap().get("name").toString();
|
||||
String msg = userParam.getMsg();
|
||||
logger.info(name+"数据同步失败:"+msg);//返回失败结果
|
||||
}
|
||||
}
|
||||
}
|
||||
}
|
||||
}
|
||||
|
||||
private JSONObject getOAUserData(Query query){
|
||||
String requestBody = JSON.toJSONString(query);
|
||||
//返回参数
|
||||
String json = HttpRequest.post("http://" + "10.157.226.9:8088" + "/api/hrm/resful/getHrmUserInfoWithPage").body(requestBody).execute().body();
|
||||
JSONObject resultJson = JSONObject.parseObject(json);;//查询oa接口返回人员数据
|
||||
String code = resultJson.getString("code");//第一次执行查询,判断接口调用是否成功,否则不执行后续逻辑
|
||||
if (!Objects.equals("1",code)){//当code不为1时,调用失败
|
||||
logger.info("调用接口失败"+resultJson.getString("msg"));
|
||||
return null;
|
||||
}
|
||||
JSONObject data = resultJson.getJSONObject("data");
|
||||
return data ;
|
||||
}
|
||||
|
||||
private void buildUserParam(List<UserParam> paramList,JSONArray dataList,Map<Object,Long> userIds) {
|
||||
for (int i = 0; i < dataList.size(); i++) {
|
||||
UserParam user = new UserParam();
|
||||
JSONObject userData = dataList.getJSONObject(i);
|
||||
System.out.println(i + "-----------" + userData);
|
||||
user = new UserParam();
|
||||
// user.setCustomUserId(123456780L);
|
||||
Long workid = userIds.get(userData.getString("workcode"));
|
||||
if (workid != null){
|
||||
user.setId(workid);
|
||||
user.setCustomUserId(workid);
|
||||
}
|
||||
Map<String, Object> dataMap = new HashMap<>();
|
||||
dataMap.put("number", userData.getString("workcode")); //工号
|
||||
dataMap.put("name", userData.getString("lastname")); // 姓名
|
||||
dataMap.put("username", userData.getString("loginid")); //用户名
|
||||
dataMap.put("usertype", "1");
|
||||
dataMap.put("phone", userData.getString("mobile"));
|
||||
dataMap.put("email", userData.getString("email"));
|
||||
dataMap.put("usertype", "1");//类型
|
||||
dataMap.put("phone", userData.getString("mobile"));//移动电话
|
||||
dataMap.put("email", userData.getString("email"));//邮箱
|
||||
// dataMap.put("idcard", userData.getString("certificatenum")); //身份证
|
||||
dataMap.put("birthday", userData.getString("birthday"));
|
||||
dataMap.put("gender", userData.getString("sex")); //int
|
||||
// dataMap.put("picturefield", ""); //头像
|
||||
dataMap.put("birthday", userData.getDate("birthday"));//生日
|
||||
dataMap.put("gender", "男" .equals(userData.getString("sex")) ? "1" : "2"); //性别
|
||||
dataMap.put("shkd_oaid",userData.getString("id"));
|
||||
|
||||
// 职位分录
|
||||
List<Map<String, Object>> posList = new ArrayList<>();
|
||||
Map<String, Object> entryentity = new HashMap<>();
|
||||
// 设置部门ID
|
||||
entryentity.put("dpt", orgIds.get(userData.getString("departmentcode"))); // 部门
|
||||
// 通过编码设置部门
|
||||
Map<String, Object> dptNumMap = new HashMap<>();
|
||||
dptNumMap.put("number", userData.getString("departmentcode"));
|
||||
entryentity.put("dpt",dptNumMap ); // 部门
|
||||
entryentity.put("position", userData.getString("jobactivityname")); // 职位
|
||||
//entryentity.put("isincharge", false); //负责人
|
||||
//entryentity.put("ispartjob", false); //兼职
|
||||
entryentity.put("superior", userData.getString("managerid")); // 直接上级
|
||||
entryentity.put("isincharge", false); //负责人
|
||||
entryentity.put("ispartjob", false); //兼职
|
||||
String managerId_oa = userData.getString("managerid");//获取上级人员id(oa)
|
||||
Long managerId = userIds.get(managerId_oa);//直接上级id
|
||||
if (managerId != null){
|
||||
entryentity.put("superior", managerId); // 赋值直接上级
|
||||
}else {
|
||||
if (!"".equals(managerId_oa)){//当上级人员id(oa)存在且未在星瀚系统检索成功时,修改参数flag,接口将重新构造人员类更新数据
|
||||
flag = true;
|
||||
}
|
||||
}
|
||||
entryentity.put("seq", 1);
|
||||
posList.add(entryentity);
|
||||
|
||||
dataMap.put("entryentity", posList);
|
||||
user.setDataMap(dataMap);
|
||||
user.setCustomUserId(userData.getInteger("id"));
|
||||
// user.setId(293);
|
||||
paramList.add(user);
|
||||
}
|
||||
}
|
||||
|
||||
// 业务调用可以参照接口名,以下举例说明微服务调用方式
|
||||
// IUserService userService = (IUserService) ServiceFactory.getService(IUserService.class);
|
||||
//kd.bos.servicehelper.user.UserServiceHelper.addOrUpdate(List userList)
|
||||
// userService.addOrUpdate(paramList);
|
||||
UserServiceHelper.addOrUpdate(paramList);
|
||||
// SaveServiceHelper.save();
|
||||
|
||||
|
||||
List<UserParam> paramList2 = new ArrayList<>();
|
||||
// 判断执行结果
|
||||
for (UserParam result : paramList) {
|
||||
if (!result.isSuccess()) {
|
||||
//
|
||||
System.out.println(result.getId() + "-----------" + result.getMsg());
|
||||
paramList2.add(result);
|
||||
}
|
||||
}
|
||||
}
|
||||
}
|
||||
|
|
Loading…
Reference in New Issue