|
|
@@ -1,322 +0,0 @@
|
|
|
-package eas.custom.beisen.synchronouspos.osf;
|
|
|
-
|
|
|
-import com.alibaba.fastjson.JSON;
|
|
|
-import com.alibaba.fastjson.JSONObject;
|
|
|
-import com.google.common.collect.Maps;
|
|
|
-import com.kingdee.bos.BOSException;
|
|
|
-import com.kingdee.bos.Context;
|
|
|
-import com.kingdee.bos.bsf.service.app.IHRMsfService;
|
|
|
-import com.kingdee.bos.rabbitmq.guava.Lists;
|
|
|
-import com.kingdee.eas.common.EASBizException;
|
|
|
-import com.kingdee.eas.custom.beisen.utils.BeiSenUtils;
|
|
|
-import com.kingdee.eas.custom.beisen.utils.BeisenParamByPropertiesUtil;
|
|
|
-import com.kingdee.eas.custom.beisen.utils.Helper;
|
|
|
-import com.kingdee.eas.util.app.DbUtil;
|
|
|
-import com.kingdee.jdbc.rowset.IRowSet;
|
|
|
-import org.apache.commons.lang3.StringUtils;
|
|
|
-
|
|
|
-import java.io.IOException;
|
|
|
-import java.net.URISyntaxException;
|
|
|
-import java.net.URLEncoder;
|
|
|
-import java.sql.Date;
|
|
|
-import java.sql.SQLException;
|
|
|
-import java.text.SimpleDateFormat;
|
|
|
-import java.util.Arrays;
|
|
|
-import java.util.HashMap;
|
|
|
-import java.util.List;
|
|
|
-import java.util.Map;
|
|
|
-
|
|
|
-/**
|
|
|
- * description: SynchronousPosOSFService <br>
|
|
|
- * date: 2025/7/11 17:46 <br>
|
|
|
- * author: lhbj <br>
|
|
|
- * version: 1.0 <br>
|
|
|
- */
|
|
|
-public class SynchronousPosOSFService implements IHRMsfService {
|
|
|
-
|
|
|
- @Override
|
|
|
- public Object process(Context context, Map<String, Object> map) throws EASBizException, BOSException {
|
|
|
- //例:/server/properties/beisen/posConfig.properties
|
|
|
- String path = (String) map.get("path");
|
|
|
- String posId = (String) map.get("posId");
|
|
|
- String syncStartTimeStr = (String) map.get("syncStartTimeStr");
|
|
|
- String syncEndTimeStr = (String) map.get("syncEndTimeStr");
|
|
|
- try {
|
|
|
- BeisenParamByPropertiesUtil util = new BeisenParamByPropertiesUtil(path);
|
|
|
- Map<String,String> keyMap = util.getConfig();
|
|
|
- return this._syncPosToBeiSen(context,keyMap,posId,syncStartTimeStr,syncEndTimeStr);
|
|
|
- } catch (IOException e) {
|
|
|
- e.printStackTrace();
|
|
|
- } catch (SQLException throwables) {
|
|
|
- throwables.printStackTrace();
|
|
|
- } catch (URISyntaxException e) {
|
|
|
- e.printStackTrace();
|
|
|
- }
|
|
|
- return null;
|
|
|
- }
|
|
|
-
|
|
|
-
|
|
|
- protected String _syncPosToBeiSen(Context ctx,Map<String,String> keyMap, String posId, String syncStartTimeStr, String syncEndTimeStr) throws BOSException, SQLException, IOException, URISyntaxException {
|
|
|
- List<JSONObject> responseList =Lists.newArrayList();
|
|
|
- List<JSONObject> addNewList = this._sendAddNewPosToBeisen(ctx,keyMap,posId,syncStartTimeStr,syncEndTimeStr);
|
|
|
- responseList.addAll(addNewList);
|
|
|
- List<JSONObject> editList = this._sendEditPosToBeisen(ctx,keyMap,posId,syncStartTimeStr,syncEndTimeStr);
|
|
|
- responseList.addAll(editList);
|
|
|
- return responseList.toString();
|
|
|
- }
|
|
|
-
|
|
|
- /**
|
|
|
- * shr系统数据组装北森请求参数
|
|
|
- *
|
|
|
- * @param ctx
|
|
|
- * @param keyMap
|
|
|
- * @param sql
|
|
|
- * @return
|
|
|
- * @throws BOSException
|
|
|
- * @throws SQLException
|
|
|
- */
|
|
|
- protected List<Map<String, Object>> getPostData(Context ctx,Map<String,String> keyMap,StringBuilder sql) throws BOSException, SQLException {
|
|
|
- IRowSet rowSet = DbUtil.executeQuery(ctx,sql.toString());
|
|
|
- List<Map<String, Object>> posList = Lists.newArrayList();
|
|
|
- while (rowSet.next()){
|
|
|
- Map<String, Object> pos = Maps.newHashMap();
|
|
|
- for(Map.Entry<String,String> entry : keyMap.entrySet()){
|
|
|
- String shrKey = entry.getKey();
|
|
|
- String beisenKey = entry.getValue();
|
|
|
- if(shrKey.indexOf(".")>0){
|
|
|
- String[] keys=shrKey.split("\\.");
|
|
|
- if(2==keys.length){
|
|
|
- Map<String,Object> map1 = (Map<String, Object>) pos.get(keys[0]);
|
|
|
- if(null==map1){
|
|
|
- map1=Maps.newHashMap();
|
|
|
- pos.put(keys[0],map1);
|
|
|
- }
|
|
|
- String valueStr = rowSet.getString(keys[1]);
|
|
|
- if(beisenKey.indexOf(",")>0) {
|
|
|
- String[] beisenKeys = beisenKey.split(",");
|
|
|
- Object value = null;
|
|
|
-
|
|
|
- if("integer".equals(beisenKeys[1])){
|
|
|
- if(null!=valueStr){
|
|
|
- value=Integer.parseInt(valueStr);
|
|
|
- }
|
|
|
- }else {
|
|
|
- value = valueStr;
|
|
|
- }
|
|
|
- if(null!=value) {
|
|
|
- map1.put(beisenKeys[0], value);
|
|
|
- }
|
|
|
- }else {
|
|
|
-
|
|
|
- if(null!=valueStr) {
|
|
|
- map1.put(beisenKey, valueStr);
|
|
|
- }
|
|
|
- }
|
|
|
- }else if (3==keys.length){
|
|
|
- Map<String,Object> map1 = (Map<String, Object>) pos.get(keys[0]);
|
|
|
- if(null==map1){
|
|
|
- map1=Maps.newHashMap();
|
|
|
- pos.put(keys[0],map1);
|
|
|
- }
|
|
|
- Map<String,Object> map2 = (Map<String, Object>) map1.get(keys[1]);
|
|
|
- if(null==map2){
|
|
|
- map2=Maps.newHashMap();
|
|
|
- map1.put(keys[1],map1);
|
|
|
- }
|
|
|
- String valueStr = rowSet.getString(keys[2]);
|
|
|
- if(beisenKey.indexOf(",")>0) {
|
|
|
- String[] beisenKeys = beisenKey.split(",");
|
|
|
- Object value = null;
|
|
|
-
|
|
|
- if("integer".equals(beisenKeys[1])){
|
|
|
- if(null!=valueStr){
|
|
|
- value=Integer.parseInt(valueStr);
|
|
|
- }
|
|
|
- }else {
|
|
|
- value = valueStr;
|
|
|
- }
|
|
|
- if(null!=value) {
|
|
|
- map2.put(beisenKeys[0], value);
|
|
|
- }
|
|
|
- }else {
|
|
|
- if(null!=valueStr) {
|
|
|
- map2.put(beisenKey,valueStr);
|
|
|
- }
|
|
|
- }
|
|
|
- }else {
|
|
|
- String valueStr = rowSet.getString(shrKey);
|
|
|
- if(beisenKey.indexOf(",")>0) {
|
|
|
- String[] beisenKeys = beisenKey.split(",");
|
|
|
- Object value = null;
|
|
|
- if("integer".equals(beisenKeys[1])){
|
|
|
- if(null!=valueStr){
|
|
|
- value=Integer.parseInt(valueStr);
|
|
|
- }
|
|
|
- }else {
|
|
|
- value = valueStr;
|
|
|
- }
|
|
|
- if(null!=value) {
|
|
|
- pos.put(beisenKeys[0],value);
|
|
|
- }
|
|
|
- }else {
|
|
|
- if(null!=valueStr) {
|
|
|
- pos.put(beisenKey,valueStr);
|
|
|
- }
|
|
|
- }
|
|
|
- }
|
|
|
- }
|
|
|
- }
|
|
|
- posList.add(pos);
|
|
|
- }
|
|
|
- return posList;
|
|
|
- }
|
|
|
-
|
|
|
-
|
|
|
- public StringBuilder getSql(String posId,String syncStartTimeStr, String syncEndTimeStr,Boolean isAddNew){
|
|
|
- StringBuilder sql = new StringBuilder();
|
|
|
- sql.append(" ");
|
|
|
- sql.append(" select ");
|
|
|
- sql.append(" pos.fid posId, ");
|
|
|
- sql.append(" pos.CFOriginalId posOriginalId, ");
|
|
|
- sql.append(" pos.fnumber posNumber, ");
|
|
|
- sql.append(" pos.fname_l2 posName, ");
|
|
|
- sql.append(" org.fid orgId, ");
|
|
|
- sql.append(" org.CFOriginalId orgOriginalId, ");
|
|
|
- sql.append(" org.fnumber orgNumber, ");
|
|
|
- sql.append(" org.fname_l2 orgName, ");
|
|
|
- sql.append(" (case when pos.FDELETEDSTATUS=2 then 0 else 1 end) posDeletedStatus, ");
|
|
|
- sql.append(" pos.cfzwjzygx posZwjzygx, ");
|
|
|
- sql.append(" pos.cfzyzz posZyzz, ");
|
|
|
- sql.append(" pos.cfgwdwsccg posGwdwsccg, ");
|
|
|
- sql.append(" pos.cfcgzb posCgzb, ");
|
|
|
- sql.append(" pos.cfzlzb posZlzb, ");
|
|
|
- sql.append(" jobf.fname_l2 hrJobFamily, ");
|
|
|
- sql.append(" jobc.fname_l2 hrJobCategory, ");
|
|
|
- sql.append(" jobsc.fname_l2 jobscHrJobSubCategory, ");
|
|
|
- sql.append(" job.fnumber jobNumber, ");
|
|
|
- sql.append(" job.fname_l2 jobName, ");
|
|
|
- sql.append(" lowjg.fname_l2 lowJobGrade, ");
|
|
|
- sql.append(" highjg.fname_l2 highJobGrade, ");
|
|
|
- sql.append(" lowjl.fname_l2 lowJobLevel, ");
|
|
|
- sql.append(" highjl.fname_l2 highJobLevel, ");
|
|
|
- sql.append(" pos.cfeducation education, ");
|
|
|
- sql.append(" pos.cfrequirement requirement, ");
|
|
|
- sql.append(" pos.cfcertification certification, ");
|
|
|
- sql.append(" pos.cfforeignLang foreignLang, ");
|
|
|
- sql.append(" pos.cfknowledge knowledge, ");
|
|
|
- sql.append(" pos.cfskills skills, ");
|
|
|
- sql.append(" pos.cfexperience experience, ");
|
|
|
- sql.append(" pos.cfcoreCompe coreCompe, ");
|
|
|
- sql.append(" pos.cfposition1 position1, ");
|
|
|
- sql.append(" pos.cfptime1 ptime1, ");
|
|
|
- sql.append(" pos.cfposition2 position2, ");
|
|
|
- sql.append(" pos.cfptime2 ptime2, ");
|
|
|
- sql.append(" workAdd.fname_l2 workAdd, ");
|
|
|
- sql.append(" pos.CFFrequency frequency, ");
|
|
|
- sql.append(" pos.cfjobRespon jobRespon, ");
|
|
|
- sql.append(" pos.cfqualifications qualifications, ");
|
|
|
- sql.append(" pos.cfreserved1 reserved1, ");
|
|
|
- sql.append(" pos.cfreserved2 reserved2, ");
|
|
|
- sql.append(" pos.cfreserved3 reserved3, ");
|
|
|
- sql.append(" pos.cfreserved4 reserved4, ");
|
|
|
- sql.append(" pos.cfreserved5 reserved5, ");
|
|
|
- sql.append(" posp.CFOriginalId pospOriginalId1, ");
|
|
|
- sql.append(" posp.CFOriginalId pospOriginalId2, ");
|
|
|
- sql.append(" '' ");
|
|
|
- sql.append(" from ");
|
|
|
- sql.append(" t_org_position pos ");
|
|
|
- sql.append(" left join t_org_admin org on pos.FADMINORGUNITID = org.fid ");
|
|
|
- sql.append(" left join CT_CUS_WorkAdd workAdd on workAdd.fid=pos.CFWorkAddID ");
|
|
|
- sql.append(" left join T_HR_HRJob job on job.FID = pos.FJOBID ");
|
|
|
- sql.append(" left join T_HR_HRJobFamily jobf on jobf.fid = job.FHRJobFamilyID ");
|
|
|
- sql.append(" left join T_HR_HRJobCategory jobc on jobc.fid = job.FHRJobCategoryID ");
|
|
|
- sql.append(" left join T_HR_HRJobSubCategory jobsc on jobsc.fid=job.FHRJobSubCategoryID ");
|
|
|
- sql.append(" left join T_HR_JobGrade lowjg on lowjg.fid = job.FLowJobGradeID ");
|
|
|
- sql.append(" left join T_HR_JobGrade highjg on highjg.fid = job.FHighJobGradeID ");
|
|
|
- sql.append(" left join T_HR_JobLevel lowjl on lowjl.fid=job.FLowJobLevelID ");
|
|
|
- sql.append(" left join T_HR_JobLevel highjl on highjl.fid=job.FHighJobLevelID ");
|
|
|
- sql.append(" left join t_org_position posp on posp.fid=pos.FPARENTID ");
|
|
|
-
|
|
|
- sql.append(" where 1=1 ");
|
|
|
- if(StringUtils.isNotBlank(posId)){
|
|
|
- String[] posIds=posId.split(",");
|
|
|
- sql.append(" and pos.fid in('' ");
|
|
|
- for(String id : posIds){
|
|
|
- sql.append(",'");
|
|
|
- sql.append(id);
|
|
|
- sql.append("'");
|
|
|
- }
|
|
|
- sql.append(") ");
|
|
|
- }
|
|
|
- if(StringUtils.isNotBlank(syncStartTimeStr)){
|
|
|
- sql.append(" and pos.FLastUpdateTime >='"+syncStartTimeStr+"'");
|
|
|
- }
|
|
|
- if(StringUtils.isNotBlank(syncEndTimeStr)){
|
|
|
- sql.append(" and pos.FLastUpdateTime <='"+syncEndTimeStr+"'");
|
|
|
- }
|
|
|
- if(isAddNew){
|
|
|
- sql.append(" and (pos.CFOriginalId is null or pos.CFOriginalId ='')");
|
|
|
- }else {
|
|
|
- sql.append(" and (pos.CFOriginalId is not null and pos.CFOriginalId !='')");
|
|
|
- }
|
|
|
- return sql;
|
|
|
- }
|
|
|
-
|
|
|
-
|
|
|
- protected List<JSONObject> _sendAddNewPosToBeisen(Context ctx,Map<String,String> keyMap, String posId, String syncStartTimeStr, String syncEndTimeStr) throws BOSException, SQLException, IOException, URISyntaxException {
|
|
|
- BeiSenUtils b = new BeiSenUtils(ctx);
|
|
|
- Helper helper = b.helper;
|
|
|
- StringBuilder sql = this.getSql(posId, syncStartTimeStr, syncEndTimeStr, true);
|
|
|
- List<Map<String, Object>> list = this.getPostData(ctx, keyMap, sql);
|
|
|
- List<JSONObject> responseList = Lists.newArrayList();
|
|
|
- for (Map<String, Object> pos : list) {
|
|
|
- // 获取访问令牌
|
|
|
- String token = b.getAccessToken();
|
|
|
- // 若访问令牌不为空且开始时间和结束时间不为空
|
|
|
- if (!com.kingdee.util.StringUtils.isEmpty(token)) {
|
|
|
- // 创建请求头的 Map
|
|
|
- Map<String, String> header = new HashMap<String, String>();
|
|
|
- // 设置请求头的 Content-Type
|
|
|
- header.put("Content-Type", "application/json");
|
|
|
- // 设置请求头的 Authorization
|
|
|
- header.put("Authorization", "Bearer " + token);
|
|
|
- String url = "https://openapi.italent.cn/RecruitV6/api/v1/RecruitOnBoarding/CreatePost";
|
|
|
- JSONObject requestBody = new JSONObject(pos);
|
|
|
- System.out.println("url:" + url);
|
|
|
- System.out.println("requestBody:" + requestBody);
|
|
|
- JSONObject responseJson = helper.getURL(url, header, requestBody, "POST", "", "创建", "北森");
|
|
|
- System.out.println("responseJson:" + responseJson);
|
|
|
- responseList.add(responseJson);
|
|
|
- }
|
|
|
- }
|
|
|
- return responseList;
|
|
|
- }
|
|
|
- protected List<JSONObject> _sendEditPosToBeisen(Context ctx,Map<String,String> keyMap, String posId, String syncStartTimeStr, String syncEndTimeStr) throws BOSException, SQLException, IOException, URISyntaxException {
|
|
|
- BeiSenUtils b = new BeiSenUtils(ctx);
|
|
|
- Helper helper = b.helper;
|
|
|
- StringBuilder sql1 = this.getSql(posId,syncStartTimeStr,syncEndTimeStr,false);
|
|
|
- List<Map<String,Object>> list1= this.getPostData(ctx,keyMap,sql1);
|
|
|
- List<JSONObject> responseList = Lists.newArrayList();
|
|
|
- for(Map<String,Object> pos : list1){
|
|
|
- // 获取访问令牌
|
|
|
- String token = b.getAccessToken();
|
|
|
- // 若访问令牌不为空且开始时间和结束时间不为空
|
|
|
- if (!com.kingdee.util.StringUtils.isEmpty(token)) {
|
|
|
- // 创建请求头的 Map
|
|
|
- Map<String, String> header = new HashMap<String, String>();
|
|
|
- // 设置请求头的 Content-Type
|
|
|
- header.put("Content-Type", "application/json");
|
|
|
- // 设置请求头的 Authorization
|
|
|
- header.put("Authorization", "Bearer " + token);
|
|
|
- String url = "https://openapi.italent.cn/RecruitV6/api/v1/RecruitOnBoarding/CreatePost";
|
|
|
- JSONObject requestBody = new JSONObject(pos);
|
|
|
- System.out.println("url:"+url);
|
|
|
- System.out.println("requestBody:"+requestBody);
|
|
|
- JSONObject responseJson = helper.getURL(url,header, requestBody, "PUT",requestBody.getString("id"),"更新","北森");
|
|
|
- System.out.println("responseJson:"+responseJson);
|
|
|
- responseList.add(responseJson);
|
|
|
- }
|
|
|
- }
|
|
|
- return responseList;
|
|
|
- }
|
|
|
-}
|