From 1887b0fdd18a45151dd35f7e957d0ed0c9be7ce3 Mon Sep 17 00:00:00 2001 From: dxfeng Date: Mon, 27 May 2024 17:37:52 +0800 Subject: [PATCH] =?UTF-8?q?ADD-=E8=81=8C=E4=BD=8D=E5=8F=91=E5=B8=83?= =?UTF-8?q?=E3=80=81=E6=B7=BB=E5=8A=A0=E9=A9=BB=E5=A4=96=E7=9B=B8=E5=85=B3?= =?UTF-8?q?=E5=AD=97=E6=AE=B5=E3=80=81=E6=B7=BB=E5=8A=A0=E5=85=B1=E4=BA=AB?= =?UTF-8?q?=E4=BA=BA=E5=AD=97=E6=AE=B5?= MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit --- ...ase.jar => rpa-sso-sdk-1.1.11.release.jar} | Bin 325696 -> 326839 bytes .../entity/position/PositionSdkInstance.java | 200 ++++++++++++++++++ .../entity/position/PositionSelectItem.java | 51 +++++ .../impl/RecruitPositionServiceImpl.java | 61 ++++-- .../service/impl/RpaJclServiceImpl.java | 4 +- .../recruit/thread/SdkResumeSavedThread.java | 12 +- .../position/ClosePositionModeExpand.java | 23 +- .../position/ReleasePositionModeExpand.java | 37 ++-- .../modeexpand/util/RecruitPositionUtil.java | 36 +++- 9 files changed, 360 insertions(+), 64 deletions(-) rename WEB-INF/lib/{rpa-sso-sdk-1.1.10.release.jar => rpa-sso-sdk-1.1.11.release.jar} (65%) create mode 100644 src/com/engine/recruit/entity/position/PositionSdkInstance.java create mode 100644 src/com/engine/recruit/entity/position/PositionSelectItem.java diff --git a/WEB-INF/lib/rpa-sso-sdk-1.1.10.release.jar b/WEB-INF/lib/rpa-sso-sdk-1.1.11.release.jar similarity index 65% rename from WEB-INF/lib/rpa-sso-sdk-1.1.10.release.jar rename to WEB-INF/lib/rpa-sso-sdk-1.1.11.release.jar index 51b37e1aab420d47be65e165d76905b74d50df0d..443bee9cf0a91de34c2a855cc01f39f6f941e53c 100644 GIT binary patch delta 24722 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 boss_type; + private List liepin_type; + private List lagou_type; + private List job51_type; + private List zhilian_type; + + // BOSS直聘 是否外驻 + private List boss_resident; + private List boss_resident_country; + private List boss_resident_language; + private List boss_resident_time; + private List boss_resident_time_2; + + // 前程无忧-发布城市 + private List job51_city; + // 前程无忧-所属行业 + private List job51_industry; + + + private static volatile PositionSdkInstance positionSdkInstance; + + private PositionSdkInstance() { + + } + + + public static PositionSdkInstance getPositionSdkInstance() { + if (positionSdkInstance == null) { + synchronized (PositionSdkInstance.class) { + if (positionSdkInstance == null) { + ERPAResumeSDKClient client = ERPASDKClients.getResumeSDKClient(); + if (!RecruitPositionUtil.checkAvailable(client)) { + throw new CustomizeRunTimeException("checkAvailable失败!千里聆SDK不可用"); + } + ResumeJobDynamicField resumeJobDynamicField = client.getResumeJobDynamicField(); + positionSdkInstance = new PositionSdkInstance(); + positionSdkInstance.setResumeSDKClient(client); + client.addResumeSavedListener(resumeMqMessage -> { + // 处理获取到的简历信息 + new BaseBean().writeLog("【简历接收回调】:" + JSON.toJSONString(resumeMqMessage)); + //Thread thread = new Thread(new SdkResumeSavedThread(resumeMqMessage)); + //thread.start(); + }); + client.start(); + positionSdkInstance.setBoss_resident(resumeJobDynamicField.getBoss_resident()); + // 去除千里聆返回的重复数据 + List boss_resident_country1 = resumeJobDynamicField.getBoss_resident_country(); + List collect = new ArrayList<>(boss_resident_country1.stream() + .collect(Collectors.toMap( + ResumeJobDynamicField.Item::getValue, + item -> item, + (existing, replacement) -> existing + )) + .values()); + positionSdkInstance.setBoss_resident_country(collect); + positionSdkInstance.setBoss_resident_language(resumeJobDynamicField.getBoss_resident_language()); + positionSdkInstance.setBoss_resident_time_2(resumeJobDynamicField.getBoss_resident_time_2()); + positionSdkInstance.setBoss_resident_time(resumeJobDynamicField.getBoss_resident_time()); + + positionSdkInstance.setJob51_city(resumeJobDynamicField.getJob51_city()); + positionSdkInstance.setJob51_industry(resumeJobDynamicField.getJob51_industry_txt()); + + positionSdkInstance.setBoss_type(resumeJobDynamicField.getBoss_type()); + positionSdkInstance.setLiepin_type(resumeJobDynamicField.getLiepin_type()); + positionSdkInstance.setLagou_type(resumeJobDynamicField.getLagou_type()); + positionSdkInstance.setJob51_type(resumeJobDynamicField.getJob51_type()); + positionSdkInstance.setZhilian_type(resumeJobDynamicField.getZhilian_type()); + } + } + } + return positionSdkInstance; + } + + + public ERPAResumeSDKClient getResumeSDKClient() { + return resumeSDKClient; + } + + public void setResumeSDKClient(ERPAResumeSDKClient resumeSDKClient) { + this.resumeSDKClient = resumeSDKClient; + } + + public List getBoss_type() { + return boss_type; + } + + public void setBoss_type(List boss_type) { + this.boss_type = boss_type; + } + + public List getLiepin_type() { + return liepin_type; + } + + public void setLiepin_type(List liepin_type) { + this.liepin_type = liepin_type; + } + + public List getLagou_type() { + return lagou_type; + } + + public void setLagou_type(List lagou_type) { + this.lagou_type = lagou_type; + } + + public List getJob51_type() { + return job51_type; + } + + public void setJob51_type(List job51_type) { + this.job51_type = job51_type; + } + + public List getZhilian_type() { + return zhilian_type; + } + + public void setZhilian_type(List zhilian_type) { + this.zhilian_type = zhilian_type; + } + + public List getBoss_resident() { + return boss_resident; + } + + public void setBoss_resident(List boss_resident) { + this.boss_resident = boss_resident; + } + + public List getBoss_resident_country() { + return boss_resident_country; + } + + public void setBoss_resident_country(List boss_resident_country) { + this.boss_resident_country = boss_resident_country; + } + + public List getBoss_resident_language() { + return boss_resident_language; + } + + public void setBoss_resident_language(List boss_resident_language) { + this.boss_resident_language = boss_resident_language; + } + + public List getBoss_resident_time() { + return boss_resident_time; + } + + public void setBoss_resident_time(List boss_resident_time) { + this.boss_resident_time = boss_resident_time; + } + + public List getBoss_resident_time_2() { + return boss_resident_time_2; + } + + public void setBoss_resident_time_2(List boss_resident_time_2) { + this.boss_resident_time_2 = boss_resident_time_2; + } + + public List getJob51_city() { + return job51_city; + } + + public void setJob51_city(List job51_city) { + this.job51_city = job51_city; + } + + public List getJob51_industry() { + return job51_industry; + } + + public void setJob51_industry(List job51_industry) { + this.job51_industry = job51_industry; + } +} diff --git a/src/com/engine/recruit/entity/position/PositionSelectItem.java b/src/com/engine/recruit/entity/position/PositionSelectItem.java new file mode 100644 index 0000000..f837d58 --- /dev/null +++ b/src/com/engine/recruit/entity/position/PositionSelectItem.java @@ -0,0 +1,51 @@ +package com.engine.recruit.entity.position; + +import com.weaver.rpa.sdk.clients.application.resume.entity.ResumeJobDynamicField; +import lombok.AllArgsConstructor; +import lombok.Data; +import lombok.NoArgsConstructor; + +import java.util.*; +import java.util.stream.Collectors; + +/** + * 千里聆职位动态字段,转换为多选下拉框数据格式 + * + * @author:dxfeng + * @createTime: 2024/05/22 + * @version: 1.0 + */ +@Data +@AllArgsConstructor +@NoArgsConstructor +public class PositionSelectItem { + private String key; + private String showname; + private boolean selected; + + public static Set convertDynamicFieldItem(List dynamicFieldItemList) { + Set list = new LinkedHashSet<>(); + for (ResumeJobDynamicField.Item item : dynamicFieldItemList) { + PositionSelectItem positionSelectItem = new PositionSelectItem(); + positionSelectItem.setShowname(item.getLabel()); + try { + double parseDouble = Double.parseDouble(item.getValue()); + positionSelectItem.setKey(String.valueOf((int) parseDouble)); + } catch (Exception e) { + positionSelectItem.setKey(item.getValue()); + } + list.add(positionSelectItem); + } + return list; + } + + public static ResumeJobDynamicField.Item getItemByValue(List dynamicFieldItemList, String value) { + return dynamicFieldItemList.stream().filter(item -> (String.valueOf((int) Double.parseDouble(item.getValue())).equals(value))).findFirst().orElse(null); + } + + public static List getItemsByValues(List dynamicFieldItemList, String value) { + String[] split = value.split(","); + List valueList = Arrays.asList(split); + return dynamicFieldItemList.stream().filter(item -> valueList.contains(String.valueOf((int) Double.parseDouble(item.getValue())))).distinct().collect(Collectors.toList()); + } +} diff --git a/src/com/engine/recruit/service/impl/RecruitPositionServiceImpl.java b/src/com/engine/recruit/service/impl/RecruitPositionServiceImpl.java index 5b1b3cb..b3dd91d 100644 --- a/src/com/engine/recruit/service/impl/RecruitPositionServiceImpl.java +++ b/src/com/engine/recruit/service/impl/RecruitPositionServiceImpl.java @@ -1,11 +1,11 @@ package com.engine.recruit.service.impl; import com.engine.core.impl.Service; +import com.engine.recruit.entity.position.PositionSdkInstance; +import com.engine.recruit.entity.position.PositionSelectItem; import com.engine.recruit.exception.CustomizeRunTimeException; import com.engine.recruit.service.RecruitPositionService; -import com.weaver.rpa.sdk.clients.application.resume.ERPAResumeSDKClient; import com.weaver.rpa.sdk.clients.application.resume.entity.ResumeJobDynamicField; -import com.weaver.rpa.sdk.clients.core.ERPASDKClients; import org.apache.commons.lang3.StringUtils; import weaver.conn.RecordSet; import weaver.general.Util; @@ -46,22 +46,27 @@ public class RecruitPositionServiceImpl extends Service implements RecruitPositi String selectValue = Util.null2String(param.get("selectValue")); - ERPAResumeSDKClient client = ERPASDKClients.getResumeSDKClient(); - ResumeJobDynamicField resumeJobDynamicField = client.getResumeJobDynamicField(); + PositionSdkInstance positionSdkInstance = PositionSdkInstance.getPositionSdkInstance(); // 获取职位类别表单 if ("positionType".equals(conditionType)) { String dsfqd = Util.null2String(param.get("dsfqd")); - getPositionType(dsfqd, selectValue, apidatas, resumeJobDynamicField); + getPositionType(dsfqd, selectValue, apidatas, positionSdkInstance); } // 前程无忧-发布城市 if ("job51City".equals(conditionType)) { - getCityType(selectValue, apidatas, resumeJobDynamicField); + getCityType(selectValue, apidatas, positionSdkInstance); } + // 前程无忧-所属行业 if ("industryType".equals(conditionType)) { - getIndustryType(selectValue, apidatas, resumeJobDynamicField); + getIndustryType(selectValue, apidatas, positionSdkInstance); + } + + // BOSS直聘-是否驻外 + if ("multiSelect".equals(conditionType)) { + getMultiSelect(apidatas, positionSdkInstance); } return apidatas; } @@ -72,9 +77,9 @@ public class RecruitPositionServiceImpl extends Service implements RecruitPositi * @param dsfqd * @param selectValue * @param apidatas - * @param resumeJobDynamicField + * @param positionSdkInstance */ - private void getPositionType(String dsfqd, String selectValue, Map apidatas, ResumeJobDynamicField resumeJobDynamicField) { + private void getPositionType(String dsfqd, String selectValue, Map apidatas, PositionSdkInstance positionSdkInstance) { String[] split = selectValue.split("#"); Map selectValueMap = new HashMap<>(); for (String s : split) { @@ -100,30 +105,30 @@ public class RecruitPositionServiceImpl extends Service implements RecruitPositi boolean job51Show = false; boolean zhilianShow = false; if (dsfqd.contains("0")) { - List boss_type = (List) resumeJobDynamicField.getBoss_type(); + List boss_type = positionSdkInstance.getBoss_type(); apidatas.put("boss", boss_type); bossShow = true; } if (dsfqd.contains("4")) { - List liepin_type = (List) resumeJobDynamicField.getLiepin_type(); + List liepin_type = positionSdkInstance.getLiepin_type(); apidatas.put("liepin", liepin_type); liepinShow = true; } if (dsfqd.contains("3")) { - List lagou_type = (List) resumeJobDynamicField.getLagou_type(); + List lagou_type = positionSdkInstance.getLagou_type(); apidatas.put("lagou", lagou_type); lagouShow = true; } if (dsfqd.contains("2")) { - List job51_type = (List) resumeJobDynamicField.getJob51_type(); + List job51_type = positionSdkInstance.getJob51_type(); apidatas.put("job51", job51_type); job51Show = true; } if (dsfqd.contains("1")) { - List zhilian_type = (List) resumeJobDynamicField.getZhilian_type(); + List zhilian_type = positionSdkInstance.getZhilian_type(); apidatas.put("zhilian", zhilian_type); zhilianShow = true; } @@ -139,16 +144,16 @@ public class RecruitPositionServiceImpl extends Service implements RecruitPositi * * @param selectValue * @param apidatas - * @param resumeJobDynamicField + * @param positionSdkInstance */ - private void getCityType(String selectValue, Map apidatas, ResumeJobDynamicField resumeJobDynamicField) { + private void getCityType(String selectValue, Map apidatas, PositionSdkInstance positionSdkInstance) { List valueList = new ArrayList<>(); if (StringUtils.isNotBlank(selectValue)) { String[] split = selectValue.split(","); valueList = Arrays.asList(split); } - List job51_city = (List) resumeJobDynamicField.getJob51_city(); + List job51_city = positionSdkInstance.getJob51_city(); apidatas.put("job51_city", job51_city); apidatas.put("job51CityValue", valueList); } @@ -158,9 +163,9 @@ public class RecruitPositionServiceImpl extends Service implements RecruitPositi * * @param selectValue * @param apidatas - * @param resumeJobDynamicField + * @param positionSdkInstance */ - private void getIndustryType(String selectValue, Map apidatas, ResumeJobDynamicField resumeJobDynamicField) { + private void getIndustryType(String selectValue, Map apidatas, PositionSdkInstance positionSdkInstance) { List> valueList = new ArrayList<>(); if (StringUtils.isNotBlank(selectValue)) { String[] split = selectValue.split("#"); @@ -170,8 +175,24 @@ public class RecruitPositionServiceImpl extends Service implements RecruitPositi } } - List job51_industry = (List) resumeJobDynamicField.getJob51_industry_txt(); + List job51_industry = positionSdkInstance.getJob51_industry(); apidatas.put("job51_industry", job51_industry); apidatas.put("job51IndustryValue", valueList); } + + + /** + * 获取招聘职位,多线下拉框字段信息 + * + * @param apidatas + * @param positionSdkInstance + */ + private void getMultiSelect(Map apidatas, PositionSdkInstance positionSdkInstance) { + apidatas.put("boss_resident", PositionSelectItem.convertDynamicFieldItem(positionSdkInstance.getBoss_resident())); + apidatas.put("boss_resident_country", PositionSelectItem.convertDynamicFieldItem(positionSdkInstance.getBoss_resident_country())); + apidatas.put("boss_resident_language", PositionSelectItem.convertDynamicFieldItem(positionSdkInstance.getBoss_resident_language())); + apidatas.put("boss_resident_time", PositionSelectItem.convertDynamicFieldItem(positionSdkInstance.getBoss_resident_time())); + apidatas.put("boss_resident_time_2", PositionSelectItem.convertDynamicFieldItem(positionSdkInstance.getBoss_resident_time_2())); + apidatas.put("job51_city", PositionSelectItem.convertDynamicFieldItem(positionSdkInstance.getJob51_city())); + } } diff --git a/src/com/engine/recruit/service/impl/RpaJclServiceImpl.java b/src/com/engine/recruit/service/impl/RpaJclServiceImpl.java index 6eeb14c..15ece29 100644 --- a/src/com/engine/recruit/service/impl/RpaJclServiceImpl.java +++ b/src/com/engine/recruit/service/impl/RpaJclServiceImpl.java @@ -2,11 +2,11 @@ package com.engine.recruit.service.impl; import com.engine.core.impl.Service; import com.engine.recruit.conn.RecruitRecordSet; +import com.engine.recruit.entity.position.PositionSdkInstance; import com.engine.recruit.exception.CustomizeRunTimeException; import com.engine.recruit.service.RpaJclService; import com.weaver.rpa.sdk.clients.application.resume.ERPAResumeSDKClient; import com.weaver.rpa.sdk.clients.application.resume.entity.ResumeEmailSetting; -import com.weaver.rpa.sdk.clients.core.ERPASDKClients; import weaver.conn.RecordSet; import weaver.general.Util; @@ -26,7 +26,7 @@ public class RpaJclServiceImpl extends Service implements RpaJclService { rs.executeQuery("select * from uf_jcl_qllyxpz where id = ? ", billId); Map dataMap = RecruitRecordSet.getSingleRecordMap(rs); - ERPAResumeSDKClient resumeSDKClient = ERPASDKClients.getResumeSDKClient(); + ERPAResumeSDKClient resumeSDKClient = PositionSdkInstance.getPositionSdkInstance().getResumeSDKClient(); String userId = Util.null2String(dataMap.get("szr")); String status = Util.null2String(dataMap.get("zt")); String server = Util.null2String(dataMap.get("yjjsfwq")); diff --git a/src/com/engine/recruit/thread/SdkResumeSavedThread.java b/src/com/engine/recruit/thread/SdkResumeSavedThread.java index a87ee59..ebad661 100644 --- a/src/com/engine/recruit/thread/SdkResumeSavedThread.java +++ b/src/com/engine/recruit/thread/SdkResumeSavedThread.java @@ -7,11 +7,11 @@ import com.engine.recruit.conn.CheckRepeatResume; import com.engine.recruit.conn.PositionCommonInfo; import com.engine.recruit.conn.RecruitDataMap; import com.engine.recruit.constant.RecruitConstant; +import com.engine.recruit.entity.position.PositionSdkInstance; import com.engine.recruit.enums.ApplicationStatusEnum; import com.engine.recruit.enums.CommonBrowserTypeEnum; import com.engine.recruit.enums.HighestDegreeEnum; import com.weaver.rpa.sdk.clients.application.resume.ERPAResumeSDKClient; -import com.weaver.rpa.sdk.clients.core.ERPASDKClients; import com.weaver.util.threadPool.entity.LocalRunnable; import org.apache.commons.collections.CollectionUtils; import org.apache.commons.lang3.StringUtils; @@ -212,15 +212,7 @@ public class SdkResumeSavedThread extends LocalRunnable { BaseBean baseBean = new BaseBean(); baseBean.writeLog("解析千里聆SDK原始简历,resumeFileId===" + resumeFileId); List docIdList = new ArrayList<>(); - ERPAResumeSDKClient client = ERPASDKClients.getResumeSDKClient(); - // 在启动监听前需要配置好简历接收回调 - client.addResumeSavedListener(resumeMqMessage -> { - // 处理获取到的简历信息 - baseBean.writeLog("【简历接收回调】:" + JSON.toJSONString(resumeMqMessage)); - Thread thread = new Thread(new SdkResumeSavedThread(resumeMqMessage)); - thread.start(); - }); - client.start(); + ERPAResumeSDKClient client = PositionSdkInstance.getPositionSdkInstance().getResumeSDKClient(); client.downloadResumeFile(resumeFileId, (fileName, stream) -> { try { baseBean.writeLog("解析千里聆SDK原始简历,fileName===" + fileName); diff --git a/src/weaver/formmode/recruit/modeexpand/position/ClosePositionModeExpand.java b/src/weaver/formmode/recruit/modeexpand/position/ClosePositionModeExpand.java index 63898d5..1b16137 100644 --- a/src/weaver/formmode/recruit/modeexpand/position/ClosePositionModeExpand.java +++ b/src/weaver/formmode/recruit/modeexpand/position/ClosePositionModeExpand.java @@ -1,9 +1,7 @@ package weaver.formmode.recruit.modeexpand.position; -import com.alibaba.fastjson.JSON; -import com.engine.recruit.thread.SdkResumeSavedThread; +import com.engine.recruit.entity.position.PositionSdkInstance; import com.weaver.rpa.sdk.clients.application.resume.ERPAResumeSDKClient; -import com.weaver.rpa.sdk.clients.core.ERPASDKClients; import com.weaver.rpa.sdk.clients.core.entity.SDKCore; import com.weaver.rpa.sdk.clients.core.utils.ERPASDKInitUtils; import org.apache.commons.lang3.StringUtils; @@ -57,15 +55,16 @@ public class ClosePositionModeExpand extends AbstractModeExpandJavaCodeNew { return resultMap; } long jobId = Long.parseLong(qllgwid); - ERPAResumeSDKClient client = ERPASDKClients.getResumeSDKClient(); - // 在启动监听前需要配置好简历接收回调 - client.addResumeSavedListener(resumeMqMessage -> { - // 处理获取到的简历信息 - baseBean.writeLog("【简历接收回调】:" + JSON.toJSONString(resumeMqMessage)); - Thread thread = new Thread(new SdkResumeSavedThread(resumeMqMessage)); - thread.start(); - }); - client.start(); + ERPAResumeSDKClient client = PositionSdkInstance.getPositionSdkInstance().getResumeSDKClient(); + + //// 在启动监听前需要配置好简历接收回调 + //client.addResumeSavedListener(resumeMqMessage -> { + // // 处理获取到的简历信息 + // baseBean.writeLog("【简历接收回调】:" + JSON.toJSONString(resumeMqMessage)); + // Thread thread = new Thread(new SdkResumeSavedThread(resumeMqMessage)); + // thread.start(); + //}); + //client.start(); String userId = String.valueOf(user.getUID()); ResumeTaskResult result = client.closeResumeJob(userId, jobId); String errorMsg = ""; diff --git a/src/weaver/formmode/recruit/modeexpand/position/ReleasePositionModeExpand.java b/src/weaver/formmode/recruit/modeexpand/position/ReleasePositionModeExpand.java index 9909265..2723a56 100644 --- a/src/weaver/formmode/recruit/modeexpand/position/ReleasePositionModeExpand.java +++ b/src/weaver/formmode/recruit/modeexpand/position/ReleasePositionModeExpand.java @@ -1,10 +1,9 @@ package weaver.formmode.recruit.modeexpand.position; import com.alibaba.fastjson.JSON; -import com.engine.recruit.thread.SdkResumeSavedThread; +import com.engine.recruit.entity.position.PositionSdkInstance; import com.weaver.rpa.sdk.clients.application.resume.ERPAResumeSDKClient; import com.weaver.rpa.sdk.clients.application.resume.entity.ResumeJobV2Dto; -import com.weaver.rpa.sdk.clients.core.ERPASDKClients; import org.apache.commons.lang3.StringUtils; import org.springframework.beans.BeanUtils; import weaver.conn.RecordSet; @@ -54,7 +53,7 @@ public class ReleasePositionModeExpand extends AbstractModeExpandJavaCodeNew { jobId = Long.parseLong(qllgwid); } } - ERPAResumeSDKClient client = ERPASDKClients.getResumeSDKClient(); + ERPAResumeSDKClient client = PositionSdkInstance.getPositionSdkInstance().getResumeSDKClient(); Map map = new HashMap<>(16); MainTableInfo mainTableInfo = requestInfo.getMainTableInfo(); Property[] properties = mainTableInfo.getProperty(); @@ -63,12 +62,12 @@ public class ReleasePositionModeExpand extends AbstractModeExpandJavaCodeNew { } ResumeJobV2Dto resumeJobDto = RecruitPositionUtil.convertMap2ResumeJobV2Dto(user,map); // 发布千里聆职位 - if (!RecruitPositionUtil.checkAvailable(client)) { - baseBean.writeLog("千里聆未开通简历应用。"); - resultMap.put("errmsg", "千里聆未开通简历应用。"); - resultMap.put("flag", "false"); - return resultMap; - } + //if (!RecruitPositionUtil.checkAvailable(client)) { + // baseBean.writeLog("千里聆未开通简历应用。"); + // resultMap.put("errmsg", "千里聆未开通简历应用。"); + // resultMap.put("flag", "false"); + // return resultMap; + //} String userId = String.valueOf(user.getUID()); // 未创建职位,则先创建职位 if (jobId == -1) { @@ -87,16 +86,16 @@ public class ReleasePositionModeExpand extends AbstractModeExpandJavaCodeNew { }); } - // 在启动监听前需要配置好简历接收回调 - client.addResumeSavedListener(resumeMqMessage -> { - // 处理获取到的简历信息 - baseBean.writeLog("【简历接收回调】:" + JSON.toJSONString(resumeMqMessage)); - Thread thread = new Thread(new SdkResumeSavedThread(resumeMqMessage)); - thread.start(); - }); - - - client.start(); + //// 在启动监听前需要配置好简历接收回调 + //client.addResumeSavedListener(resumeMqMessage -> { + // // 处理获取到的简历信息 + // baseBean.writeLog("【简历接收回调】:" + JSON.toJSONString(resumeMqMessage)); + // Thread thread = new Thread(new SdkResumeSavedThread(resumeMqMessage)); + // thread.start(); + //}); + // + // + //client.start(); List platformIds; platformIds = resumeJobDto.getPlatformList(); String errorMsg = ""; diff --git a/src/weaver/formmode/recruit/modeexpand/util/RecruitPositionUtil.java b/src/weaver/formmode/recruit/modeexpand/util/RecruitPositionUtil.java index e749721..ab58876 100644 --- a/src/weaver/formmode/recruit/modeexpand/util/RecruitPositionUtil.java +++ b/src/weaver/formmode/recruit/modeexpand/util/RecruitPositionUtil.java @@ -4,6 +4,8 @@ import cn.hutool.core.convert.Convert; import com.alibaba.fastjson.JSON; import com.engine.recruit.conn.ApplicantCommonInfo; import com.engine.recruit.conn.ModeBrowserCommonInfo; +import com.engine.recruit.entity.position.PositionSdkInstance; +import com.engine.recruit.entity.position.PositionSelectItem; import com.engine.recruit.enums.PositionThirdChannelEnum; import com.engine.recruit.exception.CustomizeRunTimeException; import com.weaver.rpa.sdk.clients.application.resume.ERPAResumeSDKClient; @@ -322,6 +324,37 @@ public class RecruitPositionUtil { } resumeJobV2Dto.setZwfl(zwflList); + PositionSdkInstance positionSdkInstance = PositionSdkInstance.getPositionSdkInstance(); + // 是否驻外 + String sfzw = Util.null2String(map.get("sfzw")); + resumeJobV2Dto.setBossResident(PositionSelectItem.getItemByValue(positionSdkInstance.getBoss_resident(), sfzw)); + if (!"3".equals(sfzw)) { + // 驻外国家或地区 + String zwgjhdq = Util.null2String(map.get("zwgjhdq")); + resumeJobV2Dto.setBossResidentCountry(PositionSelectItem.getItemsByValues(positionSdkInstance.getBoss_resident_country(), zwgjhdq)); + // 驻外语言要求 + String zwyyyq = Util.null2String(map.get("zwyyyq")); + resumeJobV2Dto.setBossResidentLanguage(PositionSelectItem.getItemsByValues(positionSdkInstance.getBoss_resident_language(), zwyyyq)); + // 驻外时长 + String zwsc = Util.null2String(map.get("zwsc")); + if ("1".equals(sfzw)) { + resumeJobV2Dto.setBossResidentTime(PositionSelectItem.getItemByValue(positionSdkInstance.getBoss_resident_time(), zwsc)); + } else { + resumeJobV2Dto.setBossResidentTime(PositionSelectItem.getItemByValue(positionSdkInstance.getBoss_resident_time_2(), zwsc)); + } + } + String zpzwfzr = Util.null2String(map.get("zpzwfzr")); + String zpxzr = Util.null2String(map.get("zpxzr")); + List userList = new ArrayList<>(); + if (StringUtils.isNotBlank(zpzwfzr)) { + userList.addAll(Arrays.asList(zpzwfzr.split(","))); + } + if (StringUtils.isNotBlank(zpxzr)) { + userList.addAll(Arrays.asList(zpxzr.split(","))); + } + + resumeJobV2Dto.setShareThirdUserList(userList); + return resumeJobV2Dto; } @@ -408,7 +441,8 @@ public class RecruitPositionUtil { } public static boolean checkAvailable(ERPAResumeSDKClient client) { - HttpClientUtils.setTimeout(10000);//默认10秒 + //默认10秒 + HttpClientUtils.setTimeout(10000); if (client == null || !client.available()) { new BaseBean().writeLog("checkAvailable!client=" + JSON.toJSONString(client)); return false;