generated from dxfeng/secondev-chapanda-feishu
Merge pull request 'feature/dxf' (#9) from feature/dxf into develop
Reviewed-on: http://221.226.25.34:3000/dxfeng/weaver-hrm-recruit/pulls/9
This commit is contained in:
commit
e85cbf66bf
Binary file not shown.
Binary file not shown.
|
|
@ -1,8 +1,17 @@
|
|||
#\u805A\u624D\u6797\u62DB\u8058\u6D88\u606F\u63D0\u9192\uFF0C\u6D88\u606F\u6765\u6E90
|
||||
#############################\u975E\u6807\u5305\u57FA\u7840\u914D\u7F6E\u76F8\u5173\u914D\u7F6E##############################
|
||||
defaultCloseNonStandard163=true
|
||||
|
||||
#############################\u670D\u52A1\u5668\u76F8\u5173\u4FE1\u606F##############################
|
||||
#\u5916\u7F51\u6620\u5C04\u5730\u5740
|
||||
#HTTP_URL=http://221.226.25.34:8086
|
||||
HTTP_URL=http://127.0.0.1:8089
|
||||
|
||||
#############################\u6D88\u606F\u63D0\u9192\u76F8\u5173\u914D\u7F6E##############################
|
||||
#\u805A\u624D\u6797\u9ED8\u8BA4\u62DB\u8058\u6D88\u606F\u63D0\u9192\uFF0C\u6D88\u606F\u6765\u6E90(\u6D88\u606F\u6765\u6E90ID\u83B7\u53D6\u65B9\u5F0F\uFF1A==\u300B\u5E94\u7528\u4E2D\u5FC3-\u6D88\u606F\u4E2D\u5FC3-\u6D88\u606F\u7C7B\u578B\u8BBE\u7F6E>>>>\u6D88\u606F\u6765\u6E90-\u5217\u4E2D\u5B57\u6BB5\u4E2D\u7684\u7ED1\u5B9A\u6807\u8BC6)
|
||||
RECRUIT_MESSAGE_TYPE=2022061063
|
||||
|
||||
|
||||
#\u9762\u8BD5\u76F8\u5173\u6D88\u606F\u63D0\u9192\uFF0C\u6D88\u606F\u6765\u6E90
|
||||
#\u9762\u8BD5\u53CD\u9988\u6D88\u606F\u63D0\u9192\uFF0C\u6D88\u606F\u6765\u6E90
|
||||
INTERVIEW_MESSAGE_TYPE=2022061063
|
||||
#\u6DFB\u52A0\u9762\u8BD5\u6D88\u606F\u63D0\u9192\u6807\u9898
|
||||
INTERVIEW_ADD_MESSAGE_TITLE=\u9762\u8BD5\u5B89\u6392\u63D0\u9192
|
||||
|
|
@ -16,9 +25,48 @@ INTERVIEW_EVALUATE_MESSAGE_TITLE=\u9762\u8BD5\u8BC4\u4EF7\u63D0\u9192
|
|||
JOIN_BLACKLIST_MESSAGE_TITLE=\u4EBA\u624D\u9ED1\u540D\u5355\u901A\u77E5
|
||||
|
||||
#\u7B5B\u9009\u53CD\u9988
|
||||
#\u7B5B\u9009\u53CD\u9988\u6D88\u606F\u63D0\u9192\uFF0C\u6D88\u606F\u6765\u6E90
|
||||
SCREENING_MESSAGE_TYPE=2022061063
|
||||
#\u7B5B\u9009\u53CD\u9988\uFF0C\u6D88\u606F\u63D0\u9192\u6807\u9898
|
||||
SCREENING_MESSAGE_TITLE=\u7B80\u5386\u7B5B\u9009
|
||||
SCREENING_MESSAGE_URL=/wui/index.html#/main/cube/search?customid=65
|
||||
#\u7B5B\u9009\u53CD\u9988\uFF0C\u6D88\u606F\u63D0\u9192\u94FE\u63A5\u5730\u5740(\u9700\u66FF\u6362\u4E0B\u9762\u94FE\u63A5\u5730\u5740\u7684ID\uFF0CID\u83B7\u53D6\u65B9\u5F0F\uFF1A==\u300B\u5EFA\u6A21\u5F15\u64CE-\u5E94\u7528\u5EFA\u6A21-\u67E5\u8BE2>>>>\u805A\u624D\u6797\u62DB\u8058\u7BA1\u7406-\u5E94\u8058\u8005\u7B80\u5386-\u7B5B\u9009\u53CD\u9988)
|
||||
SCREENING_MESSAGE_URL=/wui/index.html#/main/cube/search?customid=64
|
||||
|
||||
#\u5E94\u8058\u8005\u7B80\u5386\u5B58\u653E\u76EE\u5F55ID
|
||||
APPLICANTS_RESUMES_CATEGORY=110
|
||||
|
||||
#############################\u79FB\u52A8\u5EFA\u6A21\u76F8\u5173\u914D\u7F6E##############################
|
||||
#\u914D\u7F6E\u83B7\u53D6\u8DEF\u5F84\uFF1A\u79FB\u52A8\u5F15\u64CE-\u5E94\u7528\u5EFA\u6A21-\u5E94\u7528
|
||||
#APPID\u83B7\u53D6\u65B9\u5F0F\uFF1A\u9009\u62E9\u5BF9\u5E94\u7684\u5E94\u7528\uFF0C\u9875\u9762\u5373\u5C55\u793A\u5BF9\u5E94ID
|
||||
#\u79FB\u52A8\u5EFA\u6A21\u5730\u5740\u83B7\u53D6\u65B9\u5F0F\uFF1A\u9009\u62E9\u5BF9\u5E94\u7684\u5E94\u7528\uFF0C\u9F20\u6807\u53F3\u952E>>\u514D\u767B\u9646\u8BBF\u95EE\u8BBE\u7F6E\uFF0C\u5373\u53EF\u590D\u5236\u5E94\u7528\u8BBF\u95EE\u5730\u5740
|
||||
|
||||
#\u4FE1\u606F\u91C7\u96C6\u79FB\u52A8\u5EFA\u6A21APPID
|
||||
MOBILE_APPID_COLLECT=3
|
||||
#\u4FE1\u606F\u91C7\u96C6\u79FB\u52A8\u5EFA\u6A21\u5730\u5740
|
||||
COLLECT_MESSAGE_LINK=http://ip:port/mobilemode/mobile/view.html?appid=3&mTokenFrom=anonymous&mToken=6B56BDC3C4233A984BA4BCE626FD44CF
|
||||
|
||||
#offer\u79FB\u52A8\u5EFA\u6A21APPID
|
||||
MOBILE_APPID_OFFER=2
|
||||
#offer\u53CD\u9988\u79FB\u52A8\u5EFA\u6A21\u5730\u5740
|
||||
OFFER_MOBILE_URL=http://ip:port/mobilemode/mobile/view.html?appid=2&mTokenFrom=anonymous&mToken=C13059E5D6B68D0F23BC30B80E440C42
|
||||
|
||||
|
||||
#############################\u6587\u6863\u76EE\u5F55\u76F8\u5173\u914D\u7F6E##############################
|
||||
#\u539F\u59CB\u7B80\u5386\u9644\u4EF6\u76EE\u5F55ID\uFF08\u540E\u7AEF\u5F15\u64CE-\u5185\u5BB9\u5F15\u64CE-\u76EE\u5F55\u8BBE\u7F6E-\u6587\u6863\u76EE\u5F55>>>>\u62DB\u8058-\u539F\u59CB\u7B80\u5386\u9644\u4EF6\uFF09
|
||||
APPLICANTS_RESUMES_CATEGORY=110
|
||||
|
||||
|
||||
#############################\u53CD\u9988\u5730\u5740\u76F8\u5173\u914D\u7F6E##############################
|
||||
#\u9762\u8BD5\u53CD\u9988\u5730\u5740\uFF0C\u5982\u672A\u81EA\u884C\u8C03\u6574ecode,\u65E0\u9700\u4FEE\u6539\u8BE5\u5730\u5740
|
||||
INTERVIEW_FEEDBACK_URL=/spa/custom/static/index.html#/main/cs/app/9277c228302347dc88a958b69ee96234_Interview
|
||||
|
||||
|
||||
#############################\u5E94\u8058\u8005\u5361\u7247\u7B80\u5386\u8BC6\u522B\u914D\u7F6E##############################
|
||||
#\u5E94\u8058\u8005\u5361\u7247\uFF0C\u7B80\u5386\u8BC6\u522B\u5B9E\u73B0\u7C7B\uFF0C\u5982\u672A\u8D2D\u4E70OCR\u670D\u52A1\uFF0C\u65E0\u9700\u914D\u7F6E
|
||||
#\u5343\u91CC\u8046\u5B9E\u73B0\u7C7B\uFF1Acom.engine.recruit.service.impl.ResumeRecognitionServiceImpl
|
||||
OCR_TYPE=com.engine.recruit.service.impl.ResumeRecognitionServiceImpl
|
||||
|
||||
#\u7B80\u5386\u667A\u80FD\u62BD\u53D6\u670D\u52A1-\u5343\u91CC\u8046\u5730\u5740
|
||||
OCR_URL=https://open.easst.cn/openapi/rest/resume
|
||||
#appid
|
||||
APP_ID=84th31r9
|
||||
#appSecret
|
||||
APP_SECRET=b43c83ea6f2169f2fd20e691bcdfa6f6
|
||||
|
|
@ -0,0 +1,12 @@
|
|||
package com.api.recruit.controller;
|
||||
|
||||
import javax.ws.rs.Path;
|
||||
|
||||
/**
|
||||
* @author:dxfeng
|
||||
* @createTime: 2023/12/12
|
||||
* @version: 1.0
|
||||
*/
|
||||
@Path("/jcl/recruit/resume")
|
||||
public class ResumeRecognitionController extends com.engine.recruit.controller.ResumeRecognitionController {
|
||||
}
|
||||
|
|
@ -0,0 +1,12 @@
|
|||
package com.api.recruit.controller;
|
||||
|
||||
import javax.ws.rs.Path;
|
||||
|
||||
/**
|
||||
* @author:dxfeng
|
||||
* @createTime: 2024/03/13
|
||||
* @version: 1.0
|
||||
*/
|
||||
@Path("/jcl/recruit/remind")
|
||||
public class ResumeRemindController extends com.engine.recruit.controller.ResumeRemindController {
|
||||
}
|
||||
|
|
@ -5,7 +5,7 @@ import javax.ws.rs.Path;
|
|||
/**
|
||||
* @Author liang.cheng
|
||||
* @Date 2023/10/17 10:49 AM
|
||||
* @Description: TODO
|
||||
* @Description:
|
||||
* @Version 1.0
|
||||
*/
|
||||
|
||||
|
|
|
|||
|
|
@ -0,0 +1,12 @@
|
|||
package com.api.recruit.controller;
|
||||
|
||||
import javax.ws.rs.Path;
|
||||
|
||||
/**
|
||||
* @author:dxfeng
|
||||
* @createTime: 2023/10/23
|
||||
* @version: 1.0
|
||||
*/
|
||||
@Path("/jcl/recruit/written")
|
||||
public class WrittenResultsController extends com.engine.recruit.controller.WrittenResultsController{
|
||||
}
|
||||
|
|
@ -0,0 +1,54 @@
|
|||
package com.api.recruit.listener;
|
||||
|
||||
|
||||
import com.sun.jersey.api.model.AbstractResourceModelContext;
|
||||
import com.sun.jersey.api.model.AbstractResourceModelListener;
|
||||
import com.weaver.upgrade.FunctionUpgradeUtil;
|
||||
import org.apache.commons.lang3.StringUtils;
|
||||
import weaver.conn.RecordSet;
|
||||
import weaver.general.BaseBean;
|
||||
import weaver.system.License;
|
||||
|
||||
import javax.ws.rs.ext.Provider;
|
||||
|
||||
@Provider
|
||||
public class InitListener implements AbstractResourceModelListener {
|
||||
@Override
|
||||
public void onLoaded(AbstractResourceModelContext abstractResourceModelContext) {
|
||||
int menuid = 100188;
|
||||
BaseBean bb = new BaseBean();
|
||||
String cId = new License().getCId();
|
||||
if(cId.length() > 7) {
|
||||
cId = cId.substring(cId.length() - 7);
|
||||
}
|
||||
String defaultCloseNonStandard151 = bb.getPropValue("jclRecruit", "defaultCloseNonStandard163");
|
||||
if(StringUtils.isNotBlank(cId) && "true".equals(defaultCloseNonStandard151)) {
|
||||
int cid = Integer.parseInt(cId);
|
||||
if(!hasMenuInfo(cid, "left", menuid)) {
|
||||
bb.writeLog("163招聘管理 添加默认菜单控制");
|
||||
insertMenuInfo(cid, "left", menuid);
|
||||
}
|
||||
}
|
||||
}
|
||||
|
||||
private void insertMenuInfo(int cid,String type,int id){
|
||||
RecordSet rs = new RecordSet();
|
||||
BaseBean bb = new BaseBean();
|
||||
bb.writeLog("FunctionUpgradeUtil.getMenuId(cid,id):" + FunctionUpgradeUtil.getMenuId(cid,id));
|
||||
String sql ="INSERT INTO menucontrollist (type,menuid,isopen) VALUES('"+type+"','"+FunctionUpgradeUtil.getMenuId(cid,id)+"','"+FunctionUpgradeUtil.getMenuStatus(id,-1,cid)+"')";
|
||||
rs.execute(sql);
|
||||
}
|
||||
|
||||
private boolean hasMenuInfo(int cid, String type, int id) {
|
||||
RecordSet rs = new RecordSet();
|
||||
String sql = "select count(1) as count from menucontrollist where type = ? and menuid = ?";
|
||||
rs.executeQuery(sql,type, FunctionUpgradeUtil.getMenuId(cid,id));
|
||||
if(rs.next()) {
|
||||
int count = rs.getInt("count");
|
||||
if(count > 0) {
|
||||
return true;
|
||||
}
|
||||
}
|
||||
return false;
|
||||
}
|
||||
}
|
||||
|
|
@ -63,6 +63,41 @@ public class ApplicantCommonInfo {
|
|||
return cancelReason;
|
||||
}
|
||||
|
||||
/**
|
||||
* 获取表单下拉框值
|
||||
*
|
||||
* @param formId 表单ID
|
||||
* @param fieldName 字段明湖曾
|
||||
* @param selectName 下拉框展示内容
|
||||
* @return
|
||||
*/
|
||||
public static String getSelectValue(String formId, String fieldName, String selectName) {
|
||||
String selectValue = "";
|
||||
RecordSet rs = new RecordSet();
|
||||
rs.executeQuery("select selectvalue from workflow_selectitem where fieldid =( select id from workflow_billfield where billid = ? and fieldname = ? ) and selectname = ?", formId, fieldName, selectName);
|
||||
if (rs.next()) {
|
||||
selectValue = rs.getString("selectvalue");
|
||||
}
|
||||
return selectValue;
|
||||
}
|
||||
|
||||
/**
|
||||
* 获取表单下拉框展示文本
|
||||
*
|
||||
* @param formId 表单ID
|
||||
* @param fieldName 字段明湖曾
|
||||
* @return
|
||||
*/
|
||||
public static Map<String, String> getSelectMap(String formId, String fieldName) {
|
||||
Map<String, String> selectMap = new HashMap<>();
|
||||
RecordSet rs = new RecordSet();
|
||||
rs.executeQuery("select selectvalue,selectname from workflow_selectitem where fieldid =( select id from workflow_billfield where billid = ? and fieldname = ? ) ", formId, fieldName);
|
||||
while (rs.next()) {
|
||||
selectMap.put(rs.getString("selectvalue"), rs.getString("selectname"));
|
||||
}
|
||||
return selectMap;
|
||||
}
|
||||
|
||||
|
||||
/**
|
||||
* 获取招聘通用浏览按钮展示内容
|
||||
|
|
@ -78,7 +113,7 @@ public class ApplicantCommonInfo {
|
|||
RecordSet rs = new RecordSet();
|
||||
String[] split = id.split(",");
|
||||
for (String s : split) {
|
||||
rs.executeQuery("select xxnr from uf_sjzd where id = ?", id);
|
||||
rs.executeQuery("select xxnr from uf_sjzd where id = ?", s);
|
||||
if (rs.next()) {
|
||||
value.add(rs.getString("xxnr"));
|
||||
}
|
||||
|
|
@ -95,7 +130,7 @@ public class ApplicantCommonInfo {
|
|||
public static int getModeIdByTableName(String modeTable) {
|
||||
int formModeId = -1;
|
||||
RecordSet rs = new RecordSet();
|
||||
rs.executeQuery("select id from modeinfo where formid =( select id from workflow_bill where tablename = ? )", modeTable);
|
||||
rs.executeQuery("select id from modeinfo where formid =( select id from workflow_bill where tablename = ? ) order by id", modeTable);
|
||||
if (rs.next()) {
|
||||
formModeId = rs.getInt("id");
|
||||
}
|
||||
|
|
@ -238,4 +273,52 @@ public class ApplicantCommonInfo {
|
|||
}
|
||||
return null;
|
||||
}
|
||||
|
||||
/**
|
||||
* 获取ImageField
|
||||
*
|
||||
* @param docId
|
||||
* @return
|
||||
*/
|
||||
public static int getImageFieldByDocId(String docId) {
|
||||
RecordSet rs = new RecordSet();
|
||||
rs.executeQuery("select imagefileid from docimagefile where docid = ? ", docId);
|
||||
if (rs.next()) {
|
||||
return rs.getInt("imagefileid");
|
||||
}
|
||||
return -1;
|
||||
}
|
||||
|
||||
/**
|
||||
* 根据customSearchCode获取查询列表的id
|
||||
*
|
||||
* @param customSearchCode customSearchCode
|
||||
* @return ID
|
||||
*/
|
||||
public static String getCustomSearchId(String customSearchCode) {
|
||||
RecordSet rs = new RecordSet();
|
||||
rs.executeQuery("select id from mode_customsearch where customsearchcode = ? ", customSearchCode);
|
||||
if (rs.next()) {
|
||||
return rs.getString("id");
|
||||
}
|
||||
return "";
|
||||
}
|
||||
|
||||
/**
|
||||
* 根据customSearchCode获取查询列表的地址
|
||||
*
|
||||
* @param customSearchCode customSearchCode
|
||||
* @param linkUrl 自定义的URL
|
||||
* @return 查询列表的地址
|
||||
*/
|
||||
public static String getCustomSearchLink(String customSearchCode, String linkUrl) {
|
||||
if (StringUtils.isNotBlank(linkUrl)) {
|
||||
return linkUrl;
|
||||
}
|
||||
String customSearchId = getCustomSearchId(customSearchCode);
|
||||
if (StringUtils.isNotBlank(customSearchId)) {
|
||||
return "/spa/cube/index.html#/main/cube/search?customid=" + customSearchId;
|
||||
}
|
||||
return "";
|
||||
}
|
||||
}
|
||||
|
|
|
|||
|
|
@ -2,7 +2,9 @@ package com.engine.recruit.conn;
|
|||
|
||||
import com.engine.recruit.enums.ApplicationStatusEnum;
|
||||
import org.apache.commons.collections.CollectionUtils;
|
||||
import org.apache.commons.lang3.StringUtils;
|
||||
import weaver.conn.RecordSet;
|
||||
import weaver.general.BaseBean;
|
||||
import weaver.general.Util;
|
||||
|
||||
import java.util.HashMap;
|
||||
|
|
@ -53,7 +55,6 @@ public class CheckRepeatResume {
|
|||
}
|
||||
|
||||
/**
|
||||
*
|
||||
* @param name
|
||||
* @param mobile
|
||||
* @param positionId
|
||||
|
|
@ -63,7 +64,13 @@ public class CheckRepeatResume {
|
|||
public static List<Map<String, Object>> getRepeatPositionResumeList(String name, String mobile, String positionId, String billId) {
|
||||
RecordSet rs = new RecordSet();
|
||||
// 查询状态为待分配、候选中的且未隐藏的数据
|
||||
rs.executeQuery("select * from uf_jcl_yppc where formmodeid is not null and zt != 2 and zt != 3 and xm = ? and sjhm = ? and ypzw = ? and id != ? order by zt", name, mobile, positionId, billId);
|
||||
String whereSql = "";
|
||||
if (StringUtils.isBlank(positionId)) {
|
||||
whereSql = " and (ypzw = ? or ypzw is null) ";
|
||||
} else {
|
||||
whereSql = " and ypzw = ? ";
|
||||
}
|
||||
rs.executeQuery("select * from uf_jcl_yppc where formmodeid is not null and zt != 2 and zt != 3 and xm = ? and sjhm = ? " + whereSql + " and id != ? order by zt", name, mobile, positionId, billId);
|
||||
return RecruitRecordSet.getRecordMapList(rs);
|
||||
}
|
||||
|
||||
|
|
@ -92,6 +99,42 @@ public class CheckRepeatResume {
|
|||
return Util.getIntValue(Util.null2String(map.get("mainId")));
|
||||
}
|
||||
|
||||
|
||||
/**
|
||||
* 插入、更新明细表数据
|
||||
*
|
||||
* @param detailDataList
|
||||
* @param tableName
|
||||
* @param mainId
|
||||
* @param sourceId
|
||||
*/
|
||||
public void insertResumeDetailTable(List<RecruitDataMap<Object>> detailDataList, String tableName, String mainId, String sourceId) {
|
||||
if (CollectionUtils.isEmpty(detailDataList)) {
|
||||
return;
|
||||
}
|
||||
boolean isUpdate = false;
|
||||
if (StringUtils.isNotBlank(sourceId)) {
|
||||
RecordSet rs = new RecordSet();
|
||||
rs.executeQuery("select * from " + tableName + " where mainid = ? ", sourceId);
|
||||
isUpdate = rs.getCounts() == 0;
|
||||
}
|
||||
try {
|
||||
for (RecruitDataMap<Object> dataMap : detailDataList) {
|
||||
// 明细表关联新数据
|
||||
dataMap.put("mainid", mainId);
|
||||
RecruitRecordSet.insertData(dataMap, tableName);
|
||||
// 明细表关联已有数据
|
||||
if (isUpdate) {
|
||||
dataMap.put("mainid", sourceId);
|
||||
RecruitRecordSet.insertData(dataMap, tableName);
|
||||
}
|
||||
|
||||
}
|
||||
} catch (Exception e) {
|
||||
new BaseBean().writeLog(tableName + "明细表数据插入失败", e);
|
||||
}
|
||||
}
|
||||
|
||||
/**
|
||||
* 插入简历数据
|
||||
*
|
||||
|
|
@ -175,12 +218,7 @@ public class CheckRepeatResume {
|
|||
private int insertData(Map<String, Object> dataMap) {
|
||||
String uuid = UUID.randomUUID().toString();
|
||||
dataMap.put("modeuuid", uuid);
|
||||
RecordSet rs = new RecordSet();
|
||||
int formModeId = -1;
|
||||
rs.executeQuery("select id from modeinfo where formid =( select id from workflow_bill where tablename = 'uf_jcl_yppc' )");
|
||||
if (rs.next()) {
|
||||
formModeId = rs.getInt("id");
|
||||
}
|
||||
int formModeId = ApplicantCommonInfo.getModeIdByTableName("uf_jcl_yppc");
|
||||
dataMap.put("formmodeid", formModeId);
|
||||
RecruitRecordSet.buildModeInsertFields(dataMap, 1);
|
||||
RecruitRecordSet.insertData(dataMap, "uf_jcl_yppc");
|
||||
|
|
@ -244,4 +282,60 @@ public class CheckRepeatResume {
|
|||
}
|
||||
|
||||
|
||||
/**
|
||||
* 获取开始时间和结束时间
|
||||
*
|
||||
* @param date
|
||||
* @return
|
||||
*/
|
||||
public static RecruitDataMap<Object> getDateRange(String date, boolean isStudy) {
|
||||
RecruitDataMap<Object> dataRangeMap = new RecruitDataMap<>();
|
||||
if (StringUtils.isBlank(date)) {
|
||||
return dataRangeMap;
|
||||
}
|
||||
String[] split = date.split("-");
|
||||
if (split.length == 2) {
|
||||
String start = getFormatDate(split[0]);
|
||||
String end = getFormatDate(split[1]);
|
||||
if (start.length() == 4) {
|
||||
if (isStudy) {
|
||||
start += "-09-01";
|
||||
} else {
|
||||
start = "";
|
||||
}
|
||||
}
|
||||
if (end.length() == 4) {
|
||||
if (isStudy) {
|
||||
end += "-07-01";
|
||||
} else {
|
||||
end = "";
|
||||
}
|
||||
}
|
||||
|
||||
dataRangeMap.put("kssj", start);
|
||||
dataRangeMap.put("jssj", end);
|
||||
}
|
||||
return dataRangeMap;
|
||||
}
|
||||
|
||||
/**
|
||||
* 获取yyyy-MM-dd时间格式日期
|
||||
*
|
||||
* @param dateStr
|
||||
* @return
|
||||
*/
|
||||
private static String getFormatDate(String dateStr) {
|
||||
//
|
||||
dateStr = dateStr.replace(".", "-").replace("\\/", "-");
|
||||
if (dateStr.length() == 7) {
|
||||
return dateStr + "-01";
|
||||
} else if (dateStr.length() == 10) {
|
||||
return dateStr;
|
||||
} else if (dateStr.length() == 4) {
|
||||
return dateStr;
|
||||
}
|
||||
return "";
|
||||
}
|
||||
|
||||
|
||||
}
|
||||
|
|
|
|||
|
|
@ -22,7 +22,7 @@ public class ModeBrowserCommonInfo {
|
|||
}
|
||||
|
||||
/**
|
||||
* 根据名称,获取简历来源ID
|
||||
* 根据名称,获取工作经验ID
|
||||
*
|
||||
* @param name
|
||||
* @return
|
||||
|
|
@ -31,6 +31,23 @@ public class ModeBrowserCommonInfo {
|
|||
return getBrowserId("10", name);
|
||||
}
|
||||
|
||||
|
||||
/**
|
||||
* 获取学位ID
|
||||
*
|
||||
* @param name
|
||||
* @return
|
||||
*/
|
||||
public static String getDegreeId(String name) {
|
||||
return getBrowserId("12", name);
|
||||
}
|
||||
|
||||
/**
|
||||
* 获取学历ID
|
||||
*
|
||||
* @param name
|
||||
* @return
|
||||
*/
|
||||
public static String getEducationLevelId(String name) {
|
||||
if (StringUtils.isBlank(name)) {
|
||||
return null;
|
||||
|
|
|
|||
|
|
@ -1,7 +1,13 @@
|
|||
package com.engine.recruit.conn;
|
||||
|
||||
import com.engine.recruit.entity.position.PositionPo;
|
||||
import org.apache.commons.collections.CollectionUtils;
|
||||
import org.apache.commons.lang3.StringUtils;
|
||||
import weaver.conn.RecordSet;
|
||||
|
||||
import java.util.*;
|
||||
import java.util.stream.Collectors;
|
||||
|
||||
/**
|
||||
* 招聘职位信息
|
||||
*
|
||||
|
|
@ -36,6 +42,9 @@ public class PositionCommonInfo {
|
|||
*/
|
||||
public static String getRecruitFlowId(String positionId) {
|
||||
String recruitFlowId = "";
|
||||
if (StringUtils.isBlank(positionId)) {
|
||||
return recruitFlowId;
|
||||
}
|
||||
RecordSet rs = new RecordSet();
|
||||
rs.executeQuery("select zplc from uf_jcl_zp_zpzw where id = ?", positionId);
|
||||
if (rs.next()) {
|
||||
|
|
@ -44,4 +53,58 @@ public class PositionCommonInfo {
|
|||
return recruitFlowId;
|
||||
|
||||
}
|
||||
|
||||
|
||||
/**
|
||||
* 根据职位名称,获取职位ID
|
||||
*
|
||||
* @param positionName 职位名称
|
||||
* @param mobile 职位跟进人手机号
|
||||
* @return
|
||||
*/
|
||||
public static String getPositionIdByName(String positionName, String mobile) {
|
||||
RecordSet rs = new RecordSet();
|
||||
// 根据职位名称、查询招聘中的数据
|
||||
rs.executeQuery("select id ,zpzwmc ,zpzt ,modedatacreater ,modedatacreatedate ,modedatacreatetime from uf_jcl_zp_zpzw where zpzt = 0 and zpzwmc = ? ", positionName);
|
||||
List<PositionPo> positionPoList = new ArrayList<>();
|
||||
while (rs.next()) {
|
||||
PositionPo positionPo = PositionPo.builder()
|
||||
.id(rs.getString("id"))
|
||||
.name(rs.getString("zpzwmc"))
|
||||
.status(rs.getString("zpzt"))
|
||||
.creator(rs.getString("modedatacreater"))
|
||||
.createDate(rs.getString("modedatacreatedate"))
|
||||
.createTime(rs.getString("modedatacreatetime"))
|
||||
.build();
|
||||
positionPoList.add(positionPo);
|
||||
}
|
||||
|
||||
// 未查询到数据,返回空
|
||||
if (CollectionUtils.isEmpty(positionPoList)) {
|
||||
return "";
|
||||
}
|
||||
|
||||
// 只有一条数据,直接返回当前数据,如果有多个,再添加其他条件过滤
|
||||
if (positionPoList.size() == 1) {
|
||||
return positionPoList.get(0).getId();
|
||||
}
|
||||
|
||||
// 根据手机号查询人员ID
|
||||
Set<String> userIds = new HashSet<>();
|
||||
rs.executeQuery("select id from hrmresource where mobile = ? ", mobile);
|
||||
while (rs.next()) {
|
||||
userIds.add(rs.getString("id"));
|
||||
}
|
||||
|
||||
// 筛选跟进人手机号匹配的职位数据,并按创建时间倒序排序
|
||||
List<PositionPo> filterList = positionPoList.stream().filter(item -> userIds.contains(item.getCreator())).sorted(Comparator.comparing(PositionPo::getCreationTime).reversed()).collect(Collectors.toList());
|
||||
|
||||
if (CollectionUtils.isEmpty(filterList)) {
|
||||
// 跟进人手机号未获取到,选择最新的一条数据
|
||||
return positionPoList.stream().sorted(Comparator.comparing(PositionPo::getCreationTime).reversed()).collect(Collectors.toList()).get(0).getId();
|
||||
} else {
|
||||
// 再一样,就默认匹配到创建时间最新的职位
|
||||
return filterList.get(0).getId();
|
||||
}
|
||||
}
|
||||
}
|
||||
|
|
|
|||
|
|
@ -61,9 +61,11 @@ public class RecruitRecordSet {
|
|||
List<String> paramList = new ArrayList<>();
|
||||
|
||||
dataMap.forEach((key, value) -> {
|
||||
fieldList.add(key);
|
||||
dataList.add(value);
|
||||
paramList.add("?");
|
||||
if (null != value) {
|
||||
fieldList.add(key);
|
||||
dataList.add(value);
|
||||
paramList.add("?");
|
||||
}
|
||||
});
|
||||
String insertSql = " insert into " + tableName + "(" + StringUtils.join(fieldList, ",") + ") values (" + StringUtils.join(paramList, ",") + ")";
|
||||
RecordSet rs = new RecordSet();
|
||||
|
|
@ -82,14 +84,12 @@ public class RecruitRecordSet {
|
|||
public static void updateDataById(Map<String, Object> dataMap, String tableName) {
|
||||
List<String> fieldList = new ArrayList<>();
|
||||
List<Object> dataList = new ArrayList<>();
|
||||
List<String> paramList = new ArrayList<>();
|
||||
String id = Util.null2String(dataMap.get("id"));
|
||||
dataMap.remove("id");
|
||||
|
||||
dataMap.forEach((key, value) -> {
|
||||
fieldList.add(key + " = ? ");
|
||||
dataList.add(value);
|
||||
paramList.add("?");
|
||||
});
|
||||
dataList.add(id);
|
||||
String updateSql = "update " + tableName + " set " + StringUtils.join(fieldList, ",") + " where id = ? ";
|
||||
|
|
@ -100,6 +100,20 @@ public class RecruitRecordSet {
|
|||
}
|
||||
}
|
||||
|
||||
/**
|
||||
* 删除数据
|
||||
*
|
||||
* @param deleteSql
|
||||
*/
|
||||
public static void deleteData(String deleteSql) {
|
||||
RecordSet rs = new RecordSet();
|
||||
rs.executeUpdate(deleteSql);
|
||||
if (StringUtils.isNotBlank(rs.getExceptionMsg())) {
|
||||
throw new CustomizeRunTimeException(rs.getExceptionMsg());
|
||||
}
|
||||
}
|
||||
|
||||
|
||||
/**
|
||||
* 构建建模表基本数据
|
||||
*
|
||||
|
|
|
|||
|
|
@ -0,0 +1,94 @@
|
|||
package com.engine.recruit.constant;
|
||||
|
||||
/**
|
||||
* @author:dxfeng
|
||||
* @createTime: 2024/03/12
|
||||
* @version: 1.0
|
||||
*/
|
||||
public class ModeSearchCodeConstant {
|
||||
/**
|
||||
* 招聘需求管理
|
||||
*/
|
||||
public static final String RECRUITMENT_DEMAND_MANAGEMENT = "b129634bf72d46b8bed0291f84efd2e0";
|
||||
/**
|
||||
* 招聘职位
|
||||
*/
|
||||
public static final String RECRUITMENT_POSITIONS = "c024e527c964437bb568bebbb48d89a5";
|
||||
/**
|
||||
* 应聘者
|
||||
*/
|
||||
public static final String APPLICANTS = "1d48211cd1634b19bdc6f7df40cd1337";
|
||||
/**
|
||||
* 筛选反馈
|
||||
*/
|
||||
//public static final String SCREENING_FEEDBACK = "b746e3cf80454289a3ade2b17147e297";
|
||||
public static final String SCREENING_FEEDBACK = "669a72259c0c47e49a97f5b68692ed34";
|
||||
/**
|
||||
* 笔试结果
|
||||
*/
|
||||
public static final String WRITTEN_RESULTS = "1b56a7492fb84f2b9e5ae022fde333f0";
|
||||
/**
|
||||
* 面试
|
||||
*/
|
||||
public static final String INTERVIEW = "496ecc32a87045888f224ad3151e635b";
|
||||
/**
|
||||
* 薪酬谈判
|
||||
*/
|
||||
public static final String SALARY_NEGOTIATION = "ffe1bafcef5942f5853e68b76e5098d2";
|
||||
/**
|
||||
* 背调
|
||||
*/
|
||||
public static final String BACK_TONE = "33be832e81eb4cf5a5686213918e769b";
|
||||
/**
|
||||
* offer
|
||||
*/
|
||||
public static final String OFFER = "4d4d8f9761474333907bacb81d98fc3c";
|
||||
/**
|
||||
* 人才库
|
||||
*/
|
||||
public static final String TALENT_POOL = "bdeb379900e5475c87306862dfb9d0b9";
|
||||
/**
|
||||
* 简历库
|
||||
*/
|
||||
public static final String RESUME_LIBRARY = "9bc41dbc69ee43a1976910008d7fdfe3";
|
||||
/**
|
||||
* 工作地点
|
||||
*/
|
||||
public static final String WORK_LOCATION = "af9c9eee65a84e82bf3a423506ef1f38";
|
||||
/**
|
||||
* 数据字典类型名称
|
||||
*/
|
||||
public static final String DATA_DICTIONARY_TYPE_NAME = "034d7bcea5634e458854a1c70580ca6d";
|
||||
/**
|
||||
* 邮件通知模板
|
||||
*/
|
||||
public static final String EMAIL_NOTIFICATION_TEMPLATE = "ea3b7ae0e3134c65be740eee629070af";
|
||||
/**
|
||||
* 千里聆邮箱配置
|
||||
*/
|
||||
public static final String QLL_EMAIL_CONFIG = "a97c0154ea5b43c8b17fc7a1dfdb195f";
|
||||
/**
|
||||
* 我参与的面试
|
||||
*/
|
||||
public static final String PARTICIPATE_IN_INTERVIEWS = "b8c509d648124c068f11fca338b2eea2";
|
||||
/**
|
||||
* 招聘流程列表
|
||||
*/
|
||||
public static final String RECRUITMENT_PROCESS_LIST = "32cea1924ceb45d8aa8622dbdf935a58";
|
||||
/**
|
||||
* 招聘阶段列表
|
||||
*/
|
||||
public static final String RECRUITMENT_STAGE_LIST = "06443dd4afa84831ae9d9c1b76450313";
|
||||
/**
|
||||
* 操作按钮列表
|
||||
*/
|
||||
public static final String LIST_OF_OPERATION_BUTTONS = "e14a2ce232d844239c00a0b3ead1af04";
|
||||
/**
|
||||
* 入职管理
|
||||
*/
|
||||
public static final String ENTRY_MANAGEMENT = "073e0628016a46b588d76fdd872a7369";
|
||||
/**
|
||||
* 简历订阅
|
||||
*/
|
||||
public static final String RESUME_SUBSCRIPTION = "e672681f989f4ba18fdc02cb89049293";
|
||||
}
|
||||
|
|
@ -0,0 +1,13 @@
|
|||
package com.engine.recruit.constant;
|
||||
|
||||
/**
|
||||
* @author:dxfeng
|
||||
* @createTime: 2024/03/13
|
||||
* @version: 1.0
|
||||
*/
|
||||
public class ModeTreeCodeConstant {
|
||||
/**
|
||||
* 数据字典树
|
||||
*/
|
||||
public static final String DATA_DICTIONARY_TREE = "31717568fca8435f9e55eb08c1fbed4b";
|
||||
}
|
||||
|
|
@ -0,0 +1,120 @@
|
|||
package com.engine.recruit.constant;
|
||||
|
||||
import com.engine.recruit.exception.CustomizeRunTimeException;
|
||||
import org.apache.commons.lang.StringUtils;
|
||||
import weaver.general.BaseBean;
|
||||
|
||||
import java.net.URI;
|
||||
import java.nio.charset.StandardCharsets;
|
||||
|
||||
/**
|
||||
* @author:dxfeng
|
||||
* @createTime: 2024/01/17
|
||||
* @version: 1.0
|
||||
*/
|
||||
public class RecruitConstant {
|
||||
/**
|
||||
* URL分隔符
|
||||
*/
|
||||
private static final String URL_SPLIT = "/";
|
||||
|
||||
|
||||
public static final String HTTP_URL;
|
||||
public static final String RECRUIT_MESSAGE_TYPE;
|
||||
public static final String INTERVIEW_MESSAGE_TYPE;
|
||||
public static final String INTERVIEW_ADD_MESSAGE_TITLE;
|
||||
public static final String INTERVIEW_CANCEL_MESSAGE_TITLE;
|
||||
public static final String INTERVIEW_EVALUATE_MESSAGE_TITLE;
|
||||
public static final String INTERVIEW_ADJUSTMENT_MESSAGE_TITLE;
|
||||
public static final String JOIN_BLACKLIST_MESSAGE_TITLE;
|
||||
public static final String SCREENING_MESSAGE_TYPE;
|
||||
public static final String SCREENING_MESSAGE_TITLE;
|
||||
public static final String SCREENING_MESSAGE_URL;
|
||||
public static final String MOBILE_APPID_COLLECT;
|
||||
public static final String COLLECT_MESSAGE_LINK;
|
||||
public static final String MOBILE_APPID_OFFER;
|
||||
public static final String OFFER_MOBILE_URL;
|
||||
public static final String APPLICANTS_RESUMES_CATEGORY;
|
||||
public static final String INTERVIEW_FEEDBACK_URL;
|
||||
public static final String REMIND_SEARCH_LINK;
|
||||
public static final String OCR_TYPE;
|
||||
public static final String OCR_URL;
|
||||
public static final String APP_ID;
|
||||
public static final String APP_SECRET;
|
||||
|
||||
static BaseBean baseBean = new BaseBean();
|
||||
|
||||
static {
|
||||
|
||||
HTTP_URL = getRecruitPropValue("HTTP_URL");
|
||||
RECRUIT_MESSAGE_TYPE = getRecruitPropValue("RECRUIT_MESSAGE_TYPE");
|
||||
INTERVIEW_MESSAGE_TYPE = getRecruitPropValue("INTERVIEW_MESSAGE_TYPE");
|
||||
INTERVIEW_ADD_MESSAGE_TITLE = getRecruitPropValue("INTERVIEW_ADD_MESSAGE_TITLE");
|
||||
INTERVIEW_CANCEL_MESSAGE_TITLE = getRecruitPropValue("INTERVIEW_CANCEL_MESSAGE_TITLE");
|
||||
INTERVIEW_EVALUATE_MESSAGE_TITLE = getRecruitPropValue("INTERVIEW_EVALUATE_MESSAGE_TITLE");
|
||||
INTERVIEW_ADJUSTMENT_MESSAGE_TITLE = getRecruitPropValue("INTERVIEW_ADJUSTMENT_MESSAGE_TITLE");
|
||||
JOIN_BLACKLIST_MESSAGE_TITLE = getRecruitPropValue("JOIN_BLACKLIST_MESSAGE_TITLE");
|
||||
SCREENING_MESSAGE_TYPE = getRecruitPropValue("SCREENING_MESSAGE_TYPE");
|
||||
SCREENING_MESSAGE_TITLE = getRecruitPropValue("SCREENING_MESSAGE_TITLE");
|
||||
SCREENING_MESSAGE_URL = getRecruitPropValue("SCREENING_MESSAGE_URL");
|
||||
MOBILE_APPID_COLLECT = getRecruitPropValue("MOBILE_APPID_COLLECT");
|
||||
// 信息采集移动建模地址
|
||||
COLLECT_MESSAGE_LINK = getCompleteUrl(getRecruitPropValue("COLLECT_MESSAGE_LINK"));
|
||||
MOBILE_APPID_OFFER = getRecruitPropValue("MOBILE_APPID_OFFER");
|
||||
// offer反馈移动建模地址
|
||||
OFFER_MOBILE_URL = getCompleteUrl(getRecruitPropValue("OFFER_MOBILE_URL"));
|
||||
APPLICANTS_RESUMES_CATEGORY = getRecruitPropValue("APPLICANTS_RESUMES_CATEGORY");
|
||||
// 面试反馈地址
|
||||
INTERVIEW_FEEDBACK_URL = getCompleteUrl(getRecruitPropValue("INTERVIEW_FEEDBACK_URL"));
|
||||
// 简历订阅相关
|
||||
REMIND_SEARCH_LINK = getCompleteUrl(getRecruitPropValue("REMIND_SEARCH_LINK"));
|
||||
// OCR相关
|
||||
OCR_TYPE = getRecruitPropValue("OCR_TYPE");
|
||||
OCR_URL = getRecruitPropValue("OCR_URL");
|
||||
APP_ID = getRecruitPropValue("APP_ID");
|
||||
APP_SECRET = getRecruitPropValue("APP_SECRET");
|
||||
}
|
||||
|
||||
/**
|
||||
* 读取jclRecruit.properties配置文件的配置项
|
||||
*
|
||||
* @param key
|
||||
* @return
|
||||
*/
|
||||
public static String getRecruitPropValue(String key) {
|
||||
String value = baseBean.getPropValue("jclRecruit", key);
|
||||
value = new String(value.getBytes(StandardCharsets.ISO_8859_1), StandardCharsets.UTF_8);
|
||||
return value;
|
||||
}
|
||||
|
||||
|
||||
/**
|
||||
* 对外发布的URL地址,处理域名
|
||||
*
|
||||
* @param url
|
||||
* @return
|
||||
*/
|
||||
public static String getCompleteUrl(String url) {
|
||||
if (StringUtils.isBlank(url)) {
|
||||
return "";
|
||||
}
|
||||
try {
|
||||
URI u = new URI(url);
|
||||
// 如果URL对象的getHost()方法获取到了域名,则直接返回原始URL
|
||||
if (u.getHost() != null) {
|
||||
return url;
|
||||
} else {
|
||||
// 否则,判断URL是否以"/"开头,如果是则在它前面拼接上域名
|
||||
if (url.startsWith(URL_SPLIT)) {
|
||||
return HTTP_URL + url;
|
||||
} else {
|
||||
// 如果URL既不是完整URL也不是以"/"开头,则在URL开头添加"/",再拼接上域名
|
||||
return HTTP_URL + URL_SPLIT + url;
|
||||
}
|
||||
}
|
||||
} catch (Exception e) {
|
||||
throw new CustomizeRunTimeException(e);
|
||||
}
|
||||
}
|
||||
|
||||
}
|
||||
|
|
@ -74,14 +74,6 @@ public class ApplicantResumeController {
|
|||
return new ResponseResult<Map<String, Object>, Map<String, Object>>(user).run(getApplicantResumeWrapper(user)::updateApplicantsInfo, params);
|
||||
}
|
||||
|
||||
@POST
|
||||
@Path("/fullOriginalResumeId")
|
||||
@Produces(MediaType.APPLICATION_JSON)
|
||||
public String fullOriginalResumeId(@Context HttpServletRequest request, @Context HttpServletResponse response) {
|
||||
User user = HrmUserVarify.getUser(request, response);
|
||||
Map<String, Object> param = ParamUtil.request2Map(request);
|
||||
return new ResponseResult<Map<String, Object>, Map<String, Object>>(user).run(getApplicantResumeWrapper(user)::fullOriginalResumeId, param);
|
||||
}
|
||||
|
||||
@POST
|
||||
@Path("/checkRepeatResume")
|
||||
|
|
|
|||
|
|
@ -10,6 +10,7 @@ import weaver.hrm.User;
|
|||
import javax.servlet.http.HttpServletRequest;
|
||||
import javax.servlet.http.HttpServletResponse;
|
||||
import javax.ws.rs.GET;
|
||||
import javax.ws.rs.POST;
|
||||
import javax.ws.rs.Path;
|
||||
import javax.ws.rs.Produces;
|
||||
import javax.ws.rs.core.Context;
|
||||
|
|
@ -43,4 +44,13 @@ public class RecruitFlowController {
|
|||
Map<String, Object> params = ParamUtil.request2Map(request);
|
||||
return new ResponseResult<Map<String, Object>, Map<String, Object>>(user).run(getRecruitFlowWrapper(user)::getRecruitStepList, params);
|
||||
}
|
||||
|
||||
@POST
|
||||
@Path("/syncRecruitStepInfo")
|
||||
@Produces(MediaType.APPLICATION_JSON)
|
||||
public String syncRecruitStepInfo(@Context HttpServletRequest request, @Context HttpServletResponse response) {
|
||||
User user = HrmUserVarify.getUser(request, response);
|
||||
Map<String, Object> params = ParamUtil.request2Map(request);
|
||||
return new ResponseResult<Map<String, Object>, Map<String, Object>>(user).run(getRecruitFlowWrapper(user)::syncRecruitStepInfo, params);
|
||||
}
|
||||
}
|
||||
|
|
|
|||
|
|
@ -5,6 +5,7 @@ import com.engine.common.util.ServiceUtil;
|
|||
import com.engine.recruit.util.ResponseResult;
|
||||
import com.engine.recruit.wrapper.InductionManageWrapper;
|
||||
import com.engine.recruit.wrapper.OfferWrapper;
|
||||
import com.engine.recruit.wrapper.RecruitInterviewWrapper;
|
||||
import weaver.hrm.HrmUserVarify;
|
||||
import weaver.hrm.User;
|
||||
|
||||
|
|
@ -29,6 +30,10 @@ public class RecruitMobileModeController {
|
|||
return ServiceUtil.getService(InductionManageWrapper.class, user);
|
||||
}
|
||||
|
||||
public RecruitInterviewWrapper getRecruitInterviewWrapper(User user) {
|
||||
return ServiceUtil.getService(RecruitInterviewWrapper.class, user);
|
||||
}
|
||||
|
||||
@POST
|
||||
@Path("/getOfferContent")
|
||||
@Produces(MediaType.APPLICATION_JSON)
|
||||
|
|
@ -63,4 +68,14 @@ public class RecruitMobileModeController {
|
|||
User user = HrmUserVarify.getUser(request, response);
|
||||
return new ResponseResult<String, Map<String, Object>>(user).run(getInductionManageWrapper(user)::infoSubmit, id);
|
||||
}
|
||||
|
||||
|
||||
@POST
|
||||
@Path("/updateInterviewStatus")
|
||||
@Produces(MediaType.APPLICATION_JSON)
|
||||
public String updateInterviewStatus(@Context HttpServletRequest request, @Context HttpServletResponse response) {
|
||||
User user = HrmUserVarify.getUser(request, response);
|
||||
Map<String, Object> param = ParamUtil.request2Map(request);
|
||||
return new ResponseResult<Map<String, Object>, Map<String, Object>>(user).run(getRecruitInterviewWrapper(user)::updateInterviewStatus, param);
|
||||
}
|
||||
}
|
||||
|
|
|
|||
|
|
@ -0,0 +1,56 @@
|
|||
package com.engine.recruit.controller;
|
||||
|
||||
import com.engine.common.util.ParamUtil;
|
||||
import com.engine.common.util.ServiceUtil;
|
||||
import com.engine.recruit.util.ResponseResult;
|
||||
import com.engine.recruit.wrapper.ResumeRecognitionWrapper;
|
||||
import weaver.hrm.HrmUserVarify;
|
||||
import weaver.hrm.User;
|
||||
|
||||
import javax.servlet.http.HttpServletRequest;
|
||||
import javax.servlet.http.HttpServletResponse;
|
||||
import javax.ws.rs.GET;
|
||||
import javax.ws.rs.POST;
|
||||
import javax.ws.rs.Path;
|
||||
import javax.ws.rs.Produces;
|
||||
import javax.ws.rs.core.Context;
|
||||
import javax.ws.rs.core.MediaType;
|
||||
import java.util.Map;
|
||||
|
||||
/**
|
||||
* @author:dxfeng
|
||||
* @createTime: 2023/12/12
|
||||
* @version: 1.0
|
||||
*/
|
||||
public class ResumeRecognitionController {
|
||||
public ResumeRecognitionWrapper getResumeRecognitionWrapper(User user) {
|
||||
return ServiceUtil.getService(ResumeRecognitionWrapper.class, user);
|
||||
}
|
||||
|
||||
@POST
|
||||
@Path("/resumeUpload")
|
||||
@Produces(MediaType.APPLICATION_JSON)
|
||||
public String resumeUpload(@Context HttpServletRequest request, @Context HttpServletResponse response) {
|
||||
User user = HrmUserVarify.getUser(request, response);
|
||||
Map<String, Object> param = ParamUtil.request2Map(request);
|
||||
return new ResponseResult<Map<String, Object>, Map<String, Object>>(user).run(getResumeRecognitionWrapper(user)::resumeUpload, param);
|
||||
}
|
||||
|
||||
@POST
|
||||
@Path("/importResume")
|
||||
@Produces(MediaType.APPLICATION_JSON)
|
||||
public String importResume(@Context HttpServletRequest request, @Context HttpServletResponse response) {
|
||||
User user = HrmUserVarify.getUser(request, response);
|
||||
Map<String, Object> param = ParamUtil.request2Map(request);
|
||||
return new ResponseResult<Map<String, Object>, Map<String, Object>>(user).run(getResumeRecognitionWrapper(user)::importResume, param);
|
||||
}
|
||||
|
||||
@GET
|
||||
@Path("/fetchResume")
|
||||
@Produces(MediaType.APPLICATION_JSON)
|
||||
public String fetchResume(@Context HttpServletRequest request, @Context HttpServletResponse response) {
|
||||
User user = HrmUserVarify.getUser(request, response);
|
||||
Map<String, Object> param = ParamUtil.request2Map(request);
|
||||
return new ResponseResult<Map<String, Object>, Map<String, Object>>(user).run(getResumeRecognitionWrapper(user)::fetchResume, param);
|
||||
}
|
||||
}
|
||||
|
|
@ -0,0 +1,37 @@
|
|||
package com.engine.recruit.controller;
|
||||
|
||||
import com.engine.common.util.ParamUtil;
|
||||
import com.engine.common.util.ServiceUtil;
|
||||
import com.engine.recruit.util.ResponseResult;
|
||||
import com.engine.recruit.wrapper.ResumeRemindWrapper;
|
||||
import weaver.hrm.HrmUserVarify;
|
||||
import weaver.hrm.User;
|
||||
|
||||
import javax.servlet.http.HttpServletRequest;
|
||||
import javax.servlet.http.HttpServletResponse;
|
||||
import javax.ws.rs.POST;
|
||||
import javax.ws.rs.Path;
|
||||
import javax.ws.rs.Produces;
|
||||
import javax.ws.rs.core.Context;
|
||||
import javax.ws.rs.core.MediaType;
|
||||
import java.util.Map;
|
||||
|
||||
/**
|
||||
* @author:dxfeng
|
||||
* @createTime: 2024/03/13
|
||||
* @version: 1.0
|
||||
*/
|
||||
public class ResumeRemindController {
|
||||
public ResumeRemindWrapper getResumeRemindWrapper(User user) {
|
||||
return ServiceUtil.getService(ResumeRemindWrapper.class, user);
|
||||
}
|
||||
|
||||
@POST
|
||||
@Path("/doRemindJob")
|
||||
@Produces(MediaType.APPLICATION_JSON)
|
||||
public String doRemindJob(@Context HttpServletRequest request, @Context HttpServletResponse response) {
|
||||
User user = HrmUserVarify.getUser(request, response);
|
||||
Map<String, Object> param = ParamUtil.request2Map(request);
|
||||
return new ResponseResult<Map<String, Object>, Map<String, Object>>(user).run(getResumeRemindWrapper(user)::doRemindJob, param);
|
||||
}
|
||||
}
|
||||
|
|
@ -0,0 +1,47 @@
|
|||
package com.engine.recruit.controller;
|
||||
|
||||
import com.engine.common.util.ParamUtil;
|
||||
import com.engine.common.util.ServiceUtil;
|
||||
import com.engine.recruit.util.ResponseResult;
|
||||
import com.engine.recruit.wrapper.WrittenResultsWrapper;
|
||||
import weaver.hrm.HrmUserVarify;
|
||||
import weaver.hrm.User;
|
||||
|
||||
import javax.servlet.http.HttpServletRequest;
|
||||
import javax.servlet.http.HttpServletResponse;
|
||||
import javax.ws.rs.GET;
|
||||
import javax.ws.rs.POST;
|
||||
import javax.ws.rs.Path;
|
||||
import javax.ws.rs.Produces;
|
||||
import javax.ws.rs.core.Context;
|
||||
import javax.ws.rs.core.MediaType;
|
||||
import java.util.Map;
|
||||
|
||||
/**
|
||||
* @author:dxfeng
|
||||
* @createTime: 2024/01/24
|
||||
* @version: 1.0
|
||||
*/
|
||||
public class WrittenResultsController {
|
||||
public WrittenResultsWrapper getWrittenResultsWrapper(User user) {
|
||||
return ServiceUtil.getService(WrittenResultsWrapper.class, user);
|
||||
}
|
||||
|
||||
@GET
|
||||
@Path("/getFormCondition")
|
||||
@Produces(MediaType.APPLICATION_JSON)
|
||||
public String getFormCondition(@Context HttpServletRequest request, @Context HttpServletResponse response) {
|
||||
User user = HrmUserVarify.getUser(request, response);
|
||||
Map<String, Object> params = ParamUtil.request2Map(request);
|
||||
return new ResponseResult<Map<String, Object>, Map<String, Object>>(user).run(getWrittenResultsWrapper(user)::getFormCondition, params);
|
||||
}
|
||||
|
||||
@POST
|
||||
@Path("/importExcel")
|
||||
@Produces(MediaType.APPLICATION_JSON)
|
||||
public String importExcel(@Context HttpServletRequest request, @Context HttpServletResponse response) {
|
||||
User user = HrmUserVarify.getUser(request, response);
|
||||
Map<String, Object> params = ParamUtil.request2Map(request);
|
||||
return new ResponseResult<Map<String, Object>, Map<String, Object>>(user).run(getWrittenResultsWrapper(user)::importExcel, params);
|
||||
}
|
||||
}
|
||||
|
|
@ -0,0 +1,23 @@
|
|||
package com.engine.recruit.entity.common;
|
||||
|
||||
import lombok.AllArgsConstructor;
|
||||
import lombok.Builder;
|
||||
import lombok.Data;
|
||||
import lombok.NoArgsConstructor;
|
||||
|
||||
/**
|
||||
* @author:dxfeng
|
||||
* @createTime: 2024/01/26
|
||||
* @version: 1.0
|
||||
*/
|
||||
@Data
|
||||
@Builder
|
||||
@AllArgsConstructor
|
||||
@NoArgsConstructor
|
||||
public class ImportLog {
|
||||
private Integer rowIndex;
|
||||
private String status;
|
||||
private String description;
|
||||
|
||||
|
||||
}
|
||||
|
|
@ -0,0 +1,29 @@
|
|||
package com.engine.recruit.entity.position;
|
||||
|
||||
import lombok.AllArgsConstructor;
|
||||
import lombok.Builder;
|
||||
import lombok.Data;
|
||||
import lombok.NoArgsConstructor;
|
||||
|
||||
/**
|
||||
* @author:dxfeng
|
||||
* @createTime: 2024/02/05
|
||||
* @version: 1.0
|
||||
*/
|
||||
@Data
|
||||
@Builder
|
||||
@AllArgsConstructor
|
||||
@NoArgsConstructor
|
||||
public class PositionPo {
|
||||
private String id;
|
||||
private String name;
|
||||
private String status;
|
||||
private String creator;
|
||||
private String createDate;
|
||||
private String createTime;
|
||||
private String creationTime;
|
||||
|
||||
public String getCreationTime() {
|
||||
return createDate + " " + createTime;
|
||||
}
|
||||
}
|
||||
|
|
@ -0,0 +1,42 @@
|
|||
package com.engine.recruit.entity.recruitflow.po;
|
||||
|
||||
import lombok.*;
|
||||
|
||||
import java.util.Objects;
|
||||
|
||||
/**
|
||||
* @author:dxfeng
|
||||
* @createTime: 2024/02/29
|
||||
* @version: 1.0
|
||||
*/
|
||||
@Data
|
||||
@Builder
|
||||
@AllArgsConstructor
|
||||
@NoArgsConstructor
|
||||
public class RecruitStepDt1 {
|
||||
private String id;
|
||||
private String mainid;
|
||||
private String czan;
|
||||
private String zdyxsmc;
|
||||
private String tzymdz;
|
||||
private String sfqy;
|
||||
private String tzymbt;
|
||||
private String zssx;
|
||||
|
||||
@Override
|
||||
public boolean equals(Object o) {
|
||||
if (this == o) {
|
||||
return true;
|
||||
}
|
||||
if (o == null || getClass() != o.getClass()) {
|
||||
return false;
|
||||
}
|
||||
RecruitStepDt1 stepDt1 = (RecruitStepDt1) o;
|
||||
return czan.equals(stepDt1.czan);
|
||||
}
|
||||
|
||||
@Override
|
||||
public int hashCode() {
|
||||
return Objects.hash(czan);
|
||||
}
|
||||
}
|
||||
|
|
@ -0,0 +1,23 @@
|
|||
package com.engine.recruit.entity.recruitflow.po;
|
||||
|
||||
import lombok.AllArgsConstructor;
|
||||
import lombok.Builder;
|
||||
import lombok.Data;
|
||||
import lombok.NoArgsConstructor;
|
||||
|
||||
/**
|
||||
* @author:dxfeng
|
||||
* @createTime: 2024/02/29
|
||||
* @version: 1.0
|
||||
*/
|
||||
@Data
|
||||
@Builder
|
||||
@AllArgsConstructor
|
||||
@NoArgsConstructor
|
||||
public class RecruitStepDt2 {
|
||||
private String id;
|
||||
private String mainid;
|
||||
private String ymbt;
|
||||
private String ymdz;
|
||||
private String zssx;
|
||||
}
|
||||
|
|
@ -48,7 +48,8 @@ public class RecruitTabPo {
|
|||
if ("uf_jcl_yppc".equalsIgnoreCase(tableName)) {
|
||||
rs.executeQuery("select xm,sjhm from uf_jcl_yppc where id = ?", billId);
|
||||
if (rs.next()) {
|
||||
rs.executeQuery("select count(id) as num from uf_jcl_yppc where xm=? and sjhm =?", rs.getString("xm"), rs.getString("sjhm"));
|
||||
// 只统计展示入库的数据,即formmodeid不为null的数据
|
||||
rs.executeQuery("select count(id) as num from uf_jcl_yppc where formmodeid is not null and xm=? and sjhm =?", rs.getString("xm"), rs.getString("sjhm"));
|
||||
}
|
||||
} else {
|
||||
rs.executeQuery("select count(1) as num from " + tableName + " where ypz = ? ", billId);
|
||||
|
|
|
|||
|
|
@ -6,7 +6,10 @@ import cn.hutool.http.HttpResponse;
|
|||
import com.alibaba.fastjson.JSON;
|
||||
import com.alibaba.fastjson.JSONArray;
|
||||
import com.alibaba.fastjson.JSONObject;
|
||||
import com.engine.recruit.conn.CheckRepeatResume;
|
||||
import com.engine.recruit.conn.ModeBrowserCommonInfo;
|
||||
import com.engine.recruit.conn.RecruitDataMap;
|
||||
import com.engine.recruit.constant.RecruitConstant;
|
||||
import lombok.AllArgsConstructor;
|
||||
import lombok.Builder;
|
||||
import lombok.Data;
|
||||
|
|
@ -17,6 +20,8 @@ import weaver.general.BaseBean;
|
|||
import weaver.hrm.User;
|
||||
|
||||
import java.io.InputStream;
|
||||
import java.util.ArrayList;
|
||||
import java.util.List;
|
||||
|
||||
/**
|
||||
* @author:dxfeng
|
||||
|
|
@ -28,7 +33,6 @@ import java.io.InputStream;
|
|||
@NoArgsConstructor
|
||||
@Builder
|
||||
public class QllResumePo {
|
||||
private static final int SEC_CATEGORY = Convert.toInt(RecruitModeUtil.getRecruitPropValue("APPLICANTS_RESUMES_CATEGORY"));
|
||||
|
||||
private String id;
|
||||
private String xm;
|
||||
|
|
@ -65,23 +69,29 @@ public class QllResumePo {
|
|||
return null;
|
||||
}
|
||||
String resumeId = null;
|
||||
BaseBean baseBean = new BaseBean();
|
||||
try {
|
||||
JSONArray jsonArray = JSON.parseArray(jlfj);
|
||||
JSONObject jsonObject = (JSONObject) jsonArray.get(0);
|
||||
String name = jsonObject.getString("name");
|
||||
String content = jsonObject.getString("content");
|
||||
baseBean.writeLog("千里聆简历附件解析,id=" + id + ",jslf=" + jlfj);
|
||||
HttpResponse response = HttpRequest.get(content).execute();
|
||||
if (response.isOk()) {
|
||||
String disposition = response.header("Content-Disposition");
|
||||
if (StringUtils.isNotBlank(disposition)) {
|
||||
InputStream inputStream = response.bodyStream();
|
||||
int imageFileId = RecruitModeUtil.generateImageFileId(inputStream, name);
|
||||
int docId = RecruitModeUtil.createDocId(SEC_CATEGORY, imageFileId, new User(1));
|
||||
int docId = RecruitModeUtil.createDocId(Convert.toInt(RecruitConstant.APPLICANTS_RESUMES_CATEGORY), imageFileId, new User(1));
|
||||
resumeId = String.valueOf(docId);
|
||||
} else {
|
||||
baseBean.writeLog("千里聆附件下载失败" + response.body());
|
||||
}
|
||||
} else {
|
||||
baseBean.writeLog("千里聆附件下载失败,URL响应失败");
|
||||
}
|
||||
} catch (Exception e) {
|
||||
new BaseBean().writeLog("千里聆附件下载失败", e);
|
||||
baseBean.writeLog("千里聆附件下载失败", e);
|
||||
}
|
||||
return resumeId;
|
||||
}
|
||||
|
|
@ -103,7 +113,6 @@ public class QllResumePo {
|
|||
if (StringUtils.isBlank(gzjy)) {
|
||||
return null;
|
||||
}
|
||||
;
|
||||
int parseInt = Integer.parseInt(gzjy);
|
||||
String year = parseInt + "年";
|
||||
if (0 == parseInt) {
|
||||
|
|
@ -118,4 +127,84 @@ public class QllResumePo {
|
|||
public String getZgxl() {
|
||||
return ModeBrowserCommonInfo.getEducationLevelId(zgxl);
|
||||
}
|
||||
|
||||
|
||||
public List<RecruitDataMap<Object>> getGzjl() {
|
||||
List<RecruitDataMap<Object>> list = new ArrayList<>();
|
||||
if (StringUtils.isNotBlank(gzjl)) {
|
||||
try {
|
||||
JSONArray jsonArray = JSONArray.parseArray(gzjl);
|
||||
for (int i = 0; i < jsonArray.size(); i++) {
|
||||
JSONObject jsonObject = jsonArray.getJSONObject(i);
|
||||
String gsmc = jsonObject.getString("公司名称:");
|
||||
String zwmc = jsonObject.getString("职位名称:");
|
||||
String sj = jsonObject.getString("时间:");
|
||||
String gznr = jsonObject.getString("工作内容:");
|
||||
RecruitDataMap<Object> map = CheckRepeatResume.getDateRange(sj, false);
|
||||
map.put("gsmc", gsmc);
|
||||
map.put("gw", zwmc);
|
||||
map.put("gzzz", formatStr(gznr));
|
||||
list.add(map);
|
||||
}
|
||||
} catch (Exception e) {
|
||||
new BaseBean().writeLog("工作经历解析失败", e);
|
||||
}
|
||||
}
|
||||
return list;
|
||||
}
|
||||
|
||||
public List<RecruitDataMap<Object>> getXmjl() {
|
||||
List<RecruitDataMap<Object>> list = new ArrayList<>();
|
||||
if (StringUtils.isNotBlank(xmjl)) {
|
||||
try {
|
||||
JSONArray jsonArray = JSONArray.parseArray(xmjl);
|
||||
for (int i = 0; i < jsonArray.size(); i++) {
|
||||
JSONObject jsonObject = jsonArray.getJSONObject(i);
|
||||
String xmmc = jsonObject.getString("项目名称:");
|
||||
//String rzgs = jsonObject.getString("任职公司:");
|
||||
String sj = jsonObject.getString("时间:");
|
||||
String xmnr = jsonObject.getString("项目内容:");
|
||||
RecruitDataMap<Object> map = CheckRepeatResume.getDateRange(sj, false);
|
||||
map.put("xmmc", xmmc);
|
||||
map.put("xmms", formatStr(xmnr));
|
||||
list.add(map);
|
||||
}
|
||||
} catch (Exception e) {
|
||||
new BaseBean().writeLog("项目经历解析失败", e);
|
||||
}
|
||||
}
|
||||
return list;
|
||||
}
|
||||
|
||||
public List<RecruitDataMap<Object>> getJyjl() {
|
||||
List<RecruitDataMap<Object>> list = new ArrayList<>();
|
||||
if (StringUtils.isNotBlank(jyjl)) {
|
||||
try {
|
||||
JSONArray jsonArray = JSONArray.parseArray(jyjl);
|
||||
for (int i = 0; i < jsonArray.size(); i++) {
|
||||
JSONObject jsonObject = jsonArray.getJSONObject(i);
|
||||
String byyx = jsonObject.getString("毕业院校:");
|
||||
String xl = jsonObject.getString("学历:");
|
||||
String sj = jsonObject.getString("时间:");
|
||||
String zy = jsonObject.getString("专业:");
|
||||
RecruitDataMap<Object> map = CheckRepeatResume.getDateRange(sj, true);
|
||||
map.put("xxmc", byyx);
|
||||
map.put("xl", ModeBrowserCommonInfo.getEducationLevelId(xl));
|
||||
map.put("zy", zy);
|
||||
list.add(map);
|
||||
}
|
||||
} catch (Exception e) {
|
||||
new BaseBean().writeLog("教育经历解析失败", e);
|
||||
}
|
||||
}
|
||||
return list;
|
||||
}
|
||||
|
||||
|
||||
private String formatStr(String str) {
|
||||
if (StringUtils.isBlank(str)) {
|
||||
return "";
|
||||
}
|
||||
return str.replace("\\n", "\n");
|
||||
}
|
||||
}
|
||||
|
|
|
|||
|
|
@ -13,16 +13,16 @@ public enum HighestDegreeEnum {
|
|||
*/
|
||||
OTHER(1, "其他"),
|
||||
JUNIOR_MIDDLE_SCHOOL(2, "初中"),
|
||||
HIGH_SCHOOL(2, "高中"),
|
||||
SECONDARY_TECHNOLOGY(2, "中技"),
|
||||
SECONDARY_SPECIALIZED_SCHOOL(2, "中专"),
|
||||
JUNIOR_COLLEGE(2, "大专"),
|
||||
UNDERGRADUATE(2, "本科"),
|
||||
MASTER_DEGREE(2, "硕士研究生"),
|
||||
DOCTORAL_STUDENTS(2, "博士研究生"),
|
||||
MBA(2, "MBA"),
|
||||
EMBA(2, "EMBA"),
|
||||
POST_DOCTORAL(2, "博士后");
|
||||
HIGH_SCHOOL(3, "高中"),
|
||||
SECONDARY_TECHNOLOGY(4, "中技"),
|
||||
SECONDARY_SPECIALIZED_SCHOOL(5, "中专"),
|
||||
JUNIOR_COLLEGE(6, "大专"),
|
||||
UNDERGRADUATE(7, "本科"),
|
||||
MASTER_DEGREE(8, "硕士研究生"),
|
||||
DOCTORAL_STUDENTS(9, "博士研究生"),
|
||||
MBA(10, "MBA"),
|
||||
EMBA(11, "EMBA"),
|
||||
POST_DOCTORAL(12, "博士后");
|
||||
|
||||
HighestDegreeEnum(Integer id, String name) {
|
||||
this.id = id;
|
||||
|
|
|
|||
|
|
@ -1,7 +1,9 @@
|
|||
package com.engine.recruit.factory;
|
||||
|
||||
import com.engine.core.impl.Service;
|
||||
import com.engine.recruit.exception.CustomizeRunTimeException;
|
||||
import com.engine.recruit.service.RecruitButtonService;
|
||||
import weaver.general.BaseBean;
|
||||
|
||||
/**
|
||||
* <p>聚才林招聘</p>
|
||||
|
|
@ -29,7 +31,8 @@ public class RecruitButtonFactory {
|
|||
}
|
||||
return (Class<T>) clazz;
|
||||
} catch (ClassNotFoundException e) {
|
||||
throw new RuntimeException(e);
|
||||
new BaseBean().writeLog(e);
|
||||
throw new CustomizeRunTimeException("操作按钮配置出错,未获取到按钮实现类[" + className + "]");
|
||||
}
|
||||
|
||||
|
||||
|
|
|
|||
|
|
@ -0,0 +1,37 @@
|
|||
package com.engine.recruit.factory;
|
||||
|
||||
import com.engine.core.impl.Service;
|
||||
import com.engine.recruit.exception.CustomizeRunTimeException;
|
||||
import com.engine.recruit.service.ResumeRecognitionService;
|
||||
import weaver.general.BaseBean;
|
||||
|
||||
/**
|
||||
* @author:dxfeng
|
||||
* @createTime: 2024/01/09
|
||||
* @version: 1.0
|
||||
*/
|
||||
public class ResumeRecognitionFactory {
|
||||
|
||||
/**
|
||||
* 根据类的全路径获取类对象
|
||||
*
|
||||
* @param className 类全路径
|
||||
* @param <T>
|
||||
* @return
|
||||
*/
|
||||
public static <T extends Service> Class<T> getClass(String className) {
|
||||
Class<?> clazz;
|
||||
try {
|
||||
clazz = Class.forName(className);
|
||||
if (!ResumeRecognitionService.class.isAssignableFrom(clazz)) {
|
||||
throw new IllegalArgumentException("该类未实现ResumeRecognitionService");
|
||||
}
|
||||
return (Class<T>) clazz;
|
||||
} catch (ClassNotFoundException e) {
|
||||
new BaseBean().writeLog(e);
|
||||
throw new CustomizeRunTimeException("简历识别配置出错,未获取到解析实现类[" + className + "]");
|
||||
}
|
||||
|
||||
|
||||
}
|
||||
}
|
||||
|
|
@ -55,13 +55,6 @@ public interface ApplicantResumeService {
|
|||
Map<String, Object> updateApplicantsInfo(Map<String, Object> params);
|
||||
|
||||
|
||||
/**
|
||||
* 完善OCR导入的简历,原始简历字段
|
||||
*
|
||||
* @param params
|
||||
* @return
|
||||
*/
|
||||
Map<String, Object> fullOriginalResumeId(Map<String, Object> params);
|
||||
|
||||
/**
|
||||
* 判断是否重复简历,是否可以新增
|
||||
|
|
|
|||
|
|
@ -26,4 +26,13 @@ public interface RecruitFlowService {
|
|||
* @return 招聘阶段
|
||||
*/
|
||||
Map<String, Object> getRecruitStepList(Map<String, Object> param);
|
||||
|
||||
|
||||
/**
|
||||
* 同步招聘阶段
|
||||
*
|
||||
* @param param
|
||||
* @return
|
||||
*/
|
||||
Map<String, Object> syncRecruitStepInfo(Map<String, Object> param);
|
||||
}
|
||||
|
|
|
|||
|
|
@ -0,0 +1,18 @@
|
|||
package com.engine.recruit.service;
|
||||
|
||||
import java.util.Map;
|
||||
|
||||
/**
|
||||
* @author:dxfeng
|
||||
* @createTime: 2023/11/28
|
||||
* @version: 1.0
|
||||
*/
|
||||
public interface RecruitInterviewService {
|
||||
/**
|
||||
* 更新面试状态
|
||||
*
|
||||
* @param param
|
||||
* @return
|
||||
*/
|
||||
Map<String, Object> updateInterviewStatus(Map<String, Object> param);
|
||||
}
|
||||
|
|
@ -0,0 +1,38 @@
|
|||
package com.engine.recruit.service;
|
||||
|
||||
import java.util.Map;
|
||||
|
||||
/**
|
||||
* 简历识别服务类
|
||||
*
|
||||
* @author:dxfeng
|
||||
* @createTime: 2023/12/12
|
||||
* @version: 1.0
|
||||
*/
|
||||
public interface ResumeRecognitionService {
|
||||
|
||||
/**
|
||||
* 简历上传、简历解析
|
||||
*
|
||||
* @param param
|
||||
* @return
|
||||
*/
|
||||
Map<String, Object> resumeUpload(Map<String, Object> param);
|
||||
|
||||
/**
|
||||
* 简历上传、解析
|
||||
*
|
||||
* @param param
|
||||
* @return
|
||||
*/
|
||||
Map<String, Object> importResume(Map<String, Object> param);
|
||||
|
||||
|
||||
/**
|
||||
* 获取简历
|
||||
*
|
||||
* @param param
|
||||
* @return
|
||||
*/
|
||||
Map<String, Object> fetchResume(Map<String, Object> param);
|
||||
}
|
||||
|
|
@ -0,0 +1,19 @@
|
|||
package com.engine.recruit.service;
|
||||
|
||||
import java.util.Map;
|
||||
|
||||
/**
|
||||
* @author:dxfeng
|
||||
* @createTime: 2024/03/13
|
||||
* @version: 1.0
|
||||
*/
|
||||
public interface ResumeRemindService {
|
||||
|
||||
/**
|
||||
* doRemindJob
|
||||
*
|
||||
* @param param
|
||||
* @return
|
||||
*/
|
||||
Map<String, Object> doRemindJob(Map<String, Object> param);
|
||||
}
|
||||
|
|
@ -6,7 +6,6 @@ import com.engine.recruit.entity.workplan.WorkPlanCreateParams;
|
|||
/**
|
||||
* @Author liang.cheng
|
||||
* @Date 2023/10/17 10:50 AM
|
||||
* @Description: TODO
|
||||
* @Version 1.0
|
||||
*/
|
||||
public interface WorkPlanSerivice {
|
||||
|
|
|
|||
|
|
@ -0,0 +1,26 @@
|
|||
package com.engine.recruit.service;
|
||||
|
||||
import java.util.Map;
|
||||
|
||||
/**
|
||||
* @author:dxfeng
|
||||
* @createTime: 2024/01/24
|
||||
* @version: 1.0
|
||||
*/
|
||||
public interface WrittenResultsService {
|
||||
|
||||
/**
|
||||
* 获取表单结构
|
||||
*
|
||||
* @return
|
||||
*/
|
||||
Map<String, Object> getFormCondition();
|
||||
|
||||
/**
|
||||
* 导入Excel
|
||||
*
|
||||
* @param params
|
||||
* @return
|
||||
*/
|
||||
Map<String, Object> importExcel(Map<String, Object> params);
|
||||
}
|
||||
|
|
@ -1,16 +1,13 @@
|
|||
package com.engine.recruit.service.impl;
|
||||
|
||||
import cn.hutool.core.convert.Convert;
|
||||
import com.engine.core.impl.Service;
|
||||
import com.engine.recruit.conn.*;
|
||||
import com.engine.recruit.entity.record.ApplicantRecordPo;
|
||||
import com.engine.recruit.entity.resume.OcrResumePo;
|
||||
import com.engine.recruit.enums.ApplicantOperateEnum;
|
||||
import com.engine.recruit.enums.ApplicationStatusEnum;
|
||||
import com.engine.recruit.enums.RecordOperateEnum;
|
||||
import com.engine.recruit.exception.CustomizeRunTimeException;
|
||||
import com.engine.recruit.service.ApplicantResumeService;
|
||||
import com.engine.recruit.util.RecruitUtil;
|
||||
import org.apache.commons.collections.CollectionUtils;
|
||||
import org.apache.commons.lang3.StringUtils;
|
||||
import weaver.common.DateUtil;
|
||||
|
|
@ -201,20 +198,29 @@ public class ApplicantResumeServiceImpl extends Service implements ApplicantResu
|
|||
recordPo.execute();
|
||||
} else if (ApplicantOperateEnum.ASSIGN.getOperateType().equals(operateType)) {
|
||||
// 分配职位
|
||||
String billid = Util.null2String(params.get("billid"));
|
||||
String ids = Util.null2String(params.get("ids"));
|
||||
// 校验所选
|
||||
rs.executeQuery("select id from uf_jcl_yppc where zt != 0 and id in(" + ids + ")");
|
||||
if (rs.next()) {
|
||||
throw new CustomizeRunTimeException("操作失败,当前存在非待分配简历数据,请刷新后重试");
|
||||
}
|
||||
String ypzw = Util.null2String(params.get("ypzw"));
|
||||
String zplc = Util.null2String(params.get("zplc"));
|
||||
String zpjd = Util.null2String(params.get("zpjd"));
|
||||
String dqypjd = Util.null2String(params.get("dqypjd"));
|
||||
if (StringUtils.isBlank(ypzw)) {
|
||||
throw new CustomizeRunTimeException("应聘职位不可为空");
|
||||
}
|
||||
String flowId = PositionCommonInfo.getRecruitFlowId(ypzw);
|
||||
Map<String, String> initialStage = ApplicantCommonInfo.getInitialStage(flowId);
|
||||
String zpjd = "";
|
||||
String dqypjd = "";
|
||||
if (null != initialStage) {
|
||||
zpjd = initialStage.get("zpjd");
|
||||
dqypjd = initialStage.get("jdlx");
|
||||
if (StringUtils.isBlank(zplc)) {
|
||||
throw new CustomizeRunTimeException("未获取到招聘流程,请检查招聘职位配置");
|
||||
}
|
||||
rs.executeUpdate("update uf_jcl_yppc set ypzw = ? , zplc = ? , zpjd = ? , dqypjd = ?, zt = 1 where id = ?", ypzw, flowId, zpjd, dqypjd, billid);
|
||||
if (StringUtils.isBlank(zpjd)) {
|
||||
throw new CustomizeRunTimeException("未获取到招聘阶段,请检查招聘流程配置");
|
||||
}
|
||||
if (StringUtils.isBlank(dqypjd)) {
|
||||
throw new CustomizeRunTimeException("当前应聘阶段获取失败");
|
||||
}
|
||||
rs.executeUpdate("update uf_jcl_yppc set ypzw = ? , zplc = ? , zpjd = ? , dqypjd = ?, zt = 1 where id in(" + ids + ")", ypzw, zplc, zpjd, dqypjd);
|
||||
returnMap.put("msg", "操作成功");
|
||||
} else if (ApplicantOperateEnum.ARCHIVE.getOperateType().equals(operateType)) {
|
||||
// 归档人才库
|
||||
|
|
@ -268,6 +274,8 @@ public class ApplicantResumeServiceImpl extends Service implements ApplicantResu
|
|||
mainDataMap.put("zpjd", zpjd);
|
||||
mainDataMap.put("dqypjd", dqypjd);
|
||||
}
|
||||
} else {
|
||||
throw new CustomizeRunTimeException("未获取到关联招聘流程的招聘阶段,请检查流程配置");
|
||||
}
|
||||
|
||||
mainDataMap.put("zt", ApplicationStatusEnum.CANDIDATE.getValue());
|
||||
|
|
@ -304,38 +312,6 @@ public class ApplicantResumeServiceImpl extends Service implements ApplicantResu
|
|||
return returnMap;
|
||||
}
|
||||
|
||||
@Override
|
||||
public Map<String, Object> fullOriginalResumeId(Map<String, Object> params) {
|
||||
Map<String, Object> returnMap = new HashMap<>();
|
||||
|
||||
int imageFileId = Convert.toInt(params.get("imageFileId"));
|
||||
int resumeId = Convert.toInt(params.get("resumeId"));
|
||||
int secCategory = Convert.toInt(RecruitModeUtil.getRecruitPropValue("APPLICANTS_RESUMES_CATEGORY"));
|
||||
RecordSet rs = new RecordSet();
|
||||
try {
|
||||
int docId = RecruitModeUtil.createDocId(secCategory, imageFileId, user);
|
||||
// 更新原始简历信息
|
||||
rs.executeUpdate("update uf_jcl_jlzjb set jlfj=?,ocr=1 where id = ?", docId, resumeId);
|
||||
|
||||
// 简历入库,并返回展示的应聘者简历ID
|
||||
rs.executeQuery("select id,xm, xb, csrq, jg, yx, wx, qq, xjzd, ah, grys , jyjl , bysj , zgxl , zyjn , sxjl , yysp , zs, gzjl, ypzw, gzjy, xmjl, sjhm, nl, sfz, jlfj from uf_jcl_jlzjb where ocr = 1 and cqzt is null and id = ?", resumeId);
|
||||
Map<String, Object> recordMap = RecruitRecordSet.getSingleRecordMap(rs);
|
||||
OcrResumePo ocrResumePo = RecruitUtil.parseMap2Object(recordMap, OcrResumePo.class);
|
||||
RecruitDataMap<Object> dataMap = buildApplicantMap(ocrResumePo);
|
||||
// 校验简历信息、并插入
|
||||
Map<String, Object> map = CheckRepeatResume.getInstance().insertResumeAndReturn(dataMap);
|
||||
rs.executeUpdate("update uf_jcl_jlzjb set cqzt = 1 where id = ? ", ocrResumePo.getId());
|
||||
String mainId = Util.null2String(map.get("mainId"));
|
||||
String sourceId = Util.null2String(map.get("sourceId"));
|
||||
returnMap.put("mainId", StringUtils.isNotBlank(sourceId) ? sourceId : mainId);
|
||||
returnMap.put("sourceId", sourceId);
|
||||
|
||||
} catch (Exception e) {
|
||||
throw new RuntimeException(e);
|
||||
}
|
||||
|
||||
return returnMap;
|
||||
}
|
||||
|
||||
@Override
|
||||
public Map<String, Object> checkRepeatResume(Map<String, Object> param) {
|
||||
|
|
@ -351,6 +327,9 @@ public class ApplicantResumeServiceImpl extends Service implements ApplicantResu
|
|||
}
|
||||
List<Map<String, Object>> repeatPositionResumeList = CheckRepeatResume.getRepeatPositionResumeList(name, mobile, positionId, billId);
|
||||
if (CollectionUtils.isNotEmpty(repeatPositionResumeList)) {
|
||||
if (StringUtils.isBlank(positionId)) {
|
||||
throw new CustomizeRunTimeException("保存失败,该人员已有待分配状态数据");
|
||||
}
|
||||
throw new CustomizeRunTimeException("保存失败,该人员已有相同的应聘中的职位");
|
||||
}
|
||||
return returnMap;
|
||||
|
|
@ -475,11 +454,8 @@ public class ApplicantResumeServiceImpl extends Service implements ApplicantResu
|
|||
Map<String, Object> dataMap = new RecruitDataMap<>();
|
||||
String uuid = UUID.randomUUID().toString();
|
||||
dataMap.put("modeuuid", uuid);
|
||||
int formModeId = -1;
|
||||
rs.executeQuery("select id from modeinfo where formid =( select id from workflow_bill where tablename = 'uf_jcl_rck' )");
|
||||
if (rs.next()) {
|
||||
formModeId = rs.getInt("id");
|
||||
}
|
||||
int formModeId = ApplicantCommonInfo.getModeIdByTableName("uf_jcl_rck");
|
||||
|
||||
dataMap.put("formmodeid", formModeId);
|
||||
// 构建建模表基本数据
|
||||
RecruitRecordSet.buildModeInsertFields(dataMap, user.getUID());
|
||||
|
|
@ -634,55 +610,50 @@ public class ApplicantResumeServiceImpl extends Service implements ApplicantResu
|
|||
for (List<Object> list : insertList) {
|
||||
rs.executeUpdate("insert into uf_jcl_rck_dt4 (mainid, yylx, zwcd) values (?, ?, ?)", list);
|
||||
}
|
||||
|
||||
// 同步设置的标签
|
||||
int applicantModeId = ApplicantCommonInfo.getModeIdByTableName("uf_jcl_yppc");
|
||||
rs.executeQuery("select a.tabname , a.color , a.bgcolor , a.bdcolor , a.type , a.creator , a.orderid from modeTabs_" + applicantModeId + " a left join Modetabslog_" + applicantModeId + " b on a.id = b.tabid and b.operate = 0 where b.billid = ? ", applicantId);
|
||||
List<Map<String, Object>> modeTabList = RecruitRecordSet.getRecordMapList(rs);
|
||||
String dateTime = DateUtil.getFullDate();
|
||||
String[] dateSplit = dateTime.split(" ");
|
||||
String createdate = dateSplit[0];
|
||||
String createtime = dateSplit[1];
|
||||
Set<String> tabIdSet = new HashSet<>();
|
||||
for (Map<String, Object> modeTab : modeTabList) {
|
||||
String tabName = Util.null2String(modeTab.get("tabname"));
|
||||
// 查询人才库是否有此标签
|
||||
rs.executeQuery("select id from modeTabs_" + formModeId + " where tabname = ?", tabName);
|
||||
String tabid = null;
|
||||
if (rs.next()) {
|
||||
tabid = rs.getString("id");
|
||||
} else {
|
||||
// 不存在,则插入数据
|
||||
RecruitRecordSet.insertData(modeTab, "modeTabs_" + formModeId);
|
||||
rs.executeQuery("select id from modeTabs_" + formModeId + " where tabname = ?", tabName);
|
||||
if (rs.next()) {
|
||||
tabid = rs.getString("id");
|
||||
}
|
||||
}
|
||||
|
||||
// 插入标签数据
|
||||
if (StringUtils.isNotBlank(tabid)) {
|
||||
Map<String, Object> tabsLogMap = new RecruitDataMap<>();
|
||||
tabsLogMap.put("tabid", tabid);
|
||||
tabsLogMap.put("operate", 0);
|
||||
tabsLogMap.put("modeid", formModeId);
|
||||
tabsLogMap.put("billid", bid);
|
||||
tabsLogMap.put("creator", user.getUID());
|
||||
tabsLogMap.put("createdate", createdate);
|
||||
tabsLogMap.put("createtime", createtime);
|
||||
RecruitRecordSet.insertData(tabsLogMap, "modetabslog_" + formModeId);
|
||||
tabIdSet.add(tabid);
|
||||
}
|
||||
|
||||
}
|
||||
// 更新标签信息
|
||||
rs.executeUpdate("update uf_jcl_rck set modelableid=? where id = ? ", StringUtils.join(tabIdSet, ","), bid);
|
||||
}
|
||||
}
|
||||
|
||||
/**
|
||||
* 构建应聘者数据集合
|
||||
*
|
||||
* @param ocrResumePo
|
||||
* @return
|
||||
*/
|
||||
private RecruitDataMap<Object> buildApplicantMap(OcrResumePo ocrResumePo) {
|
||||
RecruitDataMap<Object> insertMap = new RecruitDataMap<>();
|
||||
// 姓名
|
||||
insertMap.put("xm", ocrResumePo.getXm());
|
||||
// 电子邮箱
|
||||
insertMap.put("dzyx", ocrResumePo.getYx());
|
||||
// 年龄
|
||||
insertMap.put("nl", ocrResumePo.getNl());
|
||||
// 手机号码
|
||||
insertMap.put("sjhm", ocrResumePo.getSjhm());
|
||||
// 自我评价
|
||||
insertMap.put("zwpj", ocrResumePo.getGrys());
|
||||
// 身份证号
|
||||
insertMap.put("sfz", ocrResumePo.getSfz());
|
||||
// 原始简历
|
||||
insertMap.put("ysjl", ocrResumePo.getJlfj());
|
||||
// 性别
|
||||
insertMap.put("xb", ocrResumePo.getXb());
|
||||
// 投递时间
|
||||
insertMap.put("tdsj", DateUtil.getDateTime());
|
||||
String zt = ApplicationStatusEnum.DISTRIBUTION.getValue();
|
||||
// 应聘职位
|
||||
//String ypzw = ocrResumePo.getYpzw();
|
||||
//if (StringUtils.isNotBlank(ypzw)) {
|
||||
// String flowId = PositionCommonInfo.getRecruitFlowId(ypzw);
|
||||
// Map<String, String> initialStage = ApplicantCommonInfo.getInitialStage(flowId);
|
||||
// if (null != initialStage) {
|
||||
// String zpjd = initialStage.get("zpjd");
|
||||
// String dqypjd = initialStage.get("jdlx");
|
||||
// if (StringUtils.isNotBlank(zpjd) && StringUtils.isNotBlank(dqypjd)) {
|
||||
// insertMap.put("ypzw", ypzw);
|
||||
// insertMap.put("zplc", flowId);
|
||||
// insertMap.put("zpjd", zpjd);
|
||||
// insertMap.put("dqypjd", dqypjd);
|
||||
// zt = ApplicationStatusEnum.CANDIDATE.getValue();
|
||||
// }
|
||||
// }
|
||||
//}
|
||||
// 应聘状态
|
||||
insertMap.put("zt", zt);
|
||||
return insertMap;
|
||||
}
|
||||
}
|
||||
|
|
|
|||
|
|
@ -4,6 +4,7 @@ import com.engine.core.impl.Service;
|
|||
import com.engine.recruit.conn.ApplicantCommonInfo;
|
||||
import com.engine.recruit.conn.RecruitDataMap;
|
||||
import com.engine.recruit.conn.RecruitRecordSet;
|
||||
import com.engine.recruit.constant.RecruitConstant;
|
||||
import com.engine.recruit.entity.record.ApplicantRecordPo;
|
||||
import com.engine.recruit.enums.EntryStatusEnum;
|
||||
import com.engine.recruit.enums.InfoCollectEnum;
|
||||
|
|
@ -28,7 +29,6 @@ import java.util.stream.Collectors;
|
|||
* @version: 1.0
|
||||
*/
|
||||
public class InductionManageServiceImpl extends Service implements InductionManageService {
|
||||
private static final String MOBILE_APPID_COLLECT = RecruitModeUtil.getRecruitPropValue("MOBILE_APPID_COLLECT");
|
||||
|
||||
@Override
|
||||
public Map<String, Object> updateInductionManageInfo(Map<String, Object> param) {
|
||||
|
|
@ -47,11 +47,11 @@ public class InductionManageServiceImpl extends Service implements InductionMana
|
|||
public Map<String, Object> sendCollectInfo(Map<String, Object> param) {
|
||||
String ids = Util.null2String(param.get("ids"));
|
||||
String[] split = ids.split(",");
|
||||
if (StringUtils.isBlank(MOBILE_APPID_COLLECT)) {
|
||||
if (StringUtils.isBlank(RecruitConstant.MOBILE_APPID_COLLECT)) {
|
||||
throw new CustomizeRunTimeException("未获取到对应移动建模ID,请检查配置文件");
|
||||
}
|
||||
RecordSet rs = new RecordSet();
|
||||
rs.executeQuery("select noLoginUser from mobileappbaseinfo where id = ?", MOBILE_APPID_COLLECT);
|
||||
rs.executeQuery("select noLoginUser from mobileappbaseinfo where id = ?", RecruitConstant.MOBILE_APPID_COLLECT);
|
||||
int creator = -1;
|
||||
if (rs.next()) {
|
||||
creator = rs.getInt("noLoginUser");
|
||||
|
|
@ -61,7 +61,7 @@ public class InductionManageServiceImpl extends Service implements InductionMana
|
|||
}
|
||||
|
||||
// 查询信息采集模板内容
|
||||
rs.executeQuery("select yjnr,mbmc from uf_jcl_yjtzmb where mblx = 3");
|
||||
rs.executeQuery("select yjnr,mbmc from uf_jcl_yjtzmb where mblx = 3 and zt = 0");
|
||||
String yjnr = "";
|
||||
String mbmc = "";
|
||||
if (rs.next()) {
|
||||
|
|
@ -92,11 +92,7 @@ public class InductionManageServiceImpl extends Service implements InductionMana
|
|||
Map<String, Object> dataMap = new RecruitDataMap<>();
|
||||
String uuid = UUID.randomUUID().toString();
|
||||
dataMap.put("modeuuid", uuid);
|
||||
int formModeId = -1;
|
||||
rs.executeQuery("select id from modeinfo where formid =( select id from workflow_bill where tablename = 'uf_jcl_xxcj' )");
|
||||
if (rs.next()) {
|
||||
formModeId = rs.getInt("id");
|
||||
}
|
||||
int formModeId = ApplicantCommonInfo.getModeIdByTableName("uf_jcl_xxcj");
|
||||
dataMap.put("formmodeid", formModeId);
|
||||
// 构建建模表基本数据
|
||||
RecruitRecordSet.buildModeInsertFields(dataMap, creator);
|
||||
|
|
@ -127,7 +123,7 @@ public class InductionManageServiceImpl extends Service implements InductionMana
|
|||
String mobile = Util.null2String(dataMap.get("sjh"));
|
||||
String email = Util.null2String(dataMap.get("yx"));
|
||||
|
||||
String messageLink = RecruitModeUtil.getRecruitPropValue("COLLECT_MESSAGE_LINK");
|
||||
String messageLink = RecruitConstant.COLLECT_MESSAGE_LINK;
|
||||
//messageLink += "&billId=" + id;
|
||||
|
||||
yjnr = yjnr.replace("{链接地址}", messageLink);
|
||||
|
|
|
|||
|
|
@ -4,17 +4,17 @@ import com.engine.core.impl.Service;
|
|||
import com.engine.recruit.conn.ApplicantCommonInfo;
|
||||
import com.engine.recruit.conn.RecruitDataMap;
|
||||
import com.engine.recruit.conn.RecruitRecordSet;
|
||||
import com.engine.recruit.constant.ModeSearchCodeConstant;
|
||||
import com.engine.recruit.constant.ModeTreeCodeConstant;
|
||||
import com.engine.recruit.entity.init.po.*;
|
||||
import com.engine.recruit.exception.CustomizeRunTimeException;
|
||||
import com.engine.recruit.service.InitRecruitDataService;
|
||||
import org.apache.commons.lang3.StringUtils;
|
||||
import weaver.conn.RecordSet;
|
||||
import weaver.formmode.recruit.modeexpand.process.StageDataInsert;
|
||||
import weaver.general.BaseBean;
|
||||
|
||||
import java.util.ArrayList;
|
||||
import java.util.List;
|
||||
import java.util.Map;
|
||||
import java.util.UUID;
|
||||
import java.util.*;
|
||||
import java.util.stream.Collectors;
|
||||
|
||||
/**
|
||||
|
|
@ -42,6 +42,11 @@ public class InitRecruitDataServiceImpl extends Service implements InitRecruitDa
|
|||
rs.executeUpdate("delete from uf_jcl_zpjdsz_dt1;");
|
||||
rs.executeUpdate("delete from uf_jcl_zpjdsz_dt2;");
|
||||
rs.executeUpdate("delete from uf_jcl_lcczan;");
|
||||
// 刷新页面菜单
|
||||
rs.executeQuery("select * from hp_nonstandard_function_info where num='163' and name ='招聘管理'");
|
||||
if (rs.next()) {
|
||||
refreshMenuUrl();
|
||||
}
|
||||
|
||||
// 插入操作按钮数据,
|
||||
int buttonModeId = ApplicantCommonInfo.getModeIdByTableName("uf_jcl_lcczan");
|
||||
|
|
@ -61,6 +66,124 @@ public class InitRecruitDataServiceImpl extends Service implements InitRecruitDa
|
|||
return null;
|
||||
}
|
||||
|
||||
|
||||
/**
|
||||
* 更新招聘管理相关菜单地址
|
||||
*/
|
||||
private void refreshMenuUrl() {
|
||||
|
||||
List<String> menuSqlList = new ArrayList<>();
|
||||
// 招聘需求
|
||||
menuSqlList.add("update LeftMenuInfo set fullrouteurl = '/spa/cube/index.html#/main/cube/search?customid=" + getCustomSearchId(ModeSearchCodeConstant.RECRUITMENT_DEMAND_MANAGEMENT) + "' where id = " + 100189);
|
||||
// 招聘职位
|
||||
menuSqlList.add("update LeftMenuInfo set fullrouteurl = '/spa/cube/index.html#/main/cube/search?customid=" + getCustomSearchId(ModeSearchCodeConstant.RECRUITMENT_POSITIONS) + "' where id = " + 100190);
|
||||
// 应聘者
|
||||
menuSqlList.add("update LeftMenuInfo set fullrouteurl = '/spa/cube/index.html#/main/cube/search?customid=" + getCustomSearchId(ModeSearchCodeConstant.APPLICANTS) + "' where id = " + 100192);
|
||||
// 部门筛选
|
||||
menuSqlList.add("update LeftMenuInfo set fullrouteurl = '/spa/cube/index.html#/main/cube/search?customid=" + getCustomSearchId(ModeSearchCodeConstant.SCREENING_FEEDBACK) + "' where id = " + 100193);
|
||||
// 笔试
|
||||
menuSqlList.add("update LeftMenuInfo set fullrouteurl = '/spa/cube/index.html#/main/cube/search?customid=" + getCustomSearchId(ModeSearchCodeConstant.WRITTEN_RESULTS) + "' where id = " + 100194);
|
||||
// 面试
|
||||
menuSqlList.add("update LeftMenuInfo set fullrouteurl = '/spa/cube/index.html#/main/cube/search?customid=" + getCustomSearchId(ModeSearchCodeConstant.INTERVIEW) + "' where id = " + 100195);
|
||||
// 薪酬谈判
|
||||
menuSqlList.add("update LeftMenuInfo set fullrouteurl = '/spa/cube/index.html#/main/cube/search?customid=" + getCustomSearchId(ModeSearchCodeConstant.SALARY_NEGOTIATION) + "' where id = " + 100196);
|
||||
// 背调
|
||||
menuSqlList.add("update LeftMenuInfo set fullrouteurl = '/spa/cube/index.html#/main/cube/search?customid=" + getCustomSearchId(ModeSearchCodeConstant.BACK_TONE) + "' where id = " + 100197);
|
||||
// offer
|
||||
menuSqlList.add("update LeftMenuInfo set fullrouteurl = '/spa/cube/index.html#/main/cube/search?customid=" + getCustomSearchId(ModeSearchCodeConstant.OFFER) + "' where id = " + 100198);
|
||||
// 人才库
|
||||
menuSqlList.add("update LeftMenuInfo set fullrouteurl = '/spa/cube/index.html#/main/cube/search?customid=" + getCustomSearchId(ModeSearchCodeConstant.TALENT_POOL) + "' where id = " + 100200);
|
||||
// 简历库
|
||||
menuSqlList.add("update LeftMenuInfo set fullrouteurl = '/spa/cube/index.html#/main/cube/search?customid=" + getCustomSearchId(ModeSearchCodeConstant.RESUME_LIBRARY) + "' where id = " + 100201);
|
||||
// 工作地点
|
||||
menuSqlList.add("update LeftMenuInfo set fullrouteurl = '/spa/cube/index.html#/main/cube/search?customid=" + getCustomSearchId(ModeSearchCodeConstant.WORK_LOCATION) + "' where id = " + 100203);
|
||||
// 字段类型名称
|
||||
menuSqlList.add("update LeftMenuInfo set fullrouteurl = '/spa/cube/index.html#/main/cube/search?customid=" + getCustomSearchId(ModeSearchCodeConstant.DATA_DICTIONARY_TYPE_NAME) + "' where id = " + 100205);
|
||||
// 邮件通知模板
|
||||
menuSqlList.add("update LeftMenuInfo set fullrouteurl = '/spa/cube/index.html#/main/cube/search?customid=" + getCustomSearchId(ModeSearchCodeConstant.EMAIL_NOTIFICATION_TEMPLATE) + "' where id = " + 100206);
|
||||
// 千里聆邮箱配置
|
||||
menuSqlList.add("update LeftMenuInfo set fullrouteurl = '/spa/cube/index.html#/main/cube/search?customid=" + getCustomSearchId(ModeSearchCodeConstant.QLL_EMAIL_CONFIG) + "' where id = " + 100207);
|
||||
// 招聘需求
|
||||
menuSqlList.add("update LeftMenuInfo set fullrouteurl = '/spa/cube/index.html#/main/cube/search?customid=" + getCustomSearchId(ModeSearchCodeConstant.RECRUITMENT_DEMAND_MANAGEMENT) + "' where id = " + 100209);
|
||||
// 我的筛选
|
||||
menuSqlList.add("update LeftMenuInfo set fullrouteurl = '/spa/cube/index.html#/main/cube/search?customid=" + getCustomSearchId(ModeSearchCodeConstant.SCREENING_FEEDBACK) + "' where id = " + 100210);
|
||||
// 我的面试
|
||||
menuSqlList.add("update LeftMenuInfo set fullrouteurl = '/spa/cube/index.html#/main/cube/search?customid=" + getCustomSearchId(ModeSearchCodeConstant.PARTICIPATE_IN_INTERVIEWS) + "' where id = " + 100211);
|
||||
// 招聘流程
|
||||
menuSqlList.add("update LeftMenuInfo set fullrouteurl = '/spa/cube/index.html#/main/cube/search?customid=" + getCustomSearchId(ModeSearchCodeConstant.RECRUITMENT_PROCESS_LIST) + "' where id = " + 100213);
|
||||
// 招聘阶段
|
||||
menuSqlList.add("update LeftMenuInfo set fullrouteurl = '/spa/cube/index.html#/main/cube/search?customid=" + getCustomSearchId(ModeSearchCodeConstant.RECRUITMENT_STAGE_LIST) + "' where id = " + 100214);
|
||||
// 操作按钮
|
||||
menuSqlList.add("update LeftMenuInfo set fullrouteurl = '/spa/cube/index.html#/main/cube/search?customid=" + getCustomSearchId(ModeSearchCodeConstant.LIST_OF_OPERATION_BUTTONS) + "' where id = " + 100215);
|
||||
// 入职管理
|
||||
menuSqlList.add("update LeftMenuInfo set fullrouteurl= '/spa/cube/index.html#/main/cube/viewCustomPage?id=" + getCustomPageId("入职管理", ModeSearchCodeConstant.ENTRY_MANAGEMENT) + "&noTitleShow=1' where id = " + 100199);
|
||||
// 数据字典
|
||||
menuSqlList.add("update LeftMenuInfo set fullrouteurl= '/spa/cube/index.html#/main/cube/tree?id=" + getCustomTreeId(ModeTreeCodeConstant.DATA_DICTIONARY_TREE) + "&noTitleShow=1' where id = " + 100204);
|
||||
|
||||
RecordSet rs = new RecordSet();
|
||||
for (String sql : menuSqlList) {
|
||||
new BaseBean().writeLog("招聘目录初始化SQL:==" + sql);
|
||||
rs.executeUpdate(sql);
|
||||
}
|
||||
}
|
||||
|
||||
/**
|
||||
* 获取建模查询列表ID
|
||||
*
|
||||
* @param customSearchCode
|
||||
* @return
|
||||
*/
|
||||
private String getCustomSearchId(String customSearchCode) {
|
||||
RecordSet rs = new RecordSet();
|
||||
rs.executeQuery("select id from mode_customsearch where customsearchcode = ? ", customSearchCode);
|
||||
if (rs.next()) {
|
||||
return rs.getString("id");
|
||||
}
|
||||
throw new CustomizeRunTimeException("招聘管理菜单初始化失败,请检查建模引擎查询列表配置[" + customSearchCode + "]");
|
||||
}
|
||||
|
||||
/**
|
||||
* 获取建模自定义页面ID
|
||||
*
|
||||
* @param customPageName 自定义页面名称
|
||||
* @param customSearchCode
|
||||
* @return
|
||||
*/
|
||||
private String getCustomPageId(String customPageName, String customSearchCode) {
|
||||
RecordSet rs = new RecordSet();
|
||||
rs.executeQuery("select appid from mode_customsearch where customsearchcode = ? ", customSearchCode);
|
||||
if (rs.next()) {
|
||||
String appId = rs.getString("appid");
|
||||
rs.executeQuery("select id from mode_custompage where appid = ? and customname = ?", appId, customPageName);
|
||||
if (rs.next()) {
|
||||
return rs.getString("id");
|
||||
}
|
||||
}
|
||||
throw new CustomizeRunTimeException("招聘管理菜单初始化失败,请检查建模引擎自定义页面配置[" + customPageName + "," + customSearchCode + "]");
|
||||
}
|
||||
|
||||
/**
|
||||
* 获取建模树ID
|
||||
*
|
||||
* @param treeCode
|
||||
* @return
|
||||
*/
|
||||
private String getCustomTreeId(String treeCode) {
|
||||
RecordSet rs = new RecordSet();
|
||||
rs.executeQuery("select id from mode_customtree where treecode =? ", treeCode);
|
||||
if (rs.next()) {
|
||||
return rs.getString("id");
|
||||
}
|
||||
throw new CustomizeRunTimeException("招聘管理菜单初始化失败,请检查建模引擎树配置[" + treeCode + "]");
|
||||
}
|
||||
|
||||
|
||||
/**
|
||||
* 插入初始化流程数据
|
||||
*
|
||||
* @param baseMap
|
||||
* @param modeId
|
||||
*/
|
||||
private void insertFlowData(Map<String, Object> baseMap, int modeId) {
|
||||
OperateFlowPo flowPo = OperateFlowPo.builder()
|
||||
.lcmc("默认流程")
|
||||
|
|
@ -215,7 +338,7 @@ public class InitRecruitDataServiceImpl extends Service implements InitRecruitDa
|
|||
|
||||
stageList.add(buildStagePo(OperateStagePo.builder().jdmc("笔试").jdms("笔试").jdlx(1).hj(1).build(),
|
||||
operateButtonMap,
|
||||
"进入下一阶段", "安排笔试", "笔试结果登记", "转移阶段", "淘汰", "转推其他职位", "归档人才库", "添加备注", "加入黑名单"));
|
||||
"进入下一阶段", "安排笔试", "转移阶段", "淘汰", "转推其他职位", "归档人才库", "添加备注", "加入黑名单"));
|
||||
|
||||
stageList.add(buildStagePo(OperateStagePo.builder().jdmc("面试").jdms("面试").jdlx(2).hj(1).build(),
|
||||
operateButtonMap,
|
||||
|
|
@ -304,7 +427,7 @@ public class InitRecruitDataServiceImpl extends Service implements InitRecruitDa
|
|||
.build());
|
||||
|
||||
buttonList.add(OperateButtonPo.builder().buttonName("归档人才库").buttonAction("openDialog")
|
||||
.linkUrl(getModeLink("/spa/cube/index.html#/main/cube/card?type=1&modeId={modeId}&formId={formId}&layoutid={layoutid}&guid=card&ids=$parentid$", "uf_jcl_yppc", "归档人才库-新建模板-新建一个投递", ""))
|
||||
.linkUrl(getModeLink("/spa/cube/index.html#/main/cube/card?type=1&modeId={modeId}&formId={formId}&layoutid={layoutid}&guid=card&ids=$parentid$", "uf_jcl_yppc", "归档人才库-新建模板", ""))
|
||||
.build());
|
||||
|
||||
buttonList.add(OperateButtonPo.builder().buttonName("加入黑名单").buttonAction("confirmAndReload")
|
||||
|
|
@ -315,16 +438,16 @@ public class InitRecruitDataServiceImpl extends Service implements InitRecruitDa
|
|||
.linkUrl(getModeLink("/spa/cube/index.html#/main/cube/card?modeId={modeId}&formId={formId}&type=1&layoutid={layoutid}&{ypz}=$parentid$", "uf_jcl_bs", "笔试安排-新建模板", "ypz"))
|
||||
.build());
|
||||
|
||||
buttonList.add(OperateButtonPo.builder().buttonName("笔试结果登记").buttonAction("openDialog")
|
||||
.linkUrl(getModeLink("/spa/cube/index.html#/main/cube/card?modeId={modeId}&formId={formId}&type=1&layoutid={layoutid}&{ypz}=$parentid$", "uf_jcl_bs", "笔试结果-编辑模板", "ypz"))
|
||||
.build());
|
||||
//buttonList.add(OperateButtonPo.builder().buttonName("笔试结果登记").buttonAction("openDialog")
|
||||
// .linkUrl(getModeLink("/spa/cube/index.html#/main/cube/card?modeId={modeId}&formId={formId}&type=1&layoutid={layoutid}&{ypz}=$parentid$", "uf_jcl_bs", "笔试结果-编辑模板", "ypz"))
|
||||
// .build());
|
||||
|
||||
buttonList.add(OperateButtonPo.builder().buttonName("安排面试").buttonAction("openDialog")
|
||||
.linkUrl(getModeLink("/spa/cube/index.html#/main/cube/card?type=1&modeId={modeId}&formId={formId}&{ypz}=$parentid$", "uf_jcl_ms", "", "ypz"))
|
||||
.build());
|
||||
|
||||
buttonList.add(OperateButtonPo.builder().buttonName("背调结果登记").buttonAction("openDialog")
|
||||
.linkUrl(getModeLink("/spa/cube/index.html#/main/cube/card?type=1&modeId={modeId}&formId={formId}&{ypz}=6&recordType=addBackTone", "uf_jcl_bd", "", "ypz"))
|
||||
.linkUrl(getModeLink("/spa/cube/index.html#/main/cube/card?type=1&modeId={modeId}&formId={formId}&{ypz}=$parentid$&recordType=addBackTone", "uf_jcl_bd", "", "ypz"))
|
||||
.build());
|
||||
|
||||
buttonList.add(OperateButtonPo.builder().buttonName("谈判记录登记").buttonAction("openDialog")
|
||||
|
|
@ -337,7 +460,7 @@ public class InitRecruitDataServiceImpl extends Service implements InitRecruitDa
|
|||
|
||||
|
||||
buttonList.add(OperateButtonPo.builder().buttonName("转为待入职").buttonAction("openDialog")
|
||||
.linkUrl(getModeLink("/spa/cube/index.html#/main/cube/card?type=1&modeId={modeId}&formId={formId}&pcid=$parentid$", "uf_jcl_rzgl", "", ""))
|
||||
.linkUrl(getModeLink("/spa/cube/index.html#/main/cube/card?type=1&modeId={modeId}&formId={formId}&pcid=$parentid$&recordType=pendingEmployment", "uf_jcl_rzgl", "", ""))
|
||||
.build());
|
||||
|
||||
buttonList.add(OperateButtonPo.builder().buttonName("转移阶段").buttonAction("openDialog")
|
||||
|
|
@ -427,7 +550,7 @@ public class InitRecruitDataServiceImpl extends Service implements InitRecruitDa
|
|||
String workflowId = "";
|
||||
int formId = -1;
|
||||
RecordSet rs = new RecordSet();
|
||||
rs.executeQuery("select id,formid from workflow_base where workflowname = ? ", workflowName);
|
||||
rs.executeQuery("select id,formid from workflow_base where workflowname like '" + workflowName + "%'");
|
||||
if (rs.next()) {
|
||||
workflowId = rs.getString("id");
|
||||
formId = rs.getInt("formid");
|
||||
|
|
|
|||
|
|
@ -2,13 +2,14 @@ package com.engine.recruit.service.impl;
|
|||
|
||||
import com.engine.common.util.ServiceUtil;
|
||||
import com.engine.core.impl.Service;
|
||||
import com.engine.recruit.conn.ApplicantCommonInfo;
|
||||
import com.engine.recruit.constant.RecruitConstant;
|
||||
import com.engine.recruit.entity.record.ApplicantRecordPo;
|
||||
import com.engine.recruit.enums.ApplicationStatusEnum;
|
||||
import com.engine.recruit.enums.RecordOperateEnum;
|
||||
import com.engine.recruit.service.RecruitButtonService;
|
||||
import weaver.common.DateUtil;
|
||||
import weaver.conn.RecordSet;
|
||||
import com.engine.recruit.conn.ApplicantCommonInfo;
|
||||
import weaver.formmode.recruit.modeexpand.util.RecruitModeUtil;
|
||||
import weaver.general.Util;
|
||||
|
||||
|
|
@ -57,8 +58,8 @@ public class JoinBlacklistServiceImpl extends Service implements RecruitButtonSe
|
|||
recordPo.execute();
|
||||
|
||||
// 消息提醒当前人员简历的跟进者(应聘职位的负责人/协助人)
|
||||
String messageType = RecruitModeUtil.getRecruitPropValue("RECRUIT_MESSAGE_TYPE");
|
||||
String messageTitle = RecruitModeUtil.getRecruitPropValue("JOIN_BLACKLIST_MESSAGE_TITLE");
|
||||
String messageType = RecruitConstant.RECRUIT_MESSAGE_TYPE;
|
||||
String messageTitle = RecruitConstant.JOIN_BLACKLIST_MESSAGE_TITLE;
|
||||
String applicantName = ApplicantCommonInfo.getApplicantName(billId);
|
||||
String operatorName = RecruitModeUtil.getResourceNames(String.valueOf(user.getUID()));
|
||||
String messageContent = "应聘者:【" + applicantName + "】,已被【" + operatorName + "】加入黑名单,相关投递已自动淘汰,请知悉。";
|
||||
|
|
|
|||
|
|
@ -1,12 +1,14 @@
|
|||
package com.engine.recruit.service.impl;
|
||||
|
||||
import cn.hutool.core.convert.Convert;
|
||||
import com.engine.core.impl.Service;
|
||||
import com.engine.recruit.entity.recruitflow.po.RecruitButton;
|
||||
import com.engine.recruit.entity.recruitflow.po.RecruitStepPo;
|
||||
import com.engine.recruit.entity.recruitflow.po.RecruitTabPo;
|
||||
import com.engine.recruit.conn.RecruitDataMap;
|
||||
import com.engine.recruit.conn.RecruitRecordSet;
|
||||
import com.engine.recruit.entity.recruitflow.po.*;
|
||||
import com.engine.recruit.exception.CustomizeRunTimeException;
|
||||
import com.engine.recruit.service.RecruitFlowService;
|
||||
import com.engine.recruit.util.RecruitFlowUtil;
|
||||
import org.apache.commons.collections.CollectionUtils;
|
||||
import org.apache.commons.lang3.StringUtils;
|
||||
import weaver.conn.RecordSet;
|
||||
import weaver.general.Util;
|
||||
|
|
@ -15,6 +17,7 @@ import java.util.ArrayList;
|
|||
import java.util.HashMap;
|
||||
import java.util.List;
|
||||
import java.util.Map;
|
||||
import java.util.stream.Collectors;
|
||||
|
||||
/**
|
||||
* @author:dxfeng
|
||||
|
|
@ -127,4 +130,238 @@ public class RecruitFlowServiceImpl extends Service implements RecruitFlowServic
|
|||
returnMap.put("currentStageId", currentStageId);
|
||||
return returnMap;
|
||||
}
|
||||
|
||||
@Override
|
||||
public Map<String, Object> syncRecruitStepInfo(Map<String, Object> param) {
|
||||
String stepId = Util.null2String(param.get("stepId"));
|
||||
String recruitFlowId = Util.null2String(param.get("recruitFlowId"));
|
||||
String checkedValue = Util.null2String(param.get("checkedValue"));
|
||||
|
||||
if (StringUtils.isBlank(stepId)) {
|
||||
throw new CustomizeRunTimeException("未获取到所选招聘阶段,请刷新后重试");
|
||||
}
|
||||
if (StringUtils.isBlank(recruitFlowId)) {
|
||||
throw new CustomizeRunTimeException("同步流程为空,请选择同步流程");
|
||||
}
|
||||
if (StringUtils.isBlank(checkedValue)) {
|
||||
throw new CustomizeRunTimeException("请选择同步选项");
|
||||
}
|
||||
|
||||
// 判断该流程是否有该阶段,没有该阶段的不做操作
|
||||
String flowStepId = getFlowStepId(stepId, recruitFlowId);
|
||||
if (StringUtils.isBlank(flowStepId)) {
|
||||
throw new CustomizeRunTimeException("所选流程不具备当前招聘阶段,同步失败");
|
||||
}
|
||||
|
||||
|
||||
switch (checkedValue) {
|
||||
case "syncAdd":
|
||||
syncAdd(stepId, flowStepId);
|
||||
break;
|
||||
case "syncOrder":
|
||||
syncOrder(stepId, flowStepId);
|
||||
break;
|
||||
case "syncAll":
|
||||
syncAll(stepId, flowStepId);
|
||||
break;
|
||||
case "syncTab":
|
||||
syncTab(stepId, flowStepId);
|
||||
break;
|
||||
default:
|
||||
throw new CustomizeRunTimeException("未识别的同步方式");
|
||||
}
|
||||
return null;
|
||||
}
|
||||
|
||||
/**
|
||||
* 同步新增操作
|
||||
* 直接将缺失的操作按钮追加在原有按钮后方
|
||||
*
|
||||
* @param stepId
|
||||
* @param flowStepId
|
||||
*/
|
||||
private void syncAdd(String stepId, String flowStepId) {
|
||||
List<RecruitStepDt1> stepDt1List = getStepDt1List(stepId);
|
||||
List<RecruitStepDt1> flowStepDt1List = getStepDt1List(flowStepId);
|
||||
|
||||
// 比较差异,只保留flowStepDt1List中没有的元素
|
||||
List<RecruitStepDt1> result = stepDt1List.stream()
|
||||
.filter(item -> !flowStepDt1List.contains(item))
|
||||
.collect(Collectors.toList());
|
||||
|
||||
// 元素追加
|
||||
Integer order = 0;
|
||||
if (CollectionUtils.isNotEmpty(flowStepDt1List)) {
|
||||
String zssx = flowStepDt1List.get(flowStepDt1List.size() - 1).getZssx();
|
||||
if (StringUtils.isNotBlank(zssx)) {
|
||||
order = Convert.toInt(zssx);
|
||||
}
|
||||
}
|
||||
|
||||
for (RecruitStepDt1 stepDt1 : result) {
|
||||
order += 10;
|
||||
RecruitDataMap<Object> dataMap = new RecruitDataMap<>();
|
||||
dataMap.put("mainid", flowStepId);
|
||||
dataMap.put("czan", stepDt1.getCzan());
|
||||
dataMap.put("zdyxsmc", stepDt1.getZdyxsmc());
|
||||
dataMap.put("tzymdz", stepDt1.getTzymdz());
|
||||
dataMap.put("sfqy", stepDt1.getSfqy());
|
||||
dataMap.put("tzymbt", stepDt1.getTzymbt());
|
||||
dataMap.put("zssx", order.toString());
|
||||
RecruitRecordSet.insertData(dataMap, "uf_jcl_zpjdsz_dt1");
|
||||
}
|
||||
}
|
||||
|
||||
/**
|
||||
* 同步操作顺序
|
||||
* 比较差异、按顺序插空进入
|
||||
*
|
||||
* @param stepId
|
||||
* @param flowStepId
|
||||
*/
|
||||
private void syncOrder(String stepId, String flowStepId) {
|
||||
List<RecruitStepDt1> stepDt1List = getStepDt1List(stepId);
|
||||
List<RecruitStepDt1> flowStepDt1List = getStepDt1List(flowStepId);
|
||||
|
||||
// 只保留stepDt1List中相同的元素
|
||||
flowStepDt1List.retainAll(stepDt1List);
|
||||
|
||||
int index = 0;
|
||||
for (int i = 0; i < stepDt1List.size(); i++) {
|
||||
RecruitStepDt1 character = stepDt1List.get(i);
|
||||
if (flowStepDt1List.contains(character)) {
|
||||
RecruitStepDt1 remove = flowStepDt1List.get(index++);
|
||||
stepDt1List.set(i, remove);
|
||||
}
|
||||
}
|
||||
|
||||
// 调整展示顺序
|
||||
int order = 0;
|
||||
for (RecruitStepDt1 stepDt1 : stepDt1List) {
|
||||
RecruitDataMap<Object> dataMap = new RecruitDataMap<>();
|
||||
dataMap.put("zssx", order += 10);
|
||||
dataMap.put("id", stepDt1.getId());
|
||||
RecruitRecordSet.updateDataById(dataMap, "uf_jcl_zpjdsz_dt1");
|
||||
}
|
||||
|
||||
}
|
||||
|
||||
/**
|
||||
* 同步所有操作(覆盖替换)
|
||||
*
|
||||
* @param stepId
|
||||
* @param flowStepId
|
||||
*/
|
||||
private void syncAll(String stepId, String flowStepId) {
|
||||
List<RecruitStepDt1> stepDt1List = getStepDt1List(stepId);
|
||||
|
||||
// 删除原有的数据
|
||||
String deleteSql = "delete from uf_jcl_zpjdsz_dt1 where mainid = " + flowStepId;
|
||||
RecruitRecordSet.deleteData(deleteSql);
|
||||
for (RecruitStepDt1 stepDt1 : stepDt1List) {
|
||||
RecruitDataMap<Object> dataMap = new RecruitDataMap<>();
|
||||
dataMap.put("mainid", flowStepId);
|
||||
dataMap.put("czan", stepDt1.getCzan());
|
||||
dataMap.put("zdyxsmc", stepDt1.getZdyxsmc());
|
||||
dataMap.put("tzymdz", stepDt1.getTzymdz());
|
||||
dataMap.put("sfqy", stepDt1.getSfqy());
|
||||
dataMap.put("tzymbt", stepDt1.getTzymbt());
|
||||
dataMap.put("zssx", stepDt1.getZssx());
|
||||
RecruitRecordSet.insertData(dataMap, "uf_jcl_zpjdsz_dt1");
|
||||
}
|
||||
|
||||
}
|
||||
|
||||
/**
|
||||
* 同步卡片展示tab页面
|
||||
*
|
||||
* @param stepId
|
||||
* @param flowStepId
|
||||
*/
|
||||
private void syncTab(String stepId, String flowStepId) {
|
||||
List<RecruitStepDt2> stepDt2List = getStepDt2List(stepId);
|
||||
|
||||
// 删除原有的数据
|
||||
String deleteSql = "delete from uf_jcl_zpjdsz_dt2 where mainid = " + flowStepId;
|
||||
RecruitRecordSet.deleteData(deleteSql);
|
||||
int order = 0;
|
||||
for (RecruitStepDt2 stepDt2 : stepDt2List) {
|
||||
order += 10;
|
||||
RecruitDataMap<Object> dataMap = new RecruitDataMap<>();
|
||||
dataMap.put("mainid", flowStepId);
|
||||
dataMap.put("ymbt", stepDt2.getYmbt());
|
||||
dataMap.put("ymdz", stepDt2.getYmdz());
|
||||
dataMap.put("zssx", Integer.toString(order));
|
||||
RecruitRecordSet.insertData(dataMap, "uf_jcl_zpjdsz_dt2");
|
||||
}
|
||||
}
|
||||
|
||||
|
||||
/**
|
||||
* 获取流程对应的当前阶段ID
|
||||
*
|
||||
* @param stepId
|
||||
* @param recruitFlowId
|
||||
* @return
|
||||
*/
|
||||
private String getFlowStepId(String stepId, String recruitFlowId) {
|
||||
RecordSet rs = new RecordSet();
|
||||
rs.executeQuery("select id from uf_jcl_zpjdsz where zplc = ? and zpjd = ?", recruitFlowId, stepId);
|
||||
if (rs.next()) {
|
||||
return rs.getString("id");
|
||||
}
|
||||
return "";
|
||||
}
|
||||
|
||||
|
||||
/**
|
||||
* 根据阶段ID,获取该阶段所有的按钮配置集合
|
||||
*
|
||||
* @param stepId
|
||||
* @return
|
||||
*/
|
||||
private List<RecruitStepDt1> getStepDt1List(String stepId) {
|
||||
List<RecruitStepDt1> list = new ArrayList<>();
|
||||
RecordSet rs = new RecordSet();
|
||||
rs.executeQuery("select * from uf_jcl_zpjdsz_dt1 where mainid = ? order by zssx", stepId);
|
||||
while (rs.next()) {
|
||||
RecruitStepDt1 stepDt1 = RecruitStepDt1.builder()
|
||||
.id(rs.getString("id"))
|
||||
.mainid(rs.getString("mainid"))
|
||||
.czan(rs.getString("czan"))
|
||||
.zdyxsmc(rs.getString("zdyxsmc"))
|
||||
.tzymdz(rs.getString("tzymdz"))
|
||||
.sfqy(rs.getString("sfqy"))
|
||||
.tzymbt(rs.getString("tzymbt"))
|
||||
.zssx(rs.getString("zssx"))
|
||||
.build();
|
||||
list.add(stepDt1);
|
||||
}
|
||||
return list;
|
||||
}
|
||||
|
||||
|
||||
/**
|
||||
* 根据阶段ID,获取该阶段所有的tab页面配置集合
|
||||
*
|
||||
* @param stepId
|
||||
* @return
|
||||
*/
|
||||
private List<RecruitStepDt2> getStepDt2List(String stepId) {
|
||||
List<RecruitStepDt2> list = new ArrayList<>();
|
||||
RecordSet rs = new RecordSet();
|
||||
rs.executeQuery("select * from uf_jcl_zpjdsz_dt2 where mainid = ? order by zssx", stepId);
|
||||
while (rs.next()) {
|
||||
RecruitStepDt2 stepDt1 = RecruitStepDt2.builder()
|
||||
.id(rs.getString("id"))
|
||||
.mainid(rs.getString("mainid"))
|
||||
.ymbt(rs.getString("ymbt"))
|
||||
.ymdz(rs.getString("ymdz"))
|
||||
.zssx(rs.getString("zssx"))
|
||||
.build();
|
||||
list.add(stepDt1);
|
||||
}
|
||||
return list;
|
||||
}
|
||||
|
||||
}
|
||||
|
|
|
|||
|
|
@ -0,0 +1,89 @@
|
|||
package com.engine.recruit.service.impl;
|
||||
|
||||
import com.engine.core.impl.Service;
|
||||
import com.engine.recruit.conn.RecruitRecordSet;
|
||||
import com.engine.recruit.constant.RecruitConstant;
|
||||
import com.engine.recruit.service.RecruitInterviewService;
|
||||
import com.weaver.formmodel.data.model.Formfield;
|
||||
import org.apache.commons.lang3.StringUtils;
|
||||
import weaver.conn.RecordSet;
|
||||
import weaver.formmode.recruit.modeexpand.util.RecruitModeUtil;
|
||||
import weaver.general.Util;
|
||||
|
||||
import java.util.*;
|
||||
import java.util.stream.Collectors;
|
||||
|
||||
/**
|
||||
* @author:dxfeng
|
||||
* @createTime: 2023/11/28
|
||||
* @version: 1.0
|
||||
*/
|
||||
public class RecruitInterviewServiceImpl extends Service implements RecruitInterviewService {
|
||||
@Override
|
||||
public Map<String, Object> updateInterviewStatus(Map<String, Object> param) {
|
||||
Map<String, Object> returnMap = new HashMap<>(3);
|
||||
String status = Util.null2String(param.get("status"));
|
||||
String uuid = Util.null2String(param.get("uuid"));
|
||||
returnMap.put("type", "error");
|
||||
returnMap.put("message", "反馈失败");
|
||||
|
||||
if (StringUtils.isBlank(status) || StringUtils.isBlank(uuid)) {
|
||||
returnMap.put("description", "反馈失败,请直接点击邮件/短信中的链接地址访问,请勿修改链接内容。");
|
||||
return returnMap;
|
||||
}
|
||||
|
||||
RecordSet rs = new RecordSet();
|
||||
rs.executeQuery("select * from uf_jcl_ms where modeuuid = ? ", uuid);
|
||||
Map<String, Object> mainDataMap = RecruitRecordSet.getSingleRecordMap(rs);
|
||||
String sfcj = "";
|
||||
if (!mainDataMap.isEmpty()) {
|
||||
sfcj = Util.null2String(mainDataMap.get("sfcj"));
|
||||
} else {
|
||||
returnMap.put("description", "反馈失败,面试信息有误,请联系相应HR确认");
|
||||
return returnMap;
|
||||
}
|
||||
|
||||
|
||||
if (StringUtils.isNotBlank(sfcj)) {
|
||||
returnMap.put("description", "您已成功反馈面试,请勿重复反馈。");
|
||||
return returnMap;
|
||||
}
|
||||
|
||||
List<Formfield> fieldList = RecruitModeUtil.getFieldList("uf_jcl_ms");
|
||||
Map<String, Formfield> fieldMap = fieldList.stream().collect(Collectors.toMap(Formfield::getFieldname, item -> item, (k1, k2) -> k1));
|
||||
// 参加
|
||||
if ("0".equals(status)) {
|
||||
returnMap.put("type", "success");
|
||||
returnMap.put("message", "已确认参加面试");
|
||||
returnMap.put("description", "您已接受面试,感谢您的应聘,请按期准备面试,如有问题可以联系相应HR");
|
||||
|
||||
rs.executeUpdate("update uf_jcl_ms set sfcj = ? , zt = 0 where modeuuid = ? ", 0, uuid);
|
||||
|
||||
|
||||
String msgContent = "应聘者:$ypz$,确认参加面试,请知悉。<br/>" +
|
||||
"面试时间:$msrq$;面试官:$msg$";
|
||||
msgContent = RecruitModeUtil.getMsgReplaceStr(msgContent, fieldMap, mainDataMap);
|
||||
Set<String> userIdSet = new HashSet<>();
|
||||
userIdSet.add(Util.null2String(mainDataMap.get("modedatacreater")));
|
||||
RecruitModeUtil.messagePush(RecruitConstant.INTERVIEW_MESSAGE_TYPE, "面试反馈通知", msgContent, userIdSet, 1);
|
||||
} else if ("1".equals(status)) {
|
||||
returnMap.put("type", "info");
|
||||
returnMap.put("message", "已取消参加面试");
|
||||
returnMap.put("description", "您已取消参加面试,感谢您的应聘。希望您能够找到真正适合自己的工作。");
|
||||
|
||||
rs.executeUpdate("update uf_jcl_ms set sfcj = ? , qxyy = 2 , zt = 4 where modeuuid = ? ", 1, uuid);
|
||||
|
||||
|
||||
String msgContent = "应聘者:$ypz$,反馈不参加面试,面试已取消,请知悉。<br/>" +
|
||||
"面试时间:$msrq$;面试官:$msg$";
|
||||
msgContent = RecruitModeUtil.getMsgReplaceStr(msgContent, fieldMap, mainDataMap);
|
||||
String msg = Util.null2String(mainDataMap.get("msg"));
|
||||
Set<String> userIdSet = new HashSet<>();
|
||||
userIdSet.add(Util.null2String(mainDataMap.get("modedatacreater")));
|
||||
userIdSet.addAll(Arrays.asList(msg.split(",")));
|
||||
RecruitModeUtil.messagePush(RecruitConstant.INTERVIEW_MESSAGE_TYPE, "面试反馈通知", msgContent, userIdSet, 1);
|
||||
}
|
||||
|
||||
return returnMap;
|
||||
}
|
||||
}
|
||||
|
|
@ -0,0 +1,501 @@
|
|||
package com.engine.recruit.service.impl;
|
||||
|
||||
import cn.hutool.core.convert.Convert;
|
||||
import com.alibaba.fastjson.JSONArray;
|
||||
import com.alibaba.fastjson.JSONObject;
|
||||
import com.engine.core.impl.Service;
|
||||
import com.engine.recruit.conn.*;
|
||||
import com.engine.recruit.constant.RecruitConstant;
|
||||
import com.engine.recruit.enums.ApplicationStatusEnum;
|
||||
import com.engine.recruit.exception.CustomizeRunTimeException;
|
||||
import com.engine.recruit.service.ResumeRecognitionService;
|
||||
import com.weaver.formmodel.data.model.Formfield;
|
||||
import org.apache.commons.collections.CollectionUtils;
|
||||
import org.apache.commons.lang3.StringUtils;
|
||||
import org.apache.http.HttpEntity;
|
||||
import org.apache.http.client.methods.CloseableHttpResponse;
|
||||
import org.apache.http.client.methods.HttpPost;
|
||||
import org.apache.http.entity.ContentType;
|
||||
import org.apache.http.entity.mime.MultipartEntityBuilder;
|
||||
import org.apache.http.impl.client.CloseableHttpClient;
|
||||
import org.apache.http.impl.client.HttpClients;
|
||||
import org.apache.http.util.EntityUtils;
|
||||
import weaver.conn.RecordSet;
|
||||
import weaver.file.ImageFileManager;
|
||||
import weaver.formmode.recruit.modeexpand.util.RecruitModeUtil;
|
||||
import weaver.general.BaseBean;
|
||||
import weaver.general.Util;
|
||||
|
||||
import java.math.BigInteger;
|
||||
import java.security.MessageDigest;
|
||||
import java.security.NoSuchAlgorithmException;
|
||||
import java.text.DateFormat;
|
||||
import java.text.SimpleDateFormat;
|
||||
import java.util.*;
|
||||
import java.util.function.Function;
|
||||
import java.util.stream.Collectors;
|
||||
|
||||
/**
|
||||
* @author:dxfeng
|
||||
* @createTime: 2023/12/12
|
||||
* @version: 1.0
|
||||
*/
|
||||
public class ResumeRecognitionServiceImpl extends Service implements ResumeRecognitionService {
|
||||
|
||||
|
||||
@Override
|
||||
public Map<String, Object> resumeUpload(Map<String, Object> param) {
|
||||
Map<String, Object> returnMap = new HashMap<>(16);
|
||||
String resumeId = Util.null2String(param.get("resumeId"));
|
||||
int imageField = ApplicantCommonInfo.getImageFieldByDocId(resumeId);
|
||||
if (-1 == imageField) {
|
||||
throw new CustomizeRunTimeException("原始简历文件获取失败,请重新上传原始简历");
|
||||
}
|
||||
qllResumeUpload(imageField, returnMap, true);
|
||||
returnMap.put("isOcr", true);
|
||||
return returnMap;
|
||||
}
|
||||
|
||||
@Override
|
||||
public Map<String, Object> importResume(Map<String, Object> param) {
|
||||
Map<String, Object> returnMap = new HashMap<>();
|
||||
String resumeId = Util.null2String(param.get("resumeId"));
|
||||
Map<String, Object> uploadDataMap = new HashMap<>();
|
||||
qllResumeUpload(Convert.toInt(resumeId), uploadDataMap, false);
|
||||
Map<String, Object> resumeData = (Map<String, Object>) uploadDataMap.get("data");
|
||||
// 添加原始附件字段信息
|
||||
int secCategory = Convert.toInt(RecruitConstant.APPLICANTS_RESUMES_CATEGORY);
|
||||
try {
|
||||
int docId = RecruitModeUtil.createDocId(secCategory, Convert.toInt(resumeId), user);
|
||||
resumeData.put("ysjl", docId);
|
||||
} catch (Exception e) {
|
||||
throw new RuntimeException(e);
|
||||
}
|
||||
List<RecruitDataMap<Object>> studyList = (List<RecruitDataMap<Object>>) resumeData.remove("jyjl");
|
||||
List<RecruitDataMap<Object>> workList = (List<RecruitDataMap<Object>>) resumeData.remove("gzjl");
|
||||
|
||||
// 状态
|
||||
resumeData.put("zt", ApplicationStatusEnum.DISTRIBUTION.getValue());
|
||||
|
||||
List<Formfield> fieldList = RecruitModeUtil.getFieldList("uf_jcl_yppc");
|
||||
Set<String> keySet = fieldList.stream().map(Formfield::getFieldname).collect(Collectors.toSet());
|
||||
|
||||
// 移除不在 keySet 中的键值对
|
||||
resumeData.entrySet().removeIf(entry -> !keySet.contains(entry.getKey()));
|
||||
|
||||
|
||||
// 判断简历信息
|
||||
CheckRepeatResume instance = CheckRepeatResume.getInstance();
|
||||
Map<String, Object> map = instance.insertResumeAndReturn(resumeData);
|
||||
String mainId = Util.null2String(map.get("mainId"));
|
||||
String sourceId = Util.null2String(map.get("sourceId"));
|
||||
returnMap.put("mainId", mainId);
|
||||
returnMap.put("sourceId", sourceId);
|
||||
returnMap.put("id", StringUtils.isNotBlank(sourceId) ? sourceId : mainId);
|
||||
instance.insertResumeDetailTable(studyList, "uf_jcl_yppc_dt1", mainId, sourceId);
|
||||
instance.insertResumeDetailTable(workList, "uf_jcl_yppc_dt2", mainId, sourceId);
|
||||
return returnMap;
|
||||
}
|
||||
|
||||
@Override
|
||||
public Map<String, Object> fetchResume(Map<String, Object> param) {
|
||||
String id = Util.null2String(param.get("id"));
|
||||
String sql = "select * from uf_jcl_yppc where id = ? ";
|
||||
RecordSet rs = new RecordSet();
|
||||
rs.executeQuery(sql, id);
|
||||
Map<String, Object> dataMap = RecruitRecordSet.getSingleRecordMap(rs);
|
||||
|
||||
List<Formfield> fieldList = RecruitModeUtil.getFieldList("uf_jcl_yppc");
|
||||
Map<String, Formfield> fieldMap = fieldList.stream().collect(Collectors.toMap(Formfield::getFieldname, item -> item, (k1, k2) -> k1));
|
||||
|
||||
for (String key : dataMap.keySet()) {
|
||||
Object value = dataMap.get(key);
|
||||
if (StringUtils.isBlank(Convert.toStr(value))) {
|
||||
continue;
|
||||
}
|
||||
// 计算新的value值
|
||||
Formfield formfield = fieldMap.get(key);
|
||||
value = RecruitModeUtil.getFieldShowName(formfield, Convert.toStr(value)).replaceAll("<[^>]*>", "");
|
||||
// 更新value值
|
||||
dataMap.put(key, value);
|
||||
}
|
||||
|
||||
return dataMap;
|
||||
}
|
||||
|
||||
|
||||
/**
|
||||
* @param resumeId 简历ID
|
||||
* @param returnMap 响应集合
|
||||
*/
|
||||
private void qllResumeUpload(int resumeId, Map<String, Object> returnMap, boolean isCard) {
|
||||
String response = doQllPost(resumeId);
|
||||
if (StringUtils.isBlank(response)) {
|
||||
throw new CustomizeRunTimeException("千里聆接口调用失败,响应结果为空");
|
||||
}
|
||||
|
||||
JSONObject all = JSONObject.parseObject(response);
|
||||
if (!all.getBoolean("isSuccess")) {
|
||||
throw new CustomizeRunTimeException("千里聆接口调用失败,接口不通");
|
||||
}
|
||||
JSONObject resultall = all.getJSONObject("data");
|
||||
String status = resultall.getString("state");
|
||||
if ("fail".equals(status)) {
|
||||
throw new CustomizeRunTimeException("调用千里聆接口失败,失败原因:" + resultall.getString("info"));
|
||||
}
|
||||
JSONObject result = resultall.getJSONObject("result");
|
||||
Map<String, Object> dataMap = parseQllJsonToMap(result, isCard);
|
||||
returnMap.put("data", dataMap);
|
||||
}
|
||||
|
||||
|
||||
/**
|
||||
* 千里聆解析字段内容处理
|
||||
*
|
||||
* @param obj
|
||||
* @return
|
||||
*/
|
||||
private Map<String, Object> parseQllJsonToMap(JSONObject obj, boolean isCard) {
|
||||
Map<String, Object> dataMap = new HashMap<>(16);
|
||||
// 姓名
|
||||
String xm = parseArray(obj.getJSONArray("姓名"));
|
||||
dataMap.put("xm", xm);
|
||||
// 电子邮箱
|
||||
String dzyx = parseArray(obj.getJSONArray("电子邮箱"));
|
||||
dataMap.put("dzyx", dzyx);
|
||||
// 手机号码
|
||||
String sjhm = parseArray(obj.getJSONArray("手机号"));
|
||||
dataMap.put("sjhm", sjhm);
|
||||
// 年龄
|
||||
String nl = parseArray(obj.getJSONArray("年龄"));
|
||||
dataMap.put("nl", nl);
|
||||
// 出生日期
|
||||
String csrq = parseArray(obj.getJSONArray("出生日期"));
|
||||
dataMap.put("csrq", parseDateObject(csrq));
|
||||
// 民族
|
||||
// 性别 默认为男
|
||||
String xb = "女".equals(parseArray(obj.getJSONArray("性别"))) ? "1" : "0";
|
||||
dataMap.put("xb", xb);
|
||||
// 体重(KG)
|
||||
// 身高(CM)
|
||||
// 籍贯
|
||||
dataMap.put("jg", parseArray(obj.getJSONArray("籍贯")));
|
||||
// 婚姻状况
|
||||
// 当前所在地
|
||||
dataMap.put("jzd", parseArray(obj.getJSONArray("现居住地")));
|
||||
// 政治面貌
|
||||
// 在职状态
|
||||
// 工作经验
|
||||
dataMap.put("gzjy", parseArray(obj.getJSONArray("工作经验")));
|
||||
// 最高学位
|
||||
List<Map<String, String>> zgxw = getBrowserArray(parseArray(obj.getJSONArray("最高学位")), this::getDegreeArray);
|
||||
dataMap.put("zgxw", zgxw);
|
||||
if (!isCard && CollectionUtils.isNotEmpty(zgxw)) {
|
||||
dataMap.put("zgxw", zgxw.stream().map(item -> item.get("id")).collect(Collectors.joining(",")));
|
||||
}
|
||||
// 最高学历
|
||||
List<Map<String, String>> zgxl = getBrowserArray(parseArray(obj.getJSONArray("最高学历")), this::getEducationLevelArray);
|
||||
dataMap.put("zgxl", zgxl);
|
||||
if (!isCard && CollectionUtils.isNotEmpty(zgxl)) {
|
||||
dataMap.put("zgxl", zgxl.stream().map(item -> item.get("id")).collect(Collectors.joining(",")));
|
||||
}
|
||||
|
||||
// 专业
|
||||
String zy = parseArray(obj.getJSONArray("专业"));
|
||||
dataMap.put("zy", zy);
|
||||
// 毕业院校
|
||||
String byyx = parseArray(obj.getJSONArray("毕业院校"));
|
||||
dataMap.put("byyx", byyx);
|
||||
// 期望税前月薪(K)
|
||||
String qwxz = parseArray(obj.getJSONArray("期望薪资"));
|
||||
dataMap.put("qwxz", qwxz);
|
||||
// 现税前月薪(K)
|
||||
// 自我评价
|
||||
String zwpj = parseArray(obj.getJSONArray("个人评价"));
|
||||
dataMap.put("zwpj", zwpj);
|
||||
// 民族
|
||||
dataMap.put("mz", parseArray(obj.getJSONArray("民族")));
|
||||
|
||||
|
||||
// 明细表数据
|
||||
// 教育经历
|
||||
JSONArray jyjl = obj.getJSONArray("学业信息");
|
||||
List<RecruitDataMap<Object>> studyList = new ArrayList<>();
|
||||
if (null != jyjl && jyjl.size() > 0) {
|
||||
for (int i = 0; i < jyjl.size(); i++) {
|
||||
JSONObject o = (JSONObject) jyjl.get(i);
|
||||
String studyDate = o.getString("就读时期");
|
||||
RecruitDataMap<Object> studyMap = new RecruitDataMap<>();
|
||||
studyMap.putAll(getDateRange(studyDate, true));
|
||||
studyMap.put("xxmc", o.getString("院校"));
|
||||
List<Map<String, String>> xl = getBrowserArray(o.getString("学历"), this::getEducationLevelArray);
|
||||
studyMap.put("xl", xl);
|
||||
if (!isCard && CollectionUtils.isNotEmpty(xl)) {
|
||||
studyMap.put("xl", xl.stream().map(item -> item.get("id")).collect(Collectors.joining(",")));
|
||||
}
|
||||
studyMap.put("zy", o.getString("专业"));
|
||||
studyList.add(studyMap);
|
||||
}
|
||||
}
|
||||
dataMap.put("jyjl", studyList);
|
||||
|
||||
// 工作经历
|
||||
JSONArray gzjl = obj.getJSONArray("工作信息");
|
||||
List<RecruitDataMap<Object>> workList = new ArrayList<>();
|
||||
if (null != gzjl && gzjl.size() > 0) {
|
||||
for (int i = 0; i < gzjl.size(); i++) {
|
||||
JSONObject o = (JSONObject) gzjl.get(i);
|
||||
String workDate = o.getString("工作时间");
|
||||
RecruitDataMap<Object> workMap = new RecruitDataMap<>();
|
||||
workMap.putAll(getDateRange(workDate, false));
|
||||
workMap.put("gsmc", o.getString("工作单位"));
|
||||
workMap.put("gw", o.getString("工作岗位"));
|
||||
workMap.put("gzzz", o.getString("工作内容"));
|
||||
workList.add(workMap);
|
||||
}
|
||||
}
|
||||
|
||||
dataMap.put("gzjl", workList);
|
||||
// 项目经验
|
||||
// 语言能力
|
||||
|
||||
|
||||
// 目前表单暂无字段
|
||||
//dataMap.put("wx", parseArray(obj.getJSONArray("微信")));
|
||||
//dataMap.put("qq", parseArray(obj.getJSONArray("QQ")));
|
||||
//dataMap.put("ah", parseArray(obj.getJSONArray("爱好")));
|
||||
//dataMap.put("bysj", parseArray(obj.getJSONArray("毕业时间")));
|
||||
//
|
||||
//
|
||||
//dataMap.put("zyjn", parseArray(obj.getJSONArray("专业技能")));
|
||||
//dataMap.put("sxjl", parseArray(obj.getJSONArray("实习经历")));
|
||||
//dataMap.put("yysp", parseArray(obj.getJSONArray("英语水平")));
|
||||
//dataMap.put("jnzs", parseArray(obj.getJSONArray("技能证书")));
|
||||
//dataMap.put("xyjl", parseArray(obj.getJSONArray("校园经历")));
|
||||
//dataMap.put("qwcsgw", parseArray(obj.getJSONArray("期望从事岗位")));
|
||||
//
|
||||
//dataMap.put("qwgzdd", parseArray(obj.getJSONArray("期望工作地点")));
|
||||
//dataMap.put("xmjl", parseArray(obj.getJSONArray("项目经历")));
|
||||
|
||||
return dataMap;
|
||||
}
|
||||
|
||||
|
||||
/**
|
||||
* @param resumeId
|
||||
* @return
|
||||
*/
|
||||
private String doQllPost(int resumeId) {
|
||||
String url = RecruitConstant.OCR_URL;
|
||||
String appId = RecruitConstant.APP_ID;
|
||||
String appSecret = RecruitConstant.APP_SECRET;
|
||||
if (StringUtils.isAnyBlank(url, appId, appSecret)) {
|
||||
throw new CustomizeRunTimeException("千里聆配置出错,请检查配置文件");
|
||||
}
|
||||
|
||||
long currentTime = System.currentTimeMillis();
|
||||
ImageFileManager manager = new ImageFileManager();
|
||||
manager.getImageFileInfoById(resumeId);
|
||||
|
||||
HttpPost postRequest = new HttpPost(url);
|
||||
postRequest.addHeader("sign", getSign(appId, appSecret, currentTime));
|
||||
postRequest.addHeader("appId", appId);
|
||||
postRequest.addHeader("timestamp", String.valueOf(currentTime));
|
||||
MultipartEntityBuilder builder = MultipartEntityBuilder.create();
|
||||
String fileName = manager.getImageFileName();
|
||||
builder.addTextBody("type", fileName.substring(fileName.lastIndexOf('.') + 1));
|
||||
builder.addBinaryBody("resume", manager.getInputStream(), ContentType.APPLICATION_OCTET_STREAM, manager.getImageFileName());
|
||||
HttpEntity entity = builder.build();
|
||||
postRequest.setEntity(entity);
|
||||
try {
|
||||
CloseableHttpClient httpClient = HttpClients.createDefault();
|
||||
CloseableHttpResponse response = httpClient.execute(postRequest);
|
||||
HttpEntity responseEntity = response.getEntity();
|
||||
return EntityUtils.toString(responseEntity);
|
||||
} catch (Exception e) {
|
||||
throw new CustomizeRunTimeException(e);
|
||||
}
|
||||
}
|
||||
|
||||
|
||||
/**
|
||||
* 千里聆签名
|
||||
*
|
||||
* @param appId 开发者AppId
|
||||
* @param appSecret 开发者appSecret
|
||||
* @param timestamp 当前时间戳(毫秒数)
|
||||
* @return
|
||||
*/
|
||||
private static String getSign(String appId, String appSecret, long timestamp) {
|
||||
if (appId != null && appId.length() != 0) {
|
||||
if (appSecret != null && appSecret.length() != 0) {
|
||||
try {
|
||||
MessageDigest md5 = MessageDigest.getInstance("MD5");
|
||||
md5.update(appId.getBytes());
|
||||
md5.update((timestamp + "").getBytes());
|
||||
md5.update(appSecret.getBytes());
|
||||
byte[] bytes = md5.digest();
|
||||
return (new BigInteger(1, bytes)).toString(16);
|
||||
} catch (NoSuchAlgorithmException var8) {
|
||||
throw new CustomizeRunTimeException("不支持的加密算法", var8);
|
||||
}
|
||||
} else {
|
||||
throw new CustomizeRunTimeException("appSecret不能为空");
|
||||
}
|
||||
} else {
|
||||
throw new CustomizeRunTimeException("appId不能为空");
|
||||
}
|
||||
}
|
||||
|
||||
/**
|
||||
* 文本转换
|
||||
*
|
||||
* @param ar
|
||||
* @return
|
||||
*/
|
||||
private String parseArray(JSONArray ar) {
|
||||
StringBuilder rs = new StringBuilder();
|
||||
if (ar != null && ar.size() > 0) {
|
||||
for (int i = 0; i < ar.size(); ++i) {
|
||||
if (i == ar.size() - 1) {
|
||||
rs.append(ar.get(i));
|
||||
} else {
|
||||
rs.append(ar.get(i)).append(",");
|
||||
}
|
||||
}
|
||||
}
|
||||
|
||||
return StringUtils.isBlank(rs) ? null : rs.toString();
|
||||
}
|
||||
|
||||
|
||||
/**
|
||||
* 转换日期对象
|
||||
*
|
||||
* @param value
|
||||
* @return
|
||||
*/
|
||||
private String parseDateObject(String value) {
|
||||
if (StringUtils.isBlank(value)) {
|
||||
return null;
|
||||
}
|
||||
DateFormat sdf = new SimpleDateFormat("yyyy-MM-dd");
|
||||
sdf.setLenient(false);
|
||||
try {
|
||||
sdf.parse(value);
|
||||
} catch (Exception e) {
|
||||
new BaseBean().writeLog("日期格式化失败", e);
|
||||
value = null;
|
||||
}
|
||||
return value;
|
||||
}
|
||||
|
||||
/**
|
||||
* 获取开始时间和结束时间
|
||||
*
|
||||
* @param date
|
||||
* @return
|
||||
*/
|
||||
private RecruitDataMap<Object> getDateRange(String date, boolean isStudy) {
|
||||
RecruitDataMap<Object> dataRangeMap = new RecruitDataMap<>();
|
||||
String[] split = date.split("-");
|
||||
if (split.length == 2) {
|
||||
String start = getFormatDate(split[0]);
|
||||
String end = getFormatDate(split[1]);
|
||||
if (start.length() == 4) {
|
||||
if (isStudy) {
|
||||
start += "-09-01";
|
||||
} else {
|
||||
start = "";
|
||||
}
|
||||
}
|
||||
if (end.length() == 4) {
|
||||
if (isStudy) {
|
||||
end += "-07-01";
|
||||
} else {
|
||||
end = "";
|
||||
}
|
||||
}
|
||||
|
||||
dataRangeMap.put("kssj", start);
|
||||
dataRangeMap.put("jssj", end);
|
||||
}
|
||||
return dataRangeMap;
|
||||
}
|
||||
|
||||
/**
|
||||
* 获取yyyy-MM-dd时间格式日期
|
||||
*
|
||||
* @param dateStr
|
||||
* @return
|
||||
*/
|
||||
private String getFormatDate(String dateStr) {
|
||||
dateStr = dateStr.replace(".", "-").replace("\\/", "-");
|
||||
if (dateStr.length() == 7) {
|
||||
return dateStr + "-01";
|
||||
} else if (dateStr.length() == 10) {
|
||||
return dateStr;
|
||||
} else if (dateStr.length() == 4) {
|
||||
return dateStr;
|
||||
}
|
||||
return "";
|
||||
}
|
||||
|
||||
/**
|
||||
* 构建学位字段信息
|
||||
*
|
||||
* @param text
|
||||
* @return
|
||||
*/
|
||||
private Map<String, String> getDegreeArray(String text) {
|
||||
Map<String, String> map = new HashMap<>(2);
|
||||
if (StringUtils.isNotBlank(text)) {
|
||||
String id = ModeBrowserCommonInfo.getDegreeId(text);
|
||||
if (StringUtils.isNotBlank(id)) {
|
||||
map.put("id", id);
|
||||
map.put("name", text);
|
||||
}
|
||||
}
|
||||
return map;
|
||||
}
|
||||
|
||||
/**
|
||||
* 构建浏览按钮字段信息格式
|
||||
*
|
||||
* @param text
|
||||
* @param fun
|
||||
* @return
|
||||
*/
|
||||
private List<Map<String, String>> getBrowserArray(String text, Function<String, Map<String, String>> fun) {
|
||||
List<Map<String, String>> list = new ArrayList<>();
|
||||
if (StringUtils.isNotBlank(text)) {
|
||||
String[] split = text.split(",");
|
||||
for (String s : split) {
|
||||
Map<String, String> apply = fun.apply(s);
|
||||
list.add(apply);
|
||||
}
|
||||
}
|
||||
|
||||
return list;
|
||||
}
|
||||
|
||||
/**
|
||||
* 构建学历字段信息
|
||||
*
|
||||
* @param text
|
||||
* @return
|
||||
*/
|
||||
private Map<String, String> getEducationLevelArray(String text) {
|
||||
Map<String, String> map = new HashMap<>(2);
|
||||
if (StringUtils.isNotBlank(text)) {
|
||||
String id = ModeBrowserCommonInfo.getEducationLevelId(text);
|
||||
if (StringUtils.isNotBlank(id)) {
|
||||
map.put("id", id);
|
||||
map.put("name", text);
|
||||
}
|
||||
}
|
||||
return map;
|
||||
}
|
||||
|
||||
|
||||
}
|
||||
|
|
@ -0,0 +1,62 @@
|
|||
package com.engine.recruit.service.impl;
|
||||
|
||||
import com.engine.core.impl.Service;
|
||||
import com.engine.integration.cmd.schedule.ImmediatelyRunCmd;
|
||||
import com.engine.recruit.exception.CustomizeRunTimeException;
|
||||
import com.engine.recruit.service.ResumeRemindService;
|
||||
import org.apache.commons.lang3.StringUtils;
|
||||
import weaver.general.Util;
|
||||
import weaver.interfaces.recruit.cronjob.ResumePushJob;
|
||||
import weaver.systeminfo.SystemEnv;
|
||||
|
||||
import java.util.HashMap;
|
||||
import java.util.Map;
|
||||
|
||||
/**
|
||||
* @author:dxfeng
|
||||
* @createTime: 2024/03/13
|
||||
* @version: 1.0
|
||||
*/
|
||||
public class ResumeRemindServiceImpl extends Service implements ResumeRemindService {
|
||||
@Override
|
||||
public Map<String, Object> doRemindJob(Map<String, Object> param) {
|
||||
String pointId = "ResumePushJob";
|
||||
HashMap<String, Boolean> locks = ImmediatelyRunCmd.locks;
|
||||
boolean checkLock = true;
|
||||
if (locks.containsKey(pointId)) {
|
||||
checkLock = locks.get(pointId);
|
||||
} else {
|
||||
locks.put(pointId, checkLock);
|
||||
}
|
||||
|
||||
String dateStr = Util.null2String(param.get("dateStr"));
|
||||
if (StringUtils.isNotBlank(dateStr)) {
|
||||
String[] split = dateStr.split(",");
|
||||
if (split.length == 2) {
|
||||
String startDate = split[0];
|
||||
String endDate = split[1];
|
||||
if (StringUtils.isNoneBlank(startDate, endDate)) {
|
||||
if (checkLock) {
|
||||
checkLock = false;
|
||||
locks.put(pointId, checkLock);
|
||||
try {
|
||||
new ResumePushJob(startDate, endDate).execute();
|
||||
} catch (Exception e) {
|
||||
throw new CustomizeRunTimeException("ResumePushJob计划任务执行失败", e);
|
||||
} finally {
|
||||
checkLock = true;
|
||||
locks.put(pointId, checkLock);
|
||||
}
|
||||
return null;
|
||||
} else {
|
||||
locks.put(pointId, false);
|
||||
throw new CustomizeRunTimeException(SystemEnv.getHtmlLabelName(532655, Util.getIntValue(user.getLanguage())));
|
||||
}
|
||||
}
|
||||
}
|
||||
} else {
|
||||
throw new CustomizeRunTimeException("请选择简历投递开始日期、结束日期");
|
||||
}
|
||||
throw new CustomizeRunTimeException("简历推送异常");
|
||||
}
|
||||
}
|
||||
|
|
@ -2,6 +2,7 @@ package com.engine.recruit.service.impl;
|
|||
|
||||
import com.engine.core.impl.Service;
|
||||
import com.engine.recruit.conn.RecruitRecordSet;
|
||||
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;
|
||||
|
|
@ -19,38 +20,42 @@ import java.util.Map;
|
|||
public class RpaJclServiceImpl extends Service implements RpaJclService {
|
||||
@Override
|
||||
public Map<String, Object> setEmailSetting(Map<String, Object> param) {
|
||||
String billId = Util.null2String(param.get("billId"));
|
||||
RecordSet rs = new RecordSet();
|
||||
rs.executeQuery("select * from uf_jcl_qllyxpz where id = ? ", billId);
|
||||
Map<String, Object> dataMap = RecruitRecordSet.getSingleRecordMap(rs);
|
||||
try {
|
||||
String billId = Util.null2String(param.get("billId"));
|
||||
RecordSet rs = new RecordSet();
|
||||
rs.executeQuery("select * from uf_jcl_qllyxpz where id = ? ", billId);
|
||||
Map<String, Object> dataMap = RecruitRecordSet.getSingleRecordMap(rs);
|
||||
|
||||
ERPAResumeSDKClient resumeSDKClient = ERPASDKClients.getResumeSDKClient();
|
||||
String userId = Util.null2String(dataMap.get("szr"));
|
||||
String status = Util.null2String(dataMap.get("zt"));
|
||||
String server = Util.null2String(dataMap.get("yjjsfwq"));
|
||||
String port = Util.null2String(dataMap.get("jsdk"));
|
||||
String protocol = Util.null2String(dataMap.get("csxy"));
|
||||
String site = Util.null2String(dataMap.get("yxdz"));
|
||||
String login = Util.null2String(dataMap.get("yxzh"));
|
||||
String password = Util.null2String(dataMap.get("yxsqmmm"));
|
||||
ERPAResumeSDKClient resumeSDKClient = ERPASDKClients.getResumeSDKClient();
|
||||
String userId = Util.null2String(dataMap.get("szr"));
|
||||
String status = Util.null2String(dataMap.get("zt"));
|
||||
String server = Util.null2String(dataMap.get("yjjsfwq"));
|
||||
String port = Util.null2String(dataMap.get("jsdk"));
|
||||
String protocol = Util.null2String(dataMap.get("csxy"));
|
||||
String site = Util.null2String(dataMap.get("yxdz"));
|
||||
String login = Util.null2String(dataMap.get("yxzh"));
|
||||
String password = Util.null2String(dataMap.get("yxsqmmm"));
|
||||
|
||||
ResumeEmailSetting emailSetting = new ResumeEmailSetting();
|
||||
ResumeEmailSetting emailSetting = new ResumeEmailSetting();
|
||||
|
||||
// 配置启用邮箱功能
|
||||
emailSetting.setSEMAILSTATUS(status);
|
||||
emailSetting.setSEMAILSERVER(server);
|
||||
emailSetting.setSEMAILPORT(port);
|
||||
emailSetting.setSEMAILPROTOCOL(protocol);
|
||||
//emailSetting.setSISSEND(isSend);
|
||||
emailSetting.setSEMAILSITE(site);
|
||||
emailSetting.setSEMAILLOGIN(login);
|
||||
emailSetting.setSEMAILPASSWORD(password);
|
||||
// 配置启用邮箱功能
|
||||
emailSetting.setSEMAILSTATUS(status);
|
||||
emailSetting.setSEMAILSERVER(server);
|
||||
emailSetting.setSEMAILPORT(port);
|
||||
emailSetting.setSEMAILPROTOCOL(protocol);
|
||||
//emailSetting.setSISSEND(isSend);
|
||||
emailSetting.setSEMAILSITE(site);
|
||||
emailSetting.setSEMAILLOGIN(login);
|
||||
emailSetting.setSEMAILPASSWORD(password);
|
||||
|
||||
// 禁用邮箱功能(只需要传递Status为0)
|
||||
// emailSetting.setSEMAILSTATUS("0");
|
||||
// 禁用邮箱功能(只需要传递Status为0)
|
||||
// emailSetting.setSEMAILSTATUS("0");
|
||||
|
||||
// 调用方法更新简历机器人采集设置(在千里聆中会更新目标用户机器人配置)
|
||||
resumeSDKClient.setEmailSetting(userId, emailSetting);
|
||||
// 调用方法更新简历机器人采集设置(在千里聆中会更新目标用户机器人配置)
|
||||
resumeSDKClient.setEmailSetting(userId, emailSetting);
|
||||
} catch (Exception e) {
|
||||
throw new CustomizeRunTimeException(e);
|
||||
}
|
||||
return null;
|
||||
}
|
||||
}
|
||||
|
|
|
|||
|
|
@ -25,7 +25,7 @@ public class TalentPoolServiceImpl extends Service implements TalentPoolService
|
|||
public Map<String, Object> removeBlacklist(Map<String, Object> param) {
|
||||
String ids = Util.null2String(param.get("ids"));
|
||||
if (StringUtils.isBlank(ids)) {
|
||||
throw new CustomizeRunTimeException("");
|
||||
throw new CustomizeRunTimeException("请至少选择一条数据");
|
||||
}
|
||||
RecordSet rs = new RecordSet();
|
||||
rs.executeUpdate("update uf_jcl_rck set sfjrhmd = 1 where id in (" + ids + ")");
|
||||
|
|
@ -56,11 +56,7 @@ public class TalentPoolServiceImpl extends Service implements TalentPoolService
|
|||
|
||||
String uuid = UUID.randomUUID().toString();
|
||||
insertDataMap.put("modeuuid", uuid);
|
||||
int formModeId = -1;
|
||||
rs.executeQuery("select id from modeinfo where formid =( select id from workflow_bill where tablename = 'uf_jcl_yppc' )");
|
||||
if (rs.next()) {
|
||||
formModeId = rs.getInt("id");
|
||||
}
|
||||
int formModeId = ApplicantCommonInfo.getModeIdByTableName("uf_jcl_yppc");
|
||||
insertDataMap.put("formmodeid", formModeId);
|
||||
RecruitRecordSet.buildModeInsertFields(insertDataMap, user.getUID());
|
||||
RecruitRecordSet.insertData(insertDataMap, "uf_jcl_yppc");
|
||||
|
|
|
|||
|
|
@ -0,0 +1,182 @@
|
|||
package com.engine.recruit.service.impl;
|
||||
|
||||
import cn.hutool.core.convert.Convert;
|
||||
import com.engine.core.impl.Service;
|
||||
import com.engine.recruit.conn.ApplicantCommonInfo;
|
||||
import com.engine.recruit.entity.common.ImportLog;
|
||||
import com.engine.recruit.exception.CustomizeRunTimeException;
|
||||
import com.engine.recruit.service.WrittenResultsService;
|
||||
import com.engine.recruit.util.ExcelUtil;
|
||||
import org.apache.commons.lang3.StringUtils;
|
||||
import org.apache.poi.xssf.usermodel.XSSFCell;
|
||||
import org.apache.poi.xssf.usermodel.XSSFRow;
|
||||
import org.apache.poi.xssf.usermodel.XSSFSheet;
|
||||
import org.apache.poi.xssf.usermodel.XSSFWorkbook;
|
||||
import weaver.conn.RecordSet;
|
||||
import weaver.file.ImageFileManager;
|
||||
|
||||
import java.io.IOException;
|
||||
import java.util.*;
|
||||
|
||||
/**
|
||||
* @author:dxfeng
|
||||
* @createTime: 2024/01/24
|
||||
* @version: 1.0
|
||||
*/
|
||||
public class WrittenResultsServiceImpl extends Service implements WrittenResultsService {
|
||||
@Override
|
||||
public Map<String, Object> getFormCondition() {
|
||||
return null;
|
||||
}
|
||||
|
||||
@Override
|
||||
public Map<String, Object> importExcel(Map<String, Object> params) {
|
||||
Integer excelId = Convert.toInt(params.get("excel"));
|
||||
ImageFileManager manager = new ImageFileManager();
|
||||
manager.getImageFileInfoById(excelId);
|
||||
|
||||
XSSFWorkbook workbook;
|
||||
try {
|
||||
workbook = new XSSFWorkbook(manager.getInputStream());
|
||||
} catch (IOException e) {
|
||||
throw new CustomizeRunTimeException(e);
|
||||
}
|
||||
// 当前sheet
|
||||
XSSFSheet sheetAt = workbook.getSheetAt(0);
|
||||
// 最后一行
|
||||
int lastRowNum = sheetAt.getLastRowNum();
|
||||
if (lastRowNum < 1) {
|
||||
throw new CustomizeRunTimeException("导入数据为空");
|
||||
}
|
||||
// 最后一列
|
||||
short lastCellNum = sheetAt.getRow(0).getLastCellNum();
|
||||
Map<String, Integer> keyMap = new HashMap<>(16);
|
||||
// 标题行
|
||||
for (int cellIndex = 0; cellIndex < lastCellNum; cellIndex++) {
|
||||
XSSFRow row = sheetAt.getRow(0);
|
||||
if (row == null) {
|
||||
throw new CustomizeRunTimeException("表单字段名称获取失败,请检查Excel文件");
|
||||
}
|
||||
XSSFCell cell = row.getCell((short) cellIndex);
|
||||
String cellValue = ExcelUtil.getCellValue(cell).trim();
|
||||
keyMap.put(cellValue, cellIndex);
|
||||
}
|
||||
// 校验必填列
|
||||
checkRequiredFields(keyMap, "ID", "笔试成绩", "笔试结果");
|
||||
|
||||
Integer idCellNum = keyMap.get("ID");
|
||||
Integer scoreCellNum = keyMap.get("笔试成绩");
|
||||
Integer resultCellNum = keyMap.get("笔试结果");
|
||||
|
||||
return updateWrittenResult(sheetAt, lastRowNum, idCellNum, scoreCellNum, resultCellNum);
|
||||
}
|
||||
|
||||
|
||||
/**
|
||||
* 更新笔试结果
|
||||
*
|
||||
* @param sheetAt
|
||||
* @param lastRowNum
|
||||
* @param idCellNum
|
||||
* @param scoreCellNum
|
||||
* @param resultCellNum
|
||||
* @return
|
||||
*/
|
||||
private Map<String, Object> updateWrittenResult(XSSFSheet sheetAt, int lastRowNum, Integer idCellNum, Integer scoreCellNum, Integer resultCellNum) {
|
||||
Map<String, Object> resultMap = new HashMap<>(4);
|
||||
Integer allCount = 0;
|
||||
Integer successCount = 0;
|
||||
Integer failCount = 0;
|
||||
List<ImportLog> logList = new ArrayList<>();
|
||||
RecordSet rs = new RecordSet();
|
||||
for (int rowIndex = 1; rowIndex <= lastRowNum; rowIndex++) {
|
||||
allCount++;
|
||||
XSSFRow row = sheetAt.getRow(rowIndex);
|
||||
if (null == row) {
|
||||
continue;
|
||||
}
|
||||
List<String> descriptionList = new ArrayList<>();
|
||||
boolean success = true;
|
||||
XSSFCell idCell = row.getCell(idCellNum);
|
||||
String ideCellValue = ExcelUtil.getCellValue(idCell).trim();
|
||||
if (StringUtils.isBlank(ideCellValue)) {
|
||||
descriptionList.add("[ID]为空");
|
||||
success = false;
|
||||
}
|
||||
XSSFCell scoreCell = row.getCell(scoreCellNum);
|
||||
String scoreCellValue = ExcelUtil.getCellValue(scoreCell).trim();
|
||||
if (StringUtils.isBlank(scoreCellValue)) {
|
||||
descriptionList.add("[笔试成绩]为空");
|
||||
success = false;
|
||||
}
|
||||
XSSFCell resultCell = row.getCell(resultCellNum);
|
||||
String resultCellValue = ExcelUtil.getCellValue(resultCell).trim();
|
||||
if (StringUtils.isBlank(resultCellValue)) {
|
||||
descriptionList.add("[笔试结果]为空");
|
||||
success = false;
|
||||
}
|
||||
if (StringUtils.isNotBlank(resultCellValue)) {
|
||||
resultCellValue = convertResultValue(resultCellValue);
|
||||
if (StringUtils.isBlank(resultCellValue)) {
|
||||
descriptionList.add("[笔试结果]转换失败");
|
||||
success = false;
|
||||
}
|
||||
}
|
||||
|
||||
// 更新笔试成绩
|
||||
if (success) {
|
||||
rs.executeUpdate("update uf_jcl_bs set bscj = ? ,bsjg = ? where id = ? ", scoreCellValue, resultCellValue, ideCellValue);
|
||||
String exceptionMsg = rs.getExceptionMsg();
|
||||
if (StringUtils.isNotBlank(exceptionMsg)) {
|
||||
descriptionList.add(exceptionMsg);
|
||||
success = false;
|
||||
}
|
||||
}
|
||||
if (success) {
|
||||
successCount++;
|
||||
} else {
|
||||
failCount++;
|
||||
}
|
||||
|
||||
ImportLog importLog = ImportLog.builder().
|
||||
rowIndex(rowIndex + 1) // 对应Excel的行,从1开始累加
|
||||
.description(success ? "导入成功" : StringUtils.join(descriptionList, ","))
|
||||
.status(String.valueOf(success))
|
||||
.build();
|
||||
logList.add(importLog);
|
||||
}
|
||||
resultMap.put("log", logList);
|
||||
resultMap.put("allCount", allCount);
|
||||
resultMap.put("successCount", successCount);
|
||||
resultMap.put("failCount", failCount);
|
||||
return resultMap;
|
||||
}
|
||||
|
||||
|
||||
/**
|
||||
* 标题行、校验必填列
|
||||
*
|
||||
* @param keyMap 字段集合
|
||||
* @param requiredFields 必填字段
|
||||
*/
|
||||
private void checkRequiredFields(Map<String, Integer> keyMap, String... requiredFields) {
|
||||
// 校验必填列
|
||||
Set<String> keySet = keyMap.keySet();
|
||||
for (String field : requiredFields) {
|
||||
if (!keySet.contains(field)) {
|
||||
throw new CustomizeRunTimeException("未获取到必填列[" + field + "]");
|
||||
}
|
||||
}
|
||||
}
|
||||
|
||||
/**
|
||||
* 转化笔试结果的值
|
||||
*
|
||||
* @param resultCellValue
|
||||
* @return
|
||||
*/
|
||||
private String convertResultValue(String resultCellValue) {
|
||||
int formId = ApplicantCommonInfo.getFormIdByTableName("uf_jcl_bs");
|
||||
return ApplicantCommonInfo.getSelectValue(String.valueOf(formId), "bsjg", resultCellValue);
|
||||
}
|
||||
}
|
||||
|
|
@ -1,9 +1,12 @@
|
|||
package com.engine.recruit.thread;
|
||||
|
||||
import cn.hutool.core.convert.Convert;
|
||||
import com.alibaba.fastjson.JSON;
|
||||
import com.engine.recruit.conn.ApplicantCommonInfo;
|
||||
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.enums.ApplicationStatusEnum;
|
||||
import com.engine.recruit.enums.CommonBrowserTypeEnum;
|
||||
import com.engine.recruit.enums.HighestDegreeEnum;
|
||||
|
|
@ -16,6 +19,8 @@ import weaver.common.DateUtil;
|
|||
import weaver.conn.RecordSet;
|
||||
import weaver.erpa.apps.entity.application.resume.dto.*;
|
||||
import weaver.formmode.recruit.modeexpand.util.RecruitModeUtil;
|
||||
import weaver.general.BaseBean;
|
||||
import weaver.general.Util;
|
||||
import weaver.hrm.User;
|
||||
|
||||
import java.util.ArrayList;
|
||||
|
|
@ -31,7 +36,7 @@ import java.util.Map;
|
|||
public class SdkResumeSavedThread extends LocalRunnable {
|
||||
|
||||
private ResumeMqMessage resumeMqMessage;
|
||||
private static final int SEC_CATEGORY = Convert.toInt(RecruitModeUtil.getRecruitPropValue("APPLICANTS_RESUMES_CATEGORY"));
|
||||
private static final int SEC_CATEGORY = Convert.toInt(RecruitConstant.APPLICANTS_RESUMES_CATEGORY);
|
||||
|
||||
public SdkResumeSavedThread(ResumeMqMessage resumeMqMessage) {
|
||||
this.resumeMqMessage = resumeMqMessage;
|
||||
|
|
@ -49,6 +54,9 @@ public class SdkResumeSavedThread extends LocalRunnable {
|
|||
* @throws Exception
|
||||
*/
|
||||
private void parseResume(ResumeMqMessage resumeMqMessage) throws Exception {
|
||||
BaseBean baseBean = new BaseBean();
|
||||
baseBean.writeLog("千里聆SDK简历开始解析------");
|
||||
baseBean.writeLog("resumeMqMessage===" + JSON.toJSONString(resumeMqMessage));
|
||||
String userId = resumeMqMessage.getUserId();
|
||||
User user = new User();
|
||||
if (StringUtils.isNotBlank(userId)) {
|
||||
|
|
@ -83,60 +91,77 @@ public class SdkResumeSavedThread extends LocalRunnable {
|
|||
params.put("qlljl", resumeId);
|
||||
// 判断是否有发布职位信息,如有发布职位信息,完善招聘流程信息,并指定为待分配状态
|
||||
String positionId = PositionCommonInfo.getPositionIdByQll(resumeInfoDto.getJobId());
|
||||
String zt = ApplicationStatusEnum.DISTRIBUTION.getValue();
|
||||
// 应聘职位
|
||||
if (StringUtils.isNotBlank(positionId)) {
|
||||
params.put("ypzw", "positionId");
|
||||
params.put("zplc", PositionCommonInfo.getRecruitFlowId(positionId));
|
||||
params.put("zt", ApplicationStatusEnum.CANDIDATE.getValue());
|
||||
} else {
|
||||
// 状态,指定待分配
|
||||
params.put("zt", ApplicationStatusEnum.DISTRIBUTION.getValue());
|
||||
String flowId = PositionCommonInfo.getRecruitFlowId(positionId);
|
||||
Map<String, String> initialStage = ApplicantCommonInfo.getInitialStage(flowId);
|
||||
if (null != initialStage) {
|
||||
String zpjd = initialStage.get("zpjd");
|
||||
String dqypjd = initialStage.get("jdlx");
|
||||
if (StringUtils.isNotBlank(zpjd) && StringUtils.isNotBlank(dqypjd)) {
|
||||
params.put("ypzw", positionId);
|
||||
params.put("zplc", flowId);
|
||||
params.put("zpjd", zpjd);
|
||||
params.put("dqypjd", dqypjd);
|
||||
zt = ApplicationStatusEnum.CANDIDATE.getValue();
|
||||
}
|
||||
}
|
||||
}
|
||||
// 应聘状态
|
||||
params.put("zt", zt);
|
||||
|
||||
// 判断简历是否重复,插入主表
|
||||
int mainId = CheckRepeatResume.getInstance().insertResumeMainTable(params);
|
||||
CheckRepeatResume instance = CheckRepeatResume.getInstance();
|
||||
Map<String, Object> checkMap = instance.insertResumeAndReturn(params);
|
||||
String mainId = Util.null2String(checkMap.get("mainId"));
|
||||
String sourceId = Util.null2String(checkMap.get("sourceId"));
|
||||
|
||||
Thread.sleep(1000);
|
||||
if (-1 == mainId) {
|
||||
if ("-1".equals(mainId)) {
|
||||
return;
|
||||
}
|
||||
|
||||
RecordSet rs = new RecordSet();
|
||||
// 插入明细表数据
|
||||
List<RecruitDataMap<Object>> jyjl = new ArrayList<>();
|
||||
List<ResumeInfoEducationExperienceDto> educationExperience = resumeInfoDto.getEducationExperience();
|
||||
String sql = "insert into uf_jcl_yppc_dt1 (mainId,xxmc,xl,zy,kssj,jssj) values (?,?,?,?,?,?) ";
|
||||
for (ResumeInfoEducationExperienceDto educationExperienceDto : educationExperience) {
|
||||
List<Object> data = new ArrayList<>();
|
||||
data.add(mainId);
|
||||
data.add(educationExperienceDto.getSchoolName());
|
||||
data.add(HighestDegreeEnum.getDegreeId(educationExperienceDto.getDegree()).getId());
|
||||
data.add(educationExperienceDto.getMajor());
|
||||
data.add(DateUtil.getDate(educationExperienceDto.getBeginTime()));
|
||||
data.add(DateUtil.getDate(educationExperienceDto.getEndTime()));
|
||||
rs.executeUpdate(sql, data);
|
||||
RecruitDataMap<Object> map = new RecruitDataMap<>();
|
||||
map.put("xxmc", educationExperienceDto.getSchoolName());
|
||||
map.put("xl", HighestDegreeEnum.getDegreeId(educationExperienceDto.getDegree()).getId());
|
||||
map.put("zy", educationExperienceDto.getMajor());
|
||||
map.put("kssj", DateUtil.getDate(educationExperienceDto.getBeginTime()));
|
||||
map.put("jssj", DateUtil.getDate(educationExperienceDto.getEndTime()));
|
||||
jyjl.add(map);
|
||||
}
|
||||
sql = "insert into uf_jcl_yppc_dt2 (mainId,gsmc,gw,gzzz,kssj,jssj) values (?,?,?,?,?,?) ";
|
||||
instance.insertResumeDetailTable(jyjl, "uf_jcl_yppc_dt1", mainId, sourceId);
|
||||
|
||||
List<RecruitDataMap<Object>> gzjl = new ArrayList<>();
|
||||
List<ResumeInfoWorkExperienceDto> workExperience = resumeInfoDto.getWorkExperience();
|
||||
for (ResumeInfoWorkExperienceDto workExperienceDto : workExperience) {
|
||||
List<Object> data = new ArrayList<>();
|
||||
data.add(mainId);
|
||||
data.add(workExperienceDto.getCompanyName());
|
||||
data.add(workExperienceDto.getJobName());
|
||||
data.add(workExperienceDto.getContent());
|
||||
data.add(DateUtil.getDate(workExperienceDto.getBeginTime()));
|
||||
data.add(DateUtil.getDate(workExperienceDto.getEndTime()));
|
||||
rs.executeUpdate(sql, data);
|
||||
RecruitDataMap<Object> map = new RecruitDataMap<>();
|
||||
map.put("gsmc", workExperienceDto.getCompanyName());
|
||||
map.put("gw", workExperienceDto.getJobName());
|
||||
map.put("gzzz", workExperienceDto.getContent());
|
||||
map.put("kssj", DateUtil.getDate(workExperienceDto.getBeginTime()));
|
||||
map.put("jssj", DateUtil.getDate(workExperienceDto.getEndTime()));
|
||||
gzjl.add(map);
|
||||
|
||||
}
|
||||
sql = "insert into uf_jcl_yppc_dt3 (mainId,xmmc,xmms,kssj,jssj) values (?,?,?,?,?) ";
|
||||
instance.insertResumeDetailTable(gzjl, "uf_jcl_yppc_dt2", mainId, sourceId);
|
||||
|
||||
List<RecruitDataMap<Object>> xmjl = new ArrayList<>();
|
||||
List<ResumeInfoProjectExperienceDto> projectExperience = resumeInfoDto.getProjectExperience();
|
||||
for (ResumeInfoProjectExperienceDto projectExperienceDto : projectExperience) {
|
||||
List<Object> data = new ArrayList<>();
|
||||
data.add(mainId);
|
||||
data.add(projectExperienceDto.getProjectName());
|
||||
data.add(projectExperienceDto.getContent());
|
||||
data.add(DateUtil.getDate(projectExperienceDto.getBeginTime()));
|
||||
data.add(DateUtil.getDate(projectExperienceDto.getEndTime()));
|
||||
rs.executeUpdate(sql, data);
|
||||
RecruitDataMap<Object> map = new RecruitDataMap<>();
|
||||
map.put("xmmc", projectExperienceDto.getProjectName());
|
||||
map.put("xmms", projectExperienceDto.getContent());
|
||||
map.put("kssj", DateUtil.getDate(projectExperienceDto.getBeginTime()));
|
||||
map.put("jssj", DateUtil.getDate(projectExperienceDto.getEndTime()));
|
||||
xmjl.add(map);
|
||||
}
|
||||
instance.insertResumeDetailTable(xmjl, "uf_jcl_yppc_dt3", mainId, sourceId);
|
||||
|
||||
}
|
||||
|
||||
|
||||
|
|
@ -184,14 +209,19 @@ public class SdkResumeSavedThread extends LocalRunnable {
|
|||
* @return
|
||||
*/
|
||||
private String convertStreamToE9DocId(Long resumeFileId, User user) {
|
||||
BaseBean baseBean = new BaseBean();
|
||||
baseBean.writeLog("解析千里聆SDK原始简历,resumeFileId===" + resumeFileId);
|
||||
List<Integer> docIdList = new ArrayList<>();
|
||||
ERPAResumeSDKClient client = ERPASDKClients.getResumeSDKClient();
|
||||
client.start();
|
||||
client.downloadResumeFile(resumeFileId, (fileName, stream) -> {
|
||||
try {
|
||||
baseBean.writeLog("解析千里聆SDK原始简历,fileName===" + fileName);
|
||||
int imageFileId = RecruitModeUtil.generateImageFileId(stream, fileName);
|
||||
baseBean.writeLog("解析千里聆SDK原始简历,imageFileId===" + imageFileId);
|
||||
docIdList.add(RecruitModeUtil.createDocId(SEC_CATEGORY, imageFileId, user));
|
||||
} catch (Exception e) {
|
||||
baseBean.writeLog("解析千里聆SDK原始简历失败", e);
|
||||
throw new RuntimeException(e);
|
||||
}
|
||||
});
|
||||
|
|
|
|||
|
|
@ -0,0 +1,54 @@
|
|||
package com.engine.recruit.util;
|
||||
|
||||
import org.apache.poi.hssf.usermodel.HSSFDateUtil;
|
||||
import org.apache.poi.xssf.usermodel.XSSFCell;
|
||||
import weaver.general.Util;
|
||||
|
||||
import java.text.SimpleDateFormat;
|
||||
|
||||
/**
|
||||
* @author:dxfeng
|
||||
* @createTime: 2024/01/26
|
||||
* @version: 1.0
|
||||
*/
|
||||
public class ExcelUtil {
|
||||
/**
|
||||
* 获取单元格内容
|
||||
*
|
||||
* @param cell
|
||||
* @return
|
||||
*/
|
||||
public static String getCellValue(XSSFCell cell) {
|
||||
String cellValue = "";
|
||||
if (cell == null) {
|
||||
return "";
|
||||
}
|
||||
switch (cell.getCellType()) {
|
||||
case BOOLEAN:
|
||||
cellValue = String.valueOf(cell.getBooleanCellValue());
|
||||
break;
|
||||
case NUMERIC:
|
||||
if (HSSFDateUtil.isCellDateFormatted(cell)) {
|
||||
// 先看是否是日期格式 读取日期格式
|
||||
SimpleDateFormat sft = new SimpleDateFormat("yyyy-MM-dd");
|
||||
cellValue = sft.format(cell.getDateCellValue());
|
||||
} else {
|
||||
// 读取数字
|
||||
cellValue = String.valueOf(new Double(cell.getNumericCellValue()));
|
||||
}
|
||||
break;
|
||||
case FORMULA:
|
||||
// 读取公式
|
||||
cellValue = cell.getCellFormula();
|
||||
break;
|
||||
case STRING:
|
||||
// 读取String
|
||||
cellValue = cell.getStringCellValue();
|
||||
break;
|
||||
default:
|
||||
break;
|
||||
}
|
||||
cellValue = Util.toHtmlForHrm(cellValue);
|
||||
return cellValue;
|
||||
}
|
||||
}
|
||||
|
|
@ -39,9 +39,11 @@ public class RecruitFlowUtil {
|
|||
String[] paramPairs = urlString.split("&");
|
||||
for (String paramPair : paramPairs) {
|
||||
String[] keyValue = paramPair.split("=");
|
||||
String key = URLDecoder.decode(keyValue[0], "UTF-8");
|
||||
String value = URLDecoder.decode(keyValue[1], "UTF-8");
|
||||
params.put(key, value);
|
||||
if (keyValue.length == 2) {
|
||||
String key = URLDecoder.decode(keyValue[0], "UTF-8");
|
||||
String value = URLDecoder.decode(keyValue[1], "UTF-8");
|
||||
params.put(key, value);
|
||||
}
|
||||
}
|
||||
}
|
||||
} catch (Exception e) {
|
||||
|
|
|
|||
|
|
@ -0,0 +1,357 @@
|
|||
package com.engine.recruit.util;
|
||||
|
||||
import com.api.browser.bean.BrowserBean;
|
||||
import com.api.browser.bean.SearchConditionItem;
|
||||
import com.api.browser.bean.SearchConditionOption;
|
||||
import com.api.browser.util.ConditionFactory;
|
||||
import com.api.browser.util.ConditionType;
|
||||
import weaver.hrm.User;
|
||||
import weaver.integration.util.ConstantsUtil;
|
||||
|
||||
import java.util.ArrayList;
|
||||
import java.util.HashMap;
|
||||
import java.util.List;
|
||||
import java.util.Map;
|
||||
|
||||
|
||||
/**
|
||||
* @Author dxfeng
|
||||
* @description:
|
||||
* @Date 2024/1/24
|
||||
* @Version V1.0
|
||||
**/
|
||||
@Deprecated
|
||||
public class RecruitFormItemUtil {
|
||||
|
||||
/**
|
||||
* 下拉框
|
||||
*
|
||||
* @param user
|
||||
* @param selectOptions
|
||||
* @param colSpan
|
||||
* @param fieldcol
|
||||
* @param labelcol
|
||||
* @param isQuickSearch
|
||||
* @param label
|
||||
* @return
|
||||
*/
|
||||
public static SearchConditionItem selectItem(User user, List<SearchConditionOption> selectOptions, int colSpan, int fieldcol,
|
||||
int labelcol, boolean isQuickSearch, String label, String name) {
|
||||
ConditionFactory conditionFactory = new ConditionFactory(user);
|
||||
SearchConditionItem select = conditionFactory.createCondition(ConditionType.SELECT, 502327, name);
|
||||
select.setOptions(selectOptions);
|
||||
select.setColSpan(colSpan);
|
||||
select.setFieldcol(fieldcol);
|
||||
select.setLabelcol(labelcol);
|
||||
select.setIsQuickSearch(isQuickSearch);
|
||||
select.setLabel(label);
|
||||
return select;
|
||||
}
|
||||
|
||||
|
||||
/**
|
||||
* checkbox
|
||||
*
|
||||
* @param user
|
||||
* @param colSpan
|
||||
* @param fieldcol
|
||||
* @param viewAttr
|
||||
* @param isQuickSearch
|
||||
* @param label
|
||||
* @param name
|
||||
* @return
|
||||
*/
|
||||
public static SearchConditionItem checkboxItem(User user, int colSpan, int fieldcol,
|
||||
int viewAttr, boolean isQuickSearch, String label, String name) {
|
||||
ConditionFactory conditionFactory = new ConditionFactory(user);
|
||||
SearchConditionItem checkbox = conditionFactory.createCondition(ConditionType.CHECKBOX, 502327, name);
|
||||
checkbox.setColSpan(colSpan);
|
||||
checkbox.setFieldcol(fieldcol);
|
||||
checkbox.setViewAttr(viewAttr);
|
||||
checkbox.setIsQuickSearch(isQuickSearch);
|
||||
checkbox.setLabel(label);
|
||||
return checkbox;
|
||||
}
|
||||
|
||||
|
||||
/**
|
||||
* 输入框数字
|
||||
*
|
||||
* @param user
|
||||
* @param colSpan
|
||||
* @param fieldcol
|
||||
* @param viewAttr
|
||||
* @param label
|
||||
* @return
|
||||
*/
|
||||
public static SearchConditionItem inputNumberItem(User user, int colSpan, int fieldcol,
|
||||
int viewAttr, String label, String name) {
|
||||
ConditionFactory conditionFactory = new ConditionFactory(user);
|
||||
SearchConditionItem inputnumber = conditionFactory.createCondition(ConditionType.INPUTNUMBER, 502327, name);
|
||||
inputnumber.setColSpan(colSpan);
|
||||
inputnumber.setFieldcol(fieldcol);
|
||||
inputnumber.setViewAttr(viewAttr);
|
||||
inputnumber.setLabel(label);
|
||||
return inputnumber;
|
||||
}
|
||||
|
||||
|
||||
/**
|
||||
* 输入框文本
|
||||
*
|
||||
* @param user
|
||||
* @param colSpan
|
||||
* @param fieldcol
|
||||
* @param viewAttr
|
||||
* @param length
|
||||
* @param label
|
||||
* @return
|
||||
*/
|
||||
public static SearchConditionItem inputItem(User user, int colSpan, int fieldcol,
|
||||
int viewAttr, int length, String label, String name) {
|
||||
ConditionFactory conditionFactory = new ConditionFactory(user);
|
||||
SearchConditionItem input = conditionFactory.createCondition(ConditionType.INPUT, 25034, name);
|
||||
input.setColSpan(colSpan);
|
||||
input.setFieldcol(fieldcol);
|
||||
input.setViewAttr(viewAttr);
|
||||
input.setLength(length);
|
||||
input.setLabel(label);
|
||||
return input;
|
||||
}
|
||||
|
||||
public static SearchConditionItem uploadItem(User user, int colSpan, int fieldcol,
|
||||
int viewAttr, int length, String label, String name,int maxUploadSize,int maxFilesNumber,String limitType) {
|
||||
ConditionFactory conditionFactory = new ConditionFactory(user);
|
||||
SearchConditionItem upload = conditionFactory.createCondition(ConditionType.UPLOAD, 25034, name);
|
||||
upload.setColSpan(colSpan);
|
||||
upload.setFieldcol(fieldcol);
|
||||
upload.setViewAttr(viewAttr);
|
||||
upload.setLength(length);
|
||||
upload.setLabel(label);
|
||||
upload.setUploadUrl(ConstantsUtil.INTEGRATION_DATASOURCE_UPLOADFILE);
|
||||
upload.setCategory("string");
|
||||
upload.setMultiSelection(false);
|
||||
Map<String, Object> otherParams = new HashMap<>();
|
||||
otherParams.put("maxUploadSize", maxUploadSize);
|
||||
otherParams.put("autoUpload", true);
|
||||
otherParams.put("limitType", limitType);
|
||||
upload.setOtherParams(otherParams);
|
||||
upload.setMaxFilesNumber(maxFilesNumber);
|
||||
upload.setViewAttr(viewAttr);
|
||||
if (viewAttr == 3) {
|
||||
upload.setRules("required");
|
||||
}
|
||||
return upload;
|
||||
}
|
||||
|
||||
|
||||
/**
|
||||
* 浏览按钮
|
||||
*
|
||||
* @param user
|
||||
* @param colSpan
|
||||
* @param fieldcol
|
||||
* @param viewAttr
|
||||
* @param isQuickSearch
|
||||
* @param label
|
||||
* @param type
|
||||
* @param name
|
||||
* @param fieldDbType 数据展现集成标识
|
||||
* @return
|
||||
*/
|
||||
public static SearchConditionItem browserItem(User user, int colSpan, int fieldcol,
|
||||
int viewAttr, boolean isQuickSearch, String label, String type, String name, String fieldDbType) {
|
||||
ConditionFactory conditionFactory = new ConditionFactory(user);
|
||||
SearchConditionItem browser = conditionFactory.createCondition(ConditionType.BROWSER, 502327, name, type);
|
||||
browser.setColSpan(colSpan);
|
||||
browser.setFieldcol(fieldcol);
|
||||
browser.setViewAttr(viewAttr);
|
||||
browser.setIsQuickSearch(isQuickSearch);
|
||||
browser.setLabel(label);
|
||||
if ("161".equals(type) || "162".equals(type)) {
|
||||
fieldDbType = "browser." + fieldDbType;
|
||||
BrowserBean browserBean = new BrowserBean();
|
||||
// completeParams
|
||||
Map<String, Object> completeMap = new HashMap<>();
|
||||
completeMap.put("f_weaver_belongto_usertype", 0);
|
||||
completeMap.put("type", type);
|
||||
completeMap.put("fielddbtype", fieldDbType);
|
||||
browserBean.setCompleteParams(completeMap);
|
||||
// conditionDataParams
|
||||
Map<java.lang.String, Object> conditionDataMap = new HashMap<>();
|
||||
conditionDataMap.put("f_weaver_belongto_usertype", 0);
|
||||
conditionDataMap.put("type", fieldDbType);
|
||||
conditionDataMap.put("fielddbtype", fieldDbType);
|
||||
browserBean.setConditionDataParams(conditionDataMap);
|
||||
// dataParams
|
||||
Map<java.lang.String, Object> dataMap = new HashMap<>();
|
||||
dataMap.put("f_weaver_belongto_usertype", 0);
|
||||
dataMap.put("type", fieldDbType);
|
||||
browserBean.setDataParams(dataMap);
|
||||
// destDataParams
|
||||
Map<java.lang.String, Object> destDataMap = new HashMap<>();
|
||||
destDataMap.put("f_weaver_belongto_usertype", 0);
|
||||
destDataMap.put("type", fieldDbType);
|
||||
browserBean.setDestDataParams(destDataMap);
|
||||
|
||||
browserBean.setLinkUrl("");
|
||||
browserBean.setMobileLinkUrl("");
|
||||
browserBean.setPageSize(10);
|
||||
browserBean.setScrollx(true);
|
||||
browserBean.setTitle(label);
|
||||
browserBean.setType(type);
|
||||
|
||||
browser.setBrowserConditionParam(browserBean);
|
||||
if ("162".equals(type)) {
|
||||
HashMap<String, Object> otherMap = new HashMap<>();
|
||||
otherMap.put("isMultCheckbox", "true");
|
||||
otherMap.put("icon", "icon-coms-integration");
|
||||
browser.setOtherParams(otherMap);
|
||||
}
|
||||
}
|
||||
return browser;
|
||||
}
|
||||
|
||||
|
||||
/**
|
||||
* 日期区间
|
||||
*
|
||||
* @param user
|
||||
* @param colSpan
|
||||
* @param fieldcol
|
||||
* @param viewAttr
|
||||
* @param label
|
||||
* @return
|
||||
*/
|
||||
public static SearchConditionItem rangeDateItem(User user, int colSpan, int fieldcol, int viewAttr
|
||||
, String label, String name1, String name2) {
|
||||
ConditionFactory conditionFactory = new ConditionFactory(user);
|
||||
SearchConditionItem rangeDate = conditionFactory.createCondition(ConditionType.TIMEPICKER, 502327, new String[]{name1, name2});
|
||||
rangeDate.setColSpan(colSpan);
|
||||
rangeDate.setFieldcol(fieldcol);
|
||||
rangeDate.setViewAttr(viewAttr);
|
||||
rangeDate.setLabel(label);
|
||||
return rangeDate;
|
||||
}
|
||||
|
||||
|
||||
/**
|
||||
* 多行文本框
|
||||
*
|
||||
* @param user
|
||||
* @param colSpan
|
||||
* @param fieldcol
|
||||
* @param isQuickSearch
|
||||
* @param viewAttr
|
||||
* @param length
|
||||
* @param label
|
||||
* @param name
|
||||
* @return
|
||||
*/
|
||||
public static SearchConditionItem textareaItem(User user, int colSpan, int fieldcol, boolean isQuickSearch,
|
||||
int viewAttr, int length, String label, String name) {
|
||||
ConditionFactory conditionFactory = new ConditionFactory(user);
|
||||
SearchConditionItem textarea = conditionFactory.createCondition(ConditionType.TEXTAREA, 502227, name);
|
||||
textarea.setColSpan(colSpan);
|
||||
textarea.setFieldcol(fieldcol);
|
||||
textarea.setIsQuickSearch(isQuickSearch);
|
||||
textarea.setViewAttr(viewAttr);
|
||||
textarea.setLength(length);
|
||||
textarea.setLabel(label);
|
||||
|
||||
return textarea;
|
||||
}
|
||||
|
||||
|
||||
/**
|
||||
* 日期组合
|
||||
*
|
||||
* @param user
|
||||
* @param colSpan
|
||||
* @param fieldcol
|
||||
* @param isQuickSearch
|
||||
* @param viewAttr
|
||||
* @param label
|
||||
* @param name
|
||||
* @return
|
||||
*/
|
||||
public static SearchConditionItem dateItem(User user, int colSpan, int fieldcol, boolean isQuickSearch,
|
||||
int viewAttr, String label, String name) {
|
||||
ConditionFactory conditionFactory = new ConditionFactory(user);
|
||||
SearchConditionItem date = conditionFactory.createCondition(ConditionType.DATE, 502227, name);
|
||||
date.setColSpan(colSpan);
|
||||
date.setFieldcol(fieldcol);
|
||||
date.setIsQuickSearch(isQuickSearch);
|
||||
date.setViewAttr(viewAttr);
|
||||
date.setLabel(label);
|
||||
return date;
|
||||
}
|
||||
|
||||
/**
|
||||
* @param user
|
||||
* @param colSpan
|
||||
* @param fieldcol
|
||||
* @param isQuickSearch
|
||||
* @param viewAttr
|
||||
* @param label
|
||||
* @param name
|
||||
* @return
|
||||
*/
|
||||
public static SearchConditionItem datePickerItem(User user, int colSpan, int fieldcol, boolean isQuickSearch,
|
||||
int viewAttr, String label, String name) {
|
||||
ConditionFactory conditionFactory = new ConditionFactory(user);
|
||||
SearchConditionItem datePicker = conditionFactory.createCondition(ConditionType.DATEPICKER, 502227, name);
|
||||
datePicker.setColSpan(colSpan);
|
||||
datePicker.setFieldcol(fieldcol);
|
||||
datePicker.setIsQuickSearch(isQuickSearch);
|
||||
datePicker.setViewAttr(viewAttr);
|
||||
datePicker.setLabel(label);
|
||||
return datePicker;
|
||||
}
|
||||
|
||||
|
||||
public static SearchConditionItem dateGroupItem(User user, int colSpan, int fieldcol, boolean isQuickSearch,
|
||||
int viewAttr, String label, String name) {
|
||||
ConditionFactory conditionFactory = new ConditionFactory(user);
|
||||
SearchConditionItem dateGroup = conditionFactory.createCondition(ConditionType.DATEGROUP, 502227, name);
|
||||
dateGroup.setColSpan(colSpan);
|
||||
dateGroup.setFieldcol(fieldcol);
|
||||
dateGroup.setIsQuickSearch(isQuickSearch);
|
||||
dateGroup.setViewAttr(viewAttr);
|
||||
dateGroup.setLabel(label);
|
||||
List<Object> datas = new ArrayList<>();
|
||||
datas.add(new DateGroupData("全部", "0"));
|
||||
datas.add(new DateGroupData("今天", "1"));
|
||||
datas.add(new DateGroupData("本周", "2"));
|
||||
datas.add(new DateGroupData("本月", "3"));
|
||||
datas.add(new DateGroupData("本季", "4"));
|
||||
datas.add(new DateGroupData("本年", "5"));
|
||||
datas.add(new DateGroupData("上个月", "7"));
|
||||
datas.add(new DateGroupData("上一年", "8"));
|
||||
datas.add(new DateGroupData("指定日期范围", "6"));
|
||||
dateGroup.setDatas(datas);
|
||||
dateGroup.setValue(new ArrayList<>());
|
||||
dateGroup.setDateGroup(true);
|
||||
return dateGroup;
|
||||
}
|
||||
|
||||
static class DateGroupData {
|
||||
private String name;
|
||||
private String value;
|
||||
|
||||
public DateGroupData(String name, String value) {
|
||||
this.name = name;
|
||||
this.value = value;
|
||||
}
|
||||
|
||||
public String getName() {
|
||||
return name;
|
||||
}
|
||||
|
||||
public String getValue() {
|
||||
return value;
|
||||
}
|
||||
}
|
||||
|
||||
|
||||
}
|
||||
|
|
@ -43,6 +43,8 @@ public class RecruitMessageUtils {
|
|||
}
|
||||
|
||||
public static boolean sendSMS(String receiver, String content) {
|
||||
// 去除短信内容中的html样式
|
||||
content = content.replaceAll("<[^>]*>| ", "").replaceAll("\\n+", "\n");
|
||||
return MessageUtil.sendSMS(receiver, content);
|
||||
}
|
||||
|
||||
|
|
|
|||
|
|
@ -38,9 +38,6 @@ public class ApplicantResumeWrapper extends Service {
|
|||
return getApplicantResumeService(user).updateApplicantsInfo(params);
|
||||
}
|
||||
|
||||
public Map<String, Object> fullOriginalResumeId(Map<String, Object> params) {
|
||||
return getApplicantResumeService(user).fullOriginalResumeId(params);
|
||||
}
|
||||
|
||||
public Map<String, Object> checkRepeatResume(Map<String, Object> params) {
|
||||
return getApplicantResumeService(user).checkRepeatResume(params);
|
||||
|
|
|
|||
|
|
@ -25,4 +25,8 @@ public class RecruitFlowWrapper extends Service {
|
|||
public Map<String, Object> getRecruitStepList(Map<String, Object> param) {
|
||||
return getRecruitFlowService(user).getRecruitStepList(param);
|
||||
}
|
||||
|
||||
public Map<String, Object> syncRecruitStepInfo(Map<String, Object> param) {
|
||||
return getRecruitFlowService(user).syncRecruitStepInfo(param);
|
||||
}
|
||||
}
|
||||
|
|
|
|||
|
|
@ -0,0 +1,24 @@
|
|||
package com.engine.recruit.wrapper;
|
||||
|
||||
import com.engine.common.util.ServiceUtil;
|
||||
import com.engine.core.impl.Service;
|
||||
import com.engine.recruit.service.RecruitInterviewService;
|
||||
import com.engine.recruit.service.impl.RecruitInterviewServiceImpl;
|
||||
import weaver.hrm.User;
|
||||
|
||||
import java.util.Map;
|
||||
|
||||
/**
|
||||
* @author:dxfeng
|
||||
* @createTime: 2023/11/28
|
||||
* @version: 1.0
|
||||
*/
|
||||
public class RecruitInterviewWrapper extends Service {
|
||||
private RecruitInterviewService getRecruitInterviewService(User user) {
|
||||
return ServiceUtil.getService(RecruitInterviewServiceImpl.class, user);
|
||||
}
|
||||
|
||||
public Map<String, Object> updateInterviewStatus(Map<String, Object> param) {
|
||||
return getRecruitInterviewService(user).updateInterviewStatus(param);
|
||||
}
|
||||
}
|
||||
|
|
@ -0,0 +1,44 @@
|
|||
package com.engine.recruit.wrapper;
|
||||
|
||||
import com.engine.common.util.ServiceUtil;
|
||||
import com.engine.core.impl.Service;
|
||||
import com.engine.recruit.constant.RecruitConstant;
|
||||
import com.engine.recruit.factory.ResumeRecognitionFactory;
|
||||
import com.engine.recruit.service.ResumeRecognitionService;
|
||||
import org.apache.commons.lang3.StringUtils;
|
||||
import weaver.hrm.User;
|
||||
|
||||
import java.util.Map;
|
||||
|
||||
/**
|
||||
* @author:dxfeng
|
||||
* @createTime: 2023/12/12
|
||||
* @version: 1.0
|
||||
*/
|
||||
public class ResumeRecognitionWrapper extends Service {
|
||||
|
||||
private ResumeRecognitionService getResumeRecognitionService(User user) {
|
||||
return ServiceUtil.getService(ResumeRecognitionFactory.getClass(RecruitConstant.OCR_TYPE), user);
|
||||
}
|
||||
|
||||
public Map<String, Object> resumeUpload(Map<String, Object> param) {
|
||||
if (StringUtils.isBlank(RecruitConstant.OCR_TYPE)) {
|
||||
return null;
|
||||
}
|
||||
return getResumeRecognitionService(user).resumeUpload(param);
|
||||
}
|
||||
|
||||
public Map<String, Object> importResume(Map<String, Object> param) {
|
||||
if (StringUtils.isBlank(RecruitConstant.OCR_TYPE)) {
|
||||
return null;
|
||||
}
|
||||
return getResumeRecognitionService(user).importResume(param);
|
||||
}
|
||||
|
||||
public Map<String, Object> fetchResume(Map<String, Object> param) {
|
||||
if (StringUtils.isBlank(RecruitConstant.OCR_TYPE)) {
|
||||
return null;
|
||||
}
|
||||
return getResumeRecognitionService(user).fetchResume(param);
|
||||
}
|
||||
}
|
||||
|
|
@ -0,0 +1,24 @@
|
|||
package com.engine.recruit.wrapper;
|
||||
|
||||
import com.engine.common.util.ServiceUtil;
|
||||
import com.engine.core.impl.Service;
|
||||
import com.engine.recruit.service.ResumeRemindService;
|
||||
import com.engine.recruit.service.impl.ResumeRemindServiceImpl;
|
||||
import weaver.hrm.User;
|
||||
|
||||
import java.util.Map;
|
||||
|
||||
/**
|
||||
* @author:dxfeng
|
||||
* @createTime: 2024/03/13
|
||||
* @version: 1.0
|
||||
*/
|
||||
public class ResumeRemindWrapper extends Service {
|
||||
private ResumeRemindService getResumeRemindService(User user) {
|
||||
return ServiceUtil.getService(ResumeRemindServiceImpl.class, user);
|
||||
}
|
||||
|
||||
public Map<String, Object> doRemindJob(Map<String, Object> param) {
|
||||
return getResumeRemindService(user).doRemindJob(param);
|
||||
}
|
||||
}
|
||||
|
|
@ -0,0 +1,28 @@
|
|||
package com.engine.recruit.wrapper;
|
||||
|
||||
import com.engine.common.util.ServiceUtil;
|
||||
import com.engine.core.impl.Service;
|
||||
import com.engine.recruit.service.WrittenResultsService;
|
||||
import com.engine.recruit.service.impl.WrittenResultsServiceImpl;
|
||||
import weaver.hrm.User;
|
||||
|
||||
import java.util.Map;
|
||||
|
||||
/**
|
||||
* @author:dxfeng
|
||||
* @createTime: 2024/01/24
|
||||
* @version: 1.0
|
||||
*/
|
||||
public class WrittenResultsWrapper extends Service {
|
||||
private WrittenResultsService getWrittenResultsService(User user) {
|
||||
return ServiceUtil.getService(WrittenResultsServiceImpl.class, user);
|
||||
}
|
||||
|
||||
public Map<String, Object> getFormCondition(Map<String, Object> params) {
|
||||
return getWrittenResultsService(user).getFormCondition();
|
||||
}
|
||||
|
||||
public Map<String, Object> importExcel(Map<String, Object> params) {
|
||||
return getWrittenResultsService(user).importExcel(params);
|
||||
}
|
||||
}
|
||||
|
|
@ -0,0 +1,29 @@
|
|||
package weaver.formmode.recruit.customsearch;
|
||||
|
||||
import org.apache.commons.lang3.StringUtils;
|
||||
import weaver.formmode.customjavacode.AbstractCustomSqlConditionJavaCode;
|
||||
import weaver.general.Util;
|
||||
import weaver.hrm.User;
|
||||
|
||||
import java.util.Map;
|
||||
|
||||
/**
|
||||
* 简历订阅、推送记录列表查询条件
|
||||
*
|
||||
* @author:dxfeng
|
||||
* @createTime: 2024/03/11
|
||||
* @version: 1.0
|
||||
*/
|
||||
public class RemindSearchTemplate extends AbstractCustomSqlConditionJavaCode {
|
||||
@Override
|
||||
public String generateSqlCondition(Map<String, Object> param) {
|
||||
String whereSql = "";
|
||||
User user = (User) param.get("user");
|
||||
whereSql += " t1.jsr = '" + user.getUID() + "'";
|
||||
String uuid = Util.null2String(param.get("uuid"));
|
||||
if (StringUtils.isNotBlank(uuid)) {
|
||||
whereSql += " and t1.uuid = '" + uuid + "'";
|
||||
}
|
||||
return whereSql;
|
||||
}
|
||||
}
|
||||
|
|
@ -57,11 +57,7 @@ public class CreatRckApplicantExpand extends AbstractModeExpandJavaCodeNew {
|
|||
|
||||
String uuid = UUID.randomUUID().toString();
|
||||
insertDataMap.put("modeuuid", uuid);
|
||||
int formModeId = -1;
|
||||
rs.executeQuery("select id from modeinfo where formid =( select id from workflow_bill where tablename = 'uf_jcl_yppc' )");
|
||||
if (rs.next()) {
|
||||
formModeId = rs.getInt("id");
|
||||
}
|
||||
int formModeId = ApplicantCommonInfo.getModeIdByTableName("uf_jcl_yppc");
|
||||
insertDataMap.put("formmodeid", formModeId);
|
||||
insertDataMap.put("id", billId);
|
||||
RecruitRecordSet.updateDataById(insertDataMap, "uf_jcl_yppc");
|
||||
|
|
|
|||
|
|
@ -1,6 +1,7 @@
|
|||
package weaver.formmode.recruit.modeexpand.departmentscreening;
|
||||
|
||||
import com.engine.recruit.conn.ApplicantCommonInfo;
|
||||
import com.engine.recruit.constant.RecruitConstant;
|
||||
import org.apache.commons.collections.CollectionUtils;
|
||||
import org.apache.commons.lang3.StringUtils;
|
||||
import weaver.common.DateUtil;
|
||||
|
|
@ -35,12 +36,8 @@ public class BatchAddDeptScreeningModeExpand extends AbstractModeExpandJavaCodeN
|
|||
try {
|
||||
RequestInfo requestInfo = (RequestInfo) param.get("RequestInfo");
|
||||
if (requestInfo != null) {
|
||||
int formModeId = -1;
|
||||
RecordSet rs = new RecordSet();
|
||||
rs.executeQuery("select id from modeinfo where formid =( select id from workflow_bill where tablename = ? )", MODE_TABLE_NAME);
|
||||
if (rs.next()) {
|
||||
formModeId = rs.getInt("id");
|
||||
}
|
||||
int formModeId = ApplicantCommonInfo.getModeIdByTableName(MODE_TABLE_NAME);
|
||||
MainTableInfo mainTableInfo = requestInfo.getMainTableInfo();
|
||||
Property[] properties = mainTableInfo.getProperty();
|
||||
Map<String, Object> mainDataMap = new HashMap<>();
|
||||
|
|
@ -97,9 +94,9 @@ public class BatchAddDeptScreeningModeExpand extends AbstractModeExpandJavaCodeN
|
|||
}
|
||||
|
||||
// 发送待办消息
|
||||
String messageType = RecruitModeUtil.getRecruitPropValue("SCREENING_MESSAGE_TYPE");
|
||||
String messageTitle = RecruitModeUtil.getRecruitPropValue("SCREENING_MESSAGE_TITLE");
|
||||
String linkUrl = RecruitModeUtil.getRecruitPropValue("SCREENING_MESSAGE_URL");
|
||||
String messageType = RecruitConstant.SCREENING_MESSAGE_TYPE;
|
||||
String messageTitle = RecruitConstant.SCREENING_MESSAGE_TITLE;
|
||||
String linkUrl = RecruitConstant.SCREENING_MESSAGE_URL;
|
||||
String fkr = Util.null2String(mainDataMap.get("fkr"));
|
||||
Set<String> userIdSet = new HashSet<>(Arrays.asList(fkr.split(",")));
|
||||
RecruitModeUtil.messagePush(messageType, messageTitle, msgBuilder.toString(), userIdSet, user.getUID(), linkUrl, "");
|
||||
|
|
|
|||
|
|
@ -1,11 +1,12 @@
|
|||
package weaver.formmode.recruit.modeexpand.departmentscreening;
|
||||
|
||||
import com.engine.recruit.conn.ApplicantCommonInfo;
|
||||
import com.engine.recruit.constant.RecruitConstant;
|
||||
import org.apache.commons.collections.CollectionUtils;
|
||||
import org.apache.commons.lang3.StringUtils;
|
||||
import weaver.common.DateUtil;
|
||||
import weaver.conn.RecordSet;
|
||||
import weaver.formmode.customjavacode.AbstractModeExpandJavaCodeNew;
|
||||
import com.engine.recruit.conn.ApplicantCommonInfo;
|
||||
import weaver.formmode.recruit.modeexpand.util.RecruitModeUtil;
|
||||
import weaver.formmode.setup.ModeRightInfo;
|
||||
import weaver.general.BaseBean;
|
||||
|
|
@ -44,12 +45,8 @@ public class SingleAddDeptScreeningModeExpand extends AbstractModeExpandJavaCode
|
|||
dataMap.put(property.getName(), property.getValue());
|
||||
}
|
||||
|
||||
int formModeId = -1;
|
||||
RecordSet rs = new RecordSet();
|
||||
rs.executeQuery("select id from modeinfo where formid =( select id from workflow_bill where tablename = ? )", MODE_TABLE_NAME);
|
||||
if (rs.next()) {
|
||||
formModeId = rs.getInt("id");
|
||||
}
|
||||
int formModeId = ApplicantCommonInfo.getModeIdByTableName(MODE_TABLE_NAME);
|
||||
|
||||
User user = (User) param.get("user");
|
||||
// 部门筛选ID
|
||||
|
|
@ -79,9 +76,9 @@ public class SingleAddDeptScreeningModeExpand extends AbstractModeExpandJavaCode
|
|||
}
|
||||
}
|
||||
// 发送待办消息
|
||||
String messageType = RecruitModeUtil.getRecruitPropValue("SCREENING_MESSAGE_TYPE");
|
||||
String messageTitle = RecruitModeUtil.getRecruitPropValue("SCREENING_MESSAGE_TITLE");
|
||||
String linkUrl = RecruitModeUtil.getRecruitPropValue("SCREENING_MESSAGE_URL");
|
||||
String messageType = RecruitConstant.SCREENING_MESSAGE_TYPE;
|
||||
String messageTitle = RecruitConstant.SCREENING_MESSAGE_TITLE;
|
||||
String linkUrl = RecruitConstant.SCREENING_MESSAGE_URL;
|
||||
String fkr = Util.null2String(dataMap.get("fkr"));
|
||||
String applicantName = ApplicantCommonInfo.getApplicantName(Util.null2String(dataMap.get("ypz")));
|
||||
String applicantPosition = ApplicantCommonInfo.getApplicantPosition(Util.null2String(dataMap.get("ypzw")));
|
||||
|
|
|
|||
|
|
@ -1,6 +1,7 @@
|
|||
package weaver.formmode.recruit.modeexpand.entrymanager;
|
||||
|
||||
import com.engine.common.util.ServiceUtil;
|
||||
import com.engine.recruit.enums.ApplicationStatusEnum;
|
||||
import com.engine.recruit.service.impl.ApplicantResumeServiceImpl;
|
||||
import org.apache.commons.lang3.StringUtils;
|
||||
import weaver.conn.RecordSet;
|
||||
|
|
@ -20,7 +21,7 @@ import java.util.Map;
|
|||
public class AddEntryModeExpand extends AbstractModeExpandJavaCodeNew {
|
||||
@Override
|
||||
public Map<String, String> doModeExpand(Map<String, Object> param) {
|
||||
Map<String, String> result = new HashMap<>();
|
||||
Map<String, String> result = new HashMap<>(2);
|
||||
try {
|
||||
int billId;
|
||||
int modeId;
|
||||
|
|
@ -30,15 +31,17 @@ public class AddEntryModeExpand extends AbstractModeExpandJavaCodeNew {
|
|||
billId = Util.getIntValue(requestInfo.getRequestid());
|
||||
modeId = Util.getIntValue(requestInfo.getWorkflowid());
|
||||
if (billId > 0 && modeId > 0) {
|
||||
RecordSet rs = new RecordSet();
|
||||
String pcId = Util.null2String(param.get("pcid"));
|
||||
String offerId = Util.null2String(param.get("offerid"));
|
||||
if (StringUtils.isNotBlank(pcId)) {
|
||||
// 归档人才库,归档原因:待入职
|
||||
ServiceUtil.getService(ApplicantResumeServiceImpl.class, user).archiveTalentPool(pcId, false, "13");
|
||||
// 更新应聘批次为已归档
|
||||
rs.executeUpdate("update uf_jcl_yppc set zt = ? where id = ? ", ApplicationStatusEnum.ARCHIVED.getValue(), pcId);
|
||||
}
|
||||
if (StringUtils.isNotBlank(offerId)) {
|
||||
// 是否待入职,字段为是
|
||||
RecordSet rs = new RecordSet();
|
||||
rs.executeUpdate("update uf_jcl_offer set sfzdrz = 1 where id = ? ", offerId);
|
||||
}
|
||||
}
|
||||
|
|
|
|||
|
|
@ -1,5 +1,7 @@
|
|||
package weaver.formmode.recruit.modeexpand.interview;
|
||||
|
||||
import com.engine.recruit.constant.RecruitConstant;
|
||||
import com.engine.recruit.conn.ApplicantCommonInfo;
|
||||
import com.engine.recruit.util.RecruitMessageUtils;
|
||||
import com.weaver.formmodel.data.model.Formfield;
|
||||
import org.apache.commons.collections.CollectionUtils;
|
||||
|
|
@ -28,21 +30,6 @@ import java.util.stream.Collectors;
|
|||
public class BatchAddInterviewResultModeExpand extends AbstractModeExpandJavaCodeNew {
|
||||
private static final String MODE_TABLE_NAME = "uf_jcl_ms";
|
||||
|
||||
/**
|
||||
* 消息来源ID
|
||||
*/
|
||||
private final String messageType;
|
||||
|
||||
/**
|
||||
* 消息提醒标题
|
||||
*/
|
||||
private final String title;
|
||||
|
||||
public BatchAddInterviewResultModeExpand() {
|
||||
super();
|
||||
messageType = RecruitModeUtil.getRecruitPropValue("INTERVIEW_MESSAGE_TYPE");
|
||||
title = RecruitModeUtil.getRecruitPropValue("INTERVIEW_ADD_MESSAGE_TITLE");
|
||||
}
|
||||
|
||||
@Override
|
||||
public Map<String, String> doModeExpand(Map<String, Object> param) {
|
||||
|
|
@ -50,23 +37,18 @@ public class BatchAddInterviewResultModeExpand extends AbstractModeExpandJavaCod
|
|||
try {
|
||||
RequestInfo requestInfo = (RequestInfo) param.get("RequestInfo");
|
||||
if (requestInfo != null) {
|
||||
int formModeId = -1;
|
||||
int formId = -1;
|
||||
RecordSet rs = new RecordSet();
|
||||
rs.executeQuery("select id from workflow_bill where tablename = ?", MODE_TABLE_NAME);
|
||||
if (rs.next()) {
|
||||
formId = rs.getInt("id");
|
||||
}
|
||||
rs.executeQuery("select id from modeinfo where formid =?", formId);
|
||||
if (rs.next()) {
|
||||
formModeId = rs.getInt("id");
|
||||
}
|
||||
int formModeId = ApplicantCommonInfo.getModeIdByTableName(MODE_TABLE_NAME);
|
||||
MainTableInfo mainTableInfo = requestInfo.getMainTableInfo();
|
||||
Property[] properties = mainTableInfo.getProperty();
|
||||
Map<String, Object> mainDataMap = new HashMap<>();
|
||||
for (Property property : properties) {
|
||||
mainDataMap.put(property.getName(), RecruitModeUtil.parseBlankToNull(property.getValue()));
|
||||
}
|
||||
|
||||
// 需要应聘者反馈
|
||||
boolean needFeedback = "1".equals(Util.null2String(mainDataMap.get("sfxyfk")));
|
||||
|
||||
User user = (User) param.get("user");
|
||||
// 填充建模数据基本信息
|
||||
mainDataMap.put("formmodeid", formModeId);
|
||||
|
|
@ -127,7 +109,15 @@ public class BatchAddInterviewResultModeExpand extends AbstractModeExpandJavaCod
|
|||
String yx = Util.null2String(detailDataMap.get("dzyx"));
|
||||
String sjh = Util.null2String(detailDataMap.get("sjhm"));
|
||||
if (sendEmail) {
|
||||
RecruitMessageUtils.sendEmail(yx, emailTitle, msgContent);
|
||||
if (needFeedback) {
|
||||
String confirmUrl = RecruitConstant.INTERVIEW_FEEDBACK_URL + "?uuid=" + uuid;
|
||||
String emailContent = "<div style=\"border:3px solid silver;width:635px;height:55px;line-height:55px;font-family:'microsoft Yahei';font-size:18px;font-weight:bold;color:#333;padding-left:10px\">请您答复是否参加此次邀请? <a href=\"" + confirmUrl + "&status=0\" style=\"text-decoration:underline;color:#0000cc;margin-right:10px\">参加</a> <a href=\"" + confirmUrl + "&status=1\" style=\"text-decoration:underline;color:#0000cc;\">不参加</a></div>";
|
||||
// 邮件内容拼接确认信息
|
||||
emailContent = msgContent + emailContent;
|
||||
RecruitMessageUtils.sendEmail(yx, emailTitle, emailContent);
|
||||
} else {
|
||||
RecruitMessageUtils.sendEmail(yx, emailTitle, msgContent);
|
||||
}
|
||||
|
||||
}
|
||||
if (sendSms) {
|
||||
|
|
@ -150,7 +140,7 @@ public class BatchAddInterviewResultModeExpand extends AbstractModeExpandJavaCod
|
|||
Set<String> userIdSet = new HashSet<>();
|
||||
userIdSet.addAll(Arrays.asList(msg.split(",")));
|
||||
userIdSet.addAll(Arrays.asList(ptmsg.split(",")));
|
||||
RecruitModeUtil.messagePush(messageType, title, msgBuilder.toString(), userIdSet, user.getUID());
|
||||
RecruitModeUtil.messagePush(RecruitConstant.INTERVIEW_MESSAGE_TYPE, RecruitConstant.INTERVIEW_ADD_MESSAGE_TITLE, msgBuilder.toString(), userIdSet, user.getUID());
|
||||
}
|
||||
}
|
||||
} catch (Exception e) {
|
||||
|
|
|
|||
|
|
@ -1,19 +1,18 @@
|
|||
package weaver.formmode.recruit.modeexpand.interview;
|
||||
|
||||
import com.engine.recruit.enums.InterviewOperateTypeEnum;
|
||||
import com.engine.recruit.util.RecruitMessageUtils;
|
||||
import com.weaver.formmodel.data.model.Formfield;
|
||||
import org.apache.commons.lang3.StringUtils;
|
||||
import weaver.conn.RecordSet;
|
||||
import weaver.formmode.customjavacode.AbstractModeExpandJavaCodeNew;
|
||||
import com.engine.recruit.conn.ApplicantCommonInfo;
|
||||
import com.engine.recruit.constant.RecruitConstant;
|
||||
import com.engine.recruit.enums.InterviewOperateTypeEnum;
|
||||
import org.apache.commons.lang3.StringUtils;
|
||||
import weaver.formmode.customjavacode.AbstractModeExpandJavaCodeNew;
|
||||
import weaver.formmode.recruit.modeexpand.util.RecruitModeUtil;
|
||||
import weaver.general.Util;
|
||||
import weaver.hrm.User;
|
||||
import weaver.soa.workflow.request.*;
|
||||
import weaver.soa.workflow.request.MainTableInfo;
|
||||
import weaver.soa.workflow.request.Property;
|
||||
import weaver.soa.workflow.request.RequestInfo;
|
||||
|
||||
import java.util.*;
|
||||
import java.util.stream.Collectors;
|
||||
|
||||
/**
|
||||
* <p>聚才林招聘</p>
|
||||
|
|
@ -35,8 +34,6 @@ public class CreateInterviewModeExpand extends AbstractModeExpandJavaCodeNew {
|
|||
*/
|
||||
private String title;
|
||||
|
||||
private final RecordSet recordSet = new RecordSet();
|
||||
|
||||
@Override
|
||||
public Map<String, String> doModeExpand(Map<String, Object> params) {
|
||||
Map<String, String> result = new HashMap<>();
|
||||
|
|
@ -58,36 +55,21 @@ public class CreateInterviewModeExpand extends AbstractModeExpandJavaCodeNew {
|
|||
mainDataMap.put(property.getName(), property.getValue());
|
||||
}
|
||||
|
||||
|
||||
String operateType = Util.null2String(params.get("operateType"));
|
||||
if (StringUtils.isBlank(operateType)) {
|
||||
operateType = InterviewOperateTypeEnum.ARRANGE.getOperateType();
|
||||
}
|
||||
InterviewOperateTypeEnum operateTypeEnum = InterviewOperateTypeEnum.getOperateType(operateType);
|
||||
if (operateTypeEnum == InterviewOperateTypeEnum.ARRANGE) {
|
||||
messageType = RecruitModeUtil.getRecruitPropValue("INTERVIEW_MESSAGE_TYPE");
|
||||
title = RecruitModeUtil.getRecruitPropValue("INTERVIEW_ADD_MESSAGE_TITLE");
|
||||
messageType = RecruitConstant.INTERVIEW_MESSAGE_TYPE;
|
||||
title = RecruitConstant.INTERVIEW_ADD_MESSAGE_TITLE;
|
||||
// 消息提醒
|
||||
arrangeInterview(user, mainDataMap);
|
||||
String tzypz = Util.null2String(mainDataMap.get("tzypz"));
|
||||
String yjnr = Util.null2String(mainDataMap.get("yjnr"));
|
||||
String yjtzmb = Util.null2String(mainDataMap.get("yjtzmb"));
|
||||
List<String> sendTypeList = Arrays.asList(tzypz.split(","));
|
||||
boolean sendEmail = sendTypeList.contains("0");
|
||||
boolean sendSms = sendTypeList.contains("1");
|
||||
String emailTitle = RecruitModeUtil.getEmailTitle(yjtzmb);
|
||||
|
||||
List<Formfield> fieldList = RecruitModeUtil.getFieldList("uf_jcl_ms");
|
||||
Map<String, List<Formfield>> fieldMapList = fieldList.stream().collect(Collectors.groupingBy(Formfield::getLabelName));
|
||||
// 发送邮件
|
||||
String msgContent = RecruitModeUtil.getReplaceContent(yjnr, fieldMapList, mainDataMap);
|
||||
String yx = Util.null2String(mainDataMap.get("dzyx"));
|
||||
String sjh = Util.null2String(mainDataMap.get("sjhm"));
|
||||
if (sendEmail) {
|
||||
RecruitMessageUtils.sendEmail(yx, emailTitle, msgContent);
|
||||
|
||||
}
|
||||
if (sendSms) {
|
||||
RecruitMessageUtils.sendSMS(sjh, msgContent);
|
||||
}
|
||||
// 需要应聘者反馈
|
||||
boolean needFeedback = "1".equals(Util.null2String(mainDataMap.get("sfxyfk")));
|
||||
// 发送邮件、短信
|
||||
InterviewMsgUtil.sendEmailAndMsg(mainDataMap, billId, needFeedback);
|
||||
}
|
||||
|
||||
}
|
||||
|
|
|
|||
|
|
@ -0,0 +1,71 @@
|
|||
package weaver.formmode.recruit.modeexpand.interview;
|
||||
|
||||
import com.engine.recruit.constant.RecruitConstant;
|
||||
import com.engine.recruit.util.RecruitMessageUtils;
|
||||
import com.weaver.formmodel.data.model.Formfield;
|
||||
import weaver.conn.RecordSet;
|
||||
import weaver.formmode.recruit.modeexpand.util.RecruitModeUtil;
|
||||
import weaver.general.Util;
|
||||
|
||||
import java.util.Arrays;
|
||||
import java.util.List;
|
||||
import java.util.Map;
|
||||
import java.util.stream.Collectors;
|
||||
|
||||
/**
|
||||
* @author:dxfeng
|
||||
* @createTime: 2024/03/04
|
||||
* @version: 1.0
|
||||
*/
|
||||
public class InterviewMsgUtil {
|
||||
|
||||
/**
|
||||
* 面试相关,发送邮件、短信
|
||||
*
|
||||
* @param mainDataMap
|
||||
* @param billId
|
||||
* @param needFeedback
|
||||
*/
|
||||
public static void sendEmailAndMsg(Map<String, Object> mainDataMap, int billId, boolean needFeedback) {
|
||||
String tzypz = Util.null2String(mainDataMap.get("tzypz"));
|
||||
String yjnr = Util.null2String(mainDataMap.get("yjnr"));
|
||||
String yjtzmb = Util.null2String(mainDataMap.get("yjtzmb"));
|
||||
List<String> sendTypeList = Arrays.asList(tzypz.split(","));
|
||||
boolean sendEmail = sendTypeList.contains("0");
|
||||
boolean sendSms = sendTypeList.contains("1");
|
||||
String emailTitle = RecruitModeUtil.getEmailTitle(yjtzmb);
|
||||
|
||||
List<Formfield> fieldList = RecruitModeUtil.getFieldList("uf_jcl_ms");
|
||||
Map<String, List<Formfield>> fieldMapList = fieldList.stream().collect(Collectors.groupingBy(Formfield::getLabelName));
|
||||
// 发送邮件
|
||||
String msgContent = RecruitModeUtil.getReplaceContent(yjnr, fieldMapList, mainDataMap);
|
||||
String yx = Util.null2String(mainDataMap.get("dzyx"));
|
||||
String sjh = Util.null2String(mainDataMap.get("sjhm"));
|
||||
RecordSet rs = new RecordSet();
|
||||
rs.executeQuery("select modeuuid from uf_jcl_ms where id = ? ", billId);
|
||||
String uuid = "";
|
||||
if (rs.next()) {
|
||||
uuid = rs.getString("modeuuid");
|
||||
}
|
||||
String confirmUrl = RecruitConstant.INTERVIEW_FEEDBACK_URL + "?uuid=" + uuid;
|
||||
if (sendEmail) {
|
||||
if (needFeedback) {
|
||||
String emailContent = "<div style=\"border:3px solid silver;width:635px;height:55px;line-height:55px;font-family:'microsoft Yahei';font-size:18px;font-weight:bold;color:#333;padding-left:10px\">请您答复是否参加此次邀请? <a href=\"" + confirmUrl + "&status=0\" style=\"text-decoration:underline;color:#0000cc;margin-right:10px\">参加</a> <a href=\"" + confirmUrl + "&status=1\" style=\"text-decoration:underline;color:#0000cc;\">不参加</a></div>";
|
||||
// 邮件内容拼接确认信息
|
||||
emailContent = msgContent + emailContent;
|
||||
RecruitMessageUtils.sendEmail(yx, emailTitle, emailContent);
|
||||
} else {
|
||||
RecruitMessageUtils.sendEmail(yx, emailTitle, msgContent);
|
||||
}
|
||||
}
|
||||
if (sendSms) {
|
||||
if (needFeedback) {
|
||||
String messageContent = "请您答复是否参加此次邀请?" + confirmUrl;
|
||||
messageContent = msgContent + messageContent;
|
||||
RecruitMessageUtils.sendSMS(sjh, messageContent);
|
||||
} else {
|
||||
RecruitMessageUtils.sendSMS(sjh, msgContent);
|
||||
}
|
||||
}
|
||||
}
|
||||
}
|
||||
|
|
@ -1,10 +1,12 @@
|
|||
package weaver.formmode.recruit.modeexpand.interview;
|
||||
|
||||
import com.engine.recruit.conn.ApplicantCommonInfo;
|
||||
import com.engine.recruit.constant.RecruitConstant;
|
||||
import com.engine.recruit.enums.InterviewOperateTypeEnum;
|
||||
import com.weaver.formmodel.data.model.Formfield;
|
||||
import org.apache.commons.lang3.StringUtils;
|
||||
import weaver.conn.RecordSet;
|
||||
import weaver.formmode.customjavacode.AbstractModeExpandJavaCodeNew;
|
||||
import com.engine.recruit.conn.ApplicantCommonInfo;
|
||||
import weaver.formmode.recruit.modeexpand.util.RecruitModeUtil;
|
||||
import weaver.general.Util;
|
||||
import weaver.hrm.User;
|
||||
|
|
@ -13,6 +15,7 @@ import weaver.soa.workflow.request.Property;
|
|||
import weaver.soa.workflow.request.RequestInfo;
|
||||
|
||||
import java.util.*;
|
||||
import java.util.stream.Collectors;
|
||||
|
||||
/**
|
||||
* @author:dxfeng
|
||||
|
|
@ -63,15 +66,27 @@ public class UpdateInterviewModeExpand extends AbstractModeExpandJavaCodeNew {
|
|||
switch (operateTypeEnum) {
|
||||
case EVALUATE:
|
||||
// 面试评价
|
||||
messageType = RecruitModeUtil.getRecruitPropValue("INTERVIEW_MESSAGE_TYPE");
|
||||
title = RecruitModeUtil.getRecruitPropValue("INTERVIEW_EVALUATE_MESSAGE_TITLE");
|
||||
messageType = RecruitConstant.INTERVIEW_MESSAGE_TYPE;
|
||||
title = RecruitConstant.INTERVIEW_EVALUATE_MESSAGE_TITLE;
|
||||
evaluateInterview(params, requestInfo.getCreatorid(), mainDataMap);
|
||||
break;
|
||||
case CANCEL:
|
||||
// 面试取消
|
||||
messageType = RecruitModeUtil.getRecruitPropValue("INTERVIEW_MESSAGE_TYPE");
|
||||
title = RecruitModeUtil.getRecruitPropValue("INTERVIEW_CANCEL_MESSAGE_TITLE");
|
||||
messageType = RecruitConstant.INTERVIEW_MESSAGE_TYPE;
|
||||
title = RecruitConstant.INTERVIEW_CANCEL_MESSAGE_TITLE;
|
||||
cancelInterView(params, requestInfo, billId, mainDataMap);
|
||||
// 发送邮件
|
||||
InterviewMsgUtil.sendEmailAndMsg(mainDataMap, billId, false);
|
||||
break;
|
||||
case ADJUSTMENT:
|
||||
messageType = RecruitConstant.INTERVIEW_MESSAGE_TYPE;
|
||||
title = RecruitConstant.INTERVIEW_ADJUSTMENT_MESSAGE_TITLE;
|
||||
// 发送消息提醒
|
||||
adjustmentInterView(requestInfo.getCreatorid(), mainDataMap);
|
||||
boolean needFeedback = "1".equals(Util.null2String(mainDataMap.get("sfxyfk")));
|
||||
// 发送邮件、同安排面试
|
||||
InterviewMsgUtil.sendEmailAndMsg(mainDataMap, billId, needFeedback);
|
||||
// 更新反馈状态为未反馈
|
||||
break;
|
||||
default:
|
||||
break;
|
||||
|
|
@ -160,5 +175,31 @@ public class UpdateInterviewModeExpand extends AbstractModeExpandJavaCodeNew {
|
|||
|
||||
}
|
||||
|
||||
/**
|
||||
* 调整面试拓展动作
|
||||
*
|
||||
* @param creator creator
|
||||
* @param mainDataMap mainDataMap
|
||||
*/
|
||||
private void adjustmentInterView(String creator, Map<String, Object> mainDataMap) {
|
||||
// 发送消息
|
||||
String msg = Util.null2String(mainDataMap.get("msg"));
|
||||
String ptmsg = Util.null2String(mainDataMap.get("ptmsg"));
|
||||
|
||||
String msgContent = "您有一条面试已调整,调整后的面试信息如下:<br/>" +
|
||||
"应聘者:$ypz$;应聘职位:$ypzw$<br/>" +
|
||||
"面试官:$msg$;陪同面试官:$ptmsg$<br/>" +
|
||||
"面试时间:$msrq$;面试方式:$msfs$<br/>" +
|
||||
"面试地址:$msdd$";
|
||||
|
||||
// 消息发送
|
||||
Set<String> userIdSet = new HashSet<>();
|
||||
userIdSet.addAll(Arrays.asList(msg.split(",")));
|
||||
userIdSet.addAll(Arrays.asList(ptmsg.split(",")));
|
||||
List<Formfield> fieldList = RecruitModeUtil.getFieldList(MODE_TABLE_NAME);
|
||||
Map<String, Formfield> fieldMap = fieldList.stream().collect(Collectors.toMap(Formfield::getFieldname, item -> item, (k1, k2) -> k1));
|
||||
String msgStr = RecruitModeUtil.getMsgReplaceStr(msgContent, fieldMap, mainDataMap);
|
||||
RecruitModeUtil.messagePush(messageType, title, msgStr, userIdSet, Integer.parseInt(creator));
|
||||
}
|
||||
|
||||
}
|
||||
|
|
|
|||
|
|
@ -1,5 +1,6 @@
|
|||
package weaver.formmode.recruit.modeexpand.offer;
|
||||
|
||||
import com.engine.recruit.constant.RecruitConstant;
|
||||
import com.engine.recruit.enums.RecordOperateEnum;
|
||||
import com.engine.recruit.util.RecruitMessageUtils;
|
||||
import com.weaver.formmodel.data.model.Formfield;
|
||||
|
|
@ -59,8 +60,7 @@ public class CreateOfferModeExpand extends AbstractModeExpandJavaCodeNew {
|
|||
List<Formfield> fieldList = RecruitModeUtil.getFieldList("uf_jcl_offer");
|
||||
Map<String, List<Formfield>> fieldMapList = fieldList.stream().collect(Collectors.groupingBy(Formfield::getLabelName));
|
||||
// 发送邮件
|
||||
String offerMobileUrl = RecruitModeUtil.getRecruitPropValue("OFFER_MOBILE_URL");
|
||||
offerMobileUrl += "&billid=" + billId + "&dzyx=" + yx;
|
||||
String offerMobileUrl = RecruitConstant.OFFER_MOBILE_URL + "&billid=" + billId + "&dzyx=" + yx;
|
||||
String mobileLink = "<span color='red'><a href='" + offerMobileUrl + "' target='_blank'>录用通知函</a></span>";
|
||||
tznr = tznr.replace("{录用通知函}", mobileLink);
|
||||
String msgContent = RecruitModeUtil.getReplaceContent(tznr, fieldMapList, mainDataMap);
|
||||
|
|
|
|||
|
|
@ -1,9 +1,15 @@
|
|||
package weaver.formmode.recruit.modeexpand.position;
|
||||
|
||||
import com.alibaba.fastjson.JSON;
|
||||
import com.engine.recruit.thread.SdkResumeSavedThread;
|
||||
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;
|
||||
import weaver.conn.RecordSet;
|
||||
import weaver.erpa.apps.entity.application.resume.dto.ResumeTaskResult;
|
||||
import weaver.erpa.apps.entity.application.resume.enums.TaskResult;
|
||||
import weaver.formmode.customjavacode.AbstractModeExpandJavaCodeNew;
|
||||
import weaver.general.BaseBean;
|
||||
import weaver.general.Util;
|
||||
|
|
@ -23,8 +29,9 @@ public class ClosePositionModeExpand extends AbstractModeExpandJavaCodeNew {
|
|||
@Override
|
||||
public Map<String, String> doModeExpand(Map<String, Object> param) {
|
||||
String tableName = "uf_jcl_zp_zpzw";
|
||||
BaseBean baseBean = new BaseBean();
|
||||
|
||||
Map<String, String> result = new HashMap<>(16);
|
||||
Map<String, String> resultMap = new HashMap<>(16);
|
||||
try {
|
||||
User user = (User) param.get("user");
|
||||
int billId;
|
||||
|
|
@ -35,30 +42,85 @@ public class ClosePositionModeExpand extends AbstractModeExpandJavaCodeNew {
|
|||
modeId = Util.getIntValue(requestInfo.getWorkflowid());
|
||||
if (billId > 0 && modeId > 0) {
|
||||
RecordSet rs = new RecordSet();
|
||||
rs.executeQuery("select qllgwid from " + tableName + " where id = ?", billId);
|
||||
if (rs.next()) {
|
||||
String qllgwid = rs.getString("qllgwid");
|
||||
if (StringUtils.isBlank(qllgwid)) {
|
||||
new BaseBean().writeLog("billId=" + billId + ",当前职位暂未发布,无需进行下架操作");
|
||||
result.put("errmsg", "当前职位暂未发布,无需进行下架操作");
|
||||
result.put("flag", "false");
|
||||
return result;
|
||||
// 判断是否配置千里聆,若未配置千里聆信息,则不执行下架职位操作,只更新状态
|
||||
if (checkUseQll()) {
|
||||
rs.executeQuery("select qllgwid from " + tableName + " where id = ?", billId);
|
||||
if (rs.next()) {
|
||||
String qllgwid = rs.getString("qllgwid");
|
||||
if (StringUtils.isBlank(qllgwid)) {
|
||||
baseBean.writeLog("billId=" + billId + ",当前职位暂未发布,无需进行下架操作");
|
||||
resultMap.put("errmsg", "当前职位暂未发布,无需进行下架操作");
|
||||
resultMap.put("flag", "false");
|
||||
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();
|
||||
String userId = String.valueOf(user.getUID());
|
||||
ResumeTaskResult result = client.closeResumeJob(userId, jobId);
|
||||
String errorMsg = "";
|
||||
|
||||
TaskResult current = result.getResult();
|
||||
baseBean.writeLog(current);
|
||||
|
||||
// 使用回调函数获取成功或者失败时的消息
|
||||
result.onResult(() -> {
|
||||
baseBean.writeLog("执行成功回调");
|
||||
}, (reason) -> {
|
||||
baseBean.writeLog("执行失败回调,原因:" + reason);
|
||||
});
|
||||
|
||||
// 等待直到状态不再是PENDING
|
||||
TaskResult taskResult = result.waitResult();
|
||||
baseBean.writeLog(taskResult);
|
||||
if (taskResult == TaskResult.SUCCEED) {
|
||||
baseBean.writeLog("执行成功");
|
||||
} else {
|
||||
errorMsg = "执行失败,原因:" + result.getFailReason();
|
||||
baseBean.writeLog("执行失败,原因:" + result.getFailReason());
|
||||
}
|
||||
if (StringUtils.isBlank(errorMsg)) {
|
||||
rs.executeUpdate("update " + tableName + " set qdfbzt = ? where id = ?", 5, billId);
|
||||
} else {
|
||||
resultMap.put("errmsg", errorMsg);
|
||||
resultMap.put("flag", "false");
|
||||
return resultMap;
|
||||
}
|
||||
}
|
||||
long jobId = Long.parseLong(qllgwid);
|
||||
ERPAResumeSDKClient client = ERPASDKClients.getResumeSDKClient();
|
||||
client.start();
|
||||
String userId = String.valueOf(user.getUID());
|
||||
client.closeResumeJob(userId, jobId);
|
||||
rs.executeUpdate("update " + tableName + " set qdfbzt = ? where id = ?", 5, billId);
|
||||
}
|
||||
// 更新招聘状态为招聘结束
|
||||
rs.executeUpdate("update " + tableName + " set zpzt = ? where id = ?", 1, billId);
|
||||
}
|
||||
}
|
||||
} catch (Exception e) {
|
||||
new BaseBean().writeLog(e);
|
||||
result.put("errmsg", e.getMessage());
|
||||
result.put("flag", "false");
|
||||
baseBean.writeLog(e);
|
||||
resultMap.put("errmsg", e.getMessage());
|
||||
resultMap.put("flag", "false");
|
||||
}
|
||||
return result;
|
||||
return resultMap;
|
||||
}
|
||||
|
||||
/**
|
||||
* 校验是否配置千里聆
|
||||
*
|
||||
* @return
|
||||
*/
|
||||
private boolean checkUseQll() {
|
||||
boolean used;
|
||||
try {
|
||||
SDKCore sdkCore = ERPASDKInitUtils.genSDKCore();
|
||||
used = sdkCore != null;
|
||||
} catch (Exception e) {
|
||||
used = false;
|
||||
}
|
||||
return used;
|
||||
}
|
||||
|
||||
}
|
||||
|
|
|
|||
|
|
@ -0,0 +1,47 @@
|
|||
package weaver.formmode.recruit.modeexpand.position;
|
||||
|
||||
import weaver.conn.RecordSet;
|
||||
import weaver.formmode.customjavacode.AbstractModeExpandJavaCodeNew;
|
||||
import weaver.general.BaseBean;
|
||||
import weaver.general.Util;
|
||||
import weaver.soa.workflow.request.RequestInfo;
|
||||
|
||||
import java.util.HashMap;
|
||||
import java.util.Map;
|
||||
|
||||
/**
|
||||
* @author:dxfeng
|
||||
* @createTime: 2024/03/14
|
||||
* @version: 1.0
|
||||
*/
|
||||
public class OpenPositionModeExpand extends AbstractModeExpandJavaCodeNew {
|
||||
|
||||
@Override
|
||||
public Map<String, String> doModeExpand(Map<String, Object> param) {
|
||||
String tableName = "uf_jcl_zp_zpzw";
|
||||
BaseBean baseBean = new BaseBean();
|
||||
|
||||
Map<String, String> resultMap = new HashMap<>(16);
|
||||
try {
|
||||
int billId;
|
||||
int modeId;
|
||||
RequestInfo requestInfo = (RequestInfo) param.get("RequestInfo");
|
||||
if (requestInfo != null) {
|
||||
billId = Util.getIntValue(requestInfo.getRequestid());
|
||||
modeId = Util.getIntValue(requestInfo.getWorkflowid());
|
||||
if (billId > 0 && modeId > 0) {
|
||||
RecordSet rs = new RecordSet();
|
||||
// 更新招聘状态为招聘中
|
||||
rs.executeUpdate("update " + tableName + " set zpzt = ? where id = ?", 0, billId);
|
||||
}
|
||||
}
|
||||
|
||||
} catch (Exception e) {
|
||||
baseBean.writeLog(e);
|
||||
resultMap.put("errmsg", e.getMessage());
|
||||
resultMap.put("flag", "false");
|
||||
}
|
||||
return resultMap;
|
||||
}
|
||||
|
||||
}
|
||||
|
|
@ -3,9 +3,10 @@ package weaver.formmode.recruit.modeexpand.position;
|
|||
import com.alibaba.fastjson.JSON;
|
||||
import com.engine.recruit.thread.SdkResumeSavedThread;
|
||||
import com.weaver.rpa.sdk.clients.application.resume.ERPAResumeSDKClient;
|
||||
import com.weaver.rpa.sdk.clients.application.resume.entity.ResumeJobDto;
|
||||
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;
|
||||
import weaver.erpa.apps.entity.application.resume.dto.ResumeTaskResult;
|
||||
import weaver.erpa.apps.entity.application.resume.enums.TaskResult;
|
||||
|
|
@ -34,6 +35,7 @@ public class ReleasePositionModeExpand extends AbstractModeExpandJavaCodeNew {
|
|||
String tableName = "uf_jcl_zp_zpzw";
|
||||
|
||||
Map<String, String> resultMap = new HashMap<>(16);
|
||||
BaseBean baseBean = new BaseBean();
|
||||
try {
|
||||
User user = (User) param.get("user");
|
||||
int billId;
|
||||
|
|
@ -59,10 +61,10 @@ public class ReleasePositionModeExpand extends AbstractModeExpandJavaCodeNew {
|
|||
for (Property property : properties) {
|
||||
map.put(property.getName(), property.getValue());
|
||||
}
|
||||
ResumeJobDto resumeJobDto = RecruitPositionUtil.convertMap2ResumeJobDto(map);
|
||||
ResumeJobV2Dto resumeJobDto = RecruitPositionUtil.convertMap2ResumeJobV2Dto(map);
|
||||
// 发布千里聆职位
|
||||
if (!RecruitPositionUtil.checkAvailable(client)) {
|
||||
new BaseBean().writeLog("千里聆未开通简历应用。");
|
||||
baseBean.writeLog("千里聆未开通简历应用。");
|
||||
resultMap.put("errmsg", "千里聆未开通简历应用。");
|
||||
resultMap.put("flag", "false");
|
||||
return resultMap;
|
||||
|
|
@ -70,16 +72,25 @@ public class ReleasePositionModeExpand extends AbstractModeExpandJavaCodeNew {
|
|||
String userId = String.valueOf(user.getUID());
|
||||
// 未创建职位,则先创建职位
|
||||
if (jobId == -1) {
|
||||
baseBean.writeLog("【创建职位】,[id=" + billId + "],resumeJobDto=" + JSON.toJSONString(resumeJobDto));
|
||||
// 创建千里聆职位
|
||||
jobId = client.addResumeJob(userId, resumeJobDto);
|
||||
jobId = client.addResumeJobV2(userId, resumeJobDto);
|
||||
// 更新千里聆ID到建模表单
|
||||
rs.executeUpdate("update " + tableName + " set qllgwid = ? where id = ?", jobId, billId);
|
||||
} else {
|
||||
baseBean.writeLog("【更新职位】,[id=" + billId + "],[qllgwid=" + jobId + "],resumeJobDto=" + JSON.toJSONString(resumeJobDto));
|
||||
// 已发布的职位,更新职位信息
|
||||
client.editResumeJobV2(userId, jobId, jobDto -> {
|
||||
new BaseBean().writeLog("职位更新前:" + JSON.toJSONString(jobDto));
|
||||
BeanUtils.copyProperties(resumeJobDto,jobDto);
|
||||
new BaseBean().writeLog("职位更新后:" + JSON.toJSONString(jobDto));
|
||||
});
|
||||
}
|
||||
|
||||
// 在启动监听前需要配置好简历接收回调
|
||||
client.addResumeSavedListener(resumeMqMessage -> {
|
||||
// 处理获取到的简历信息
|
||||
new BaseBean().writeLog("【简历接收回调】:" + JSON.toJSONString(resumeMqMessage));
|
||||
baseBean.writeLog("【简历接收回调】:" + JSON.toJSONString(resumeMqMessage));
|
||||
Thread thread = new Thread(new SdkResumeSavedThread(resumeMqMessage));
|
||||
thread.start();
|
||||
});
|
||||
|
|
@ -87,28 +98,28 @@ public class ReleasePositionModeExpand extends AbstractModeExpandJavaCodeNew {
|
|||
|
||||
client.start();
|
||||
List<Integer> platformIds;
|
||||
platformIds = resumeJobDto.getPlatformIds();
|
||||
platformIds = resumeJobDto.getPlatformList();
|
||||
String errorMsg = "";
|
||||
for (Integer platformId : platformIds) {
|
||||
ResumeTaskResult result = client.releaseResumeJob(userId, jobId, platformId);
|
||||
// 直接查看结果,正在执行中会返回PENGING,成功后会返回SUCCEED,失败后会返回FAILED
|
||||
TaskResult current = result.getResult();
|
||||
new BaseBean().writeLog(current);
|
||||
baseBean.writeLog(current);
|
||||
// 使用回调函数获取成功或者失败时的消息
|
||||
result.onResult(() -> {
|
||||
new BaseBean().writeLog("执行成功回调");
|
||||
baseBean.writeLog("执行成功回调");
|
||||
}, (reason) -> {
|
||||
new BaseBean().writeLog("执行失败回调,原因:" + reason);
|
||||
baseBean.writeLog("执行失败回调,原因:" + reason);
|
||||
});
|
||||
|
||||
// 等待直到状态不再是PENDING
|
||||
TaskResult taskResult = result.waitResult();
|
||||
new BaseBean().writeLog(taskResult);
|
||||
baseBean.writeLog(taskResult);
|
||||
if (taskResult == TaskResult.SUCCEED) {
|
||||
new BaseBean().writeLog("执行成功");
|
||||
baseBean.writeLog("执行成功");
|
||||
} else {
|
||||
errorMsg = "执行失败,原因:" + result.getFailReason();
|
||||
new BaseBean().writeLog(errorMsg);
|
||||
baseBean.writeLog(errorMsg);
|
||||
break;
|
||||
}
|
||||
}
|
||||
|
|
@ -127,7 +138,7 @@ public class ReleasePositionModeExpand extends AbstractModeExpandJavaCodeNew {
|
|||
}
|
||||
}
|
||||
} catch (Exception e) {
|
||||
new BaseBean().writeLog(e);
|
||||
baseBean.writeLog(e);
|
||||
resultMap.put("errmsg", e.getMessage());
|
||||
resultMap.put("flag", "false");
|
||||
}
|
||||
|
|
|
|||
|
|
@ -37,14 +37,14 @@ public class StageDataInsert {
|
|||
// modedatacreatetime
|
||||
paramsList.add(dateSplit[1]);
|
||||
// modedatamodifier
|
||||
paramsList.add(null);
|
||||
//paramsList.add(null);
|
||||
// modedatamodifydatetime
|
||||
paramsList.add(null);
|
||||
//paramsList.add(null);
|
||||
// modedatacreatertype
|
||||
paramsList.add("0");
|
||||
|
||||
String processIdsStr = StringUtils.join(Arrays.asList(processIds), ",");
|
||||
String insertSql = "insert into uf_jcl_zpjdsz (modeuuid, modedatacreater, modedatacreatedate, modedatacreatetime, modedatamodifier, modedatamodifydatetime, modedatacreatertype, formmodeid, jdmc, jdms, jdlx, hj, sfqy, zssx, zpjd, " + relateField + ") values (?, ?, ?, ?, ?, ?, ?, ?, ?, ?, ?, ?, ?, ?, ?, ?)";
|
||||
String insertSql = "insert into uf_jcl_zpjdsz (modeuuid, modedatacreater, modedatacreatedate, modedatacreatetime, modedatacreatertype, formmodeid, jdmc, jdms, jdlx, hj, sfqy, zssx, zpjd, " + relateField + ") values (?, ?, ?, ?, ?, ?, ?, ?, ?, ?, ?, ?, ?, ?)";
|
||||
if (StringUtils.isNotBlank(processIdsStr)) {
|
||||
insertMainTableData(creator, billId, processIdsStr, insertSql, paramsList);
|
||||
}
|
||||
|
|
|
|||
|
|
@ -24,11 +24,9 @@ import weaver.hrm.resource.ResourceComInfo;
|
|||
|
||||
import java.io.IOException;
|
||||
import java.io.InputStream;
|
||||
import java.nio.charset.StandardCharsets;
|
||||
import java.util.*;
|
||||
import java.util.regex.Matcher;
|
||||
import java.util.regex.Pattern;
|
||||
import java.util.stream.Collectors;
|
||||
|
||||
/**
|
||||
* @author:dxfeng
|
||||
|
|
@ -36,7 +34,15 @@ import java.util.stream.Collectors;
|
|||
* @version: 1.0
|
||||
*/
|
||||
public class RecruitModeUtil {
|
||||
private static final Pattern MSG_PATTERN = Pattern.compile(Pattern.quote("{") + "(.*?)" + Pattern.quote("}"));
|
||||
/**
|
||||
* 邮件、短信发送,替换内容正则表达式
|
||||
*/
|
||||
private static final Pattern EMAIL_PATTERN = Pattern.compile(Pattern.quote("{") + "(.*?)" + Pattern.quote("}"));
|
||||
/**
|
||||
* 消息中心,替换内容正则表达式
|
||||
*/
|
||||
private static final Pattern MSG_PATTERN = Pattern.compile(Pattern.quote("$") + "(.*?)" + Pattern.quote("$"));
|
||||
|
||||
|
||||
/**
|
||||
* 消息推送
|
||||
|
|
@ -87,17 +93,6 @@ public class RecruitModeUtil {
|
|||
}
|
||||
}
|
||||
|
||||
/**
|
||||
* 获取聚才林招聘相关配置文件
|
||||
*
|
||||
* @param key key
|
||||
* @return value
|
||||
*/
|
||||
public static String getRecruitPropValue(String key) {
|
||||
String value = new BaseBean().getPropValue("jclRecruit", key);
|
||||
value = new String(value.getBytes(StandardCharsets.ISO_8859_1), StandardCharsets.UTF_8);
|
||||
return value;
|
||||
}
|
||||
|
||||
/**
|
||||
* 转换空字符串为null
|
||||
|
|
@ -146,13 +141,13 @@ public class RecruitModeUtil {
|
|||
return FormInfoManager.getInstance().getAllField(formId);
|
||||
}
|
||||
|
||||
public static String getFieldShowName(Formfield formfield, String fieldName) {
|
||||
public static String getFieldShowName(Formfield formfield, String fieldValue) {
|
||||
User user = new User(1);
|
||||
return FieldHandler.getFieldValue(fieldName, formfield, true, user);
|
||||
return FieldHandler.getFieldValue(fieldValue, formfield, true, user);
|
||||
}
|
||||
|
||||
public static String getReplaceContent(String content, Map<String, List<Formfield>> fieldMapList, Map<String, Object> paramsData) {
|
||||
Matcher matcher = MSG_PATTERN.matcher(content);
|
||||
Matcher matcher = EMAIL_PATTERN.matcher(content);
|
||||
// 指定要匹配的字符串
|
||||
StringBuffer sb = new StringBuffer();
|
||||
while (matcher.find()) {
|
||||
|
|
@ -172,6 +167,30 @@ public class RecruitModeUtil {
|
|||
return sb.toString();
|
||||
}
|
||||
|
||||
/**
|
||||
* 消息中心,替换消息内容
|
||||
*
|
||||
* @param content
|
||||
* @param fieldMap
|
||||
* @param paramsData
|
||||
* @return
|
||||
*/
|
||||
public static String getMsgReplaceStr(String content, Map<String, Formfield> fieldMap, Map<String, Object> paramsData) {
|
||||
Matcher matcher = MSG_PATTERN.matcher(content);
|
||||
// 指定要匹配的字符串
|
||||
StringBuffer sb = new StringBuffer();
|
||||
while (matcher.find()) {
|
||||
String replace = matcher.group(1);
|
||||
|
||||
Formfield formfield = fieldMap.get(replace);
|
||||
String replaceValue = Util.null2String(paramsData.get(formfield.getFieldname().toLowerCase()));
|
||||
String fieldShowName = RecruitModeUtil.getFieldShowName(formfield, replaceValue).replaceAll("<[^>]*>", "");
|
||||
matcher.appendReplacement(sb, Util.null2String(fieldShowName));
|
||||
}
|
||||
matcher.appendTail(sb);
|
||||
return sb.toString();
|
||||
}
|
||||
|
||||
/**
|
||||
* 附件imageFieldId生成docId
|
||||
*
|
||||
|
|
@ -266,51 +285,6 @@ public class RecruitModeUtil {
|
|||
return StringUtils.join(imageFileIds, ",");
|
||||
}
|
||||
|
||||
|
||||
/**
|
||||
* @Author ml
|
||||
* @Date 2023/10/23 18:21
|
||||
* @Description 根据建模表名称获取列名称
|
||||
* @Param [tableName]
|
||||
* @Return Map<Object, List < Map < String, Object>>>
|
||||
*/
|
||||
public static Map<String, Object> getModeColumns(String tableName) {
|
||||
RecordSet rs = new RecordSet();
|
||||
List<Map<String, String>> mapList = new ArrayList<>();
|
||||
Map<String, String> tmpMap = new HashMap<>(16);
|
||||
rs.executeQuery("select b.FIELDNAME,b.VIEWTYPE from workflow_bill a left join workflow_billfield b on a.id = b.BILLID where a.TABLENAME = ?", tableName);
|
||||
while (rs.next()) {
|
||||
tmpMap.put("fieldname", rs.getString("FIELDNAME"));
|
||||
tmpMap.put("viewtype", rs.getString("VIEWTYPE"));
|
||||
mapList.add(tmpMap);
|
||||
}
|
||||
Map<String, List<Map<String, String>>> dataMap = mapList.stream().collect(Collectors.groupingBy(item -> item.get("viewtype")));
|
||||
Map<String, Object> resMap = new HashMap<>();
|
||||
for (String key : dataMap.keySet()) {
|
||||
resMap.put(key, dataMap.get(key).stream().map(Map -> Map.get("fieldname")).collect(Collectors.toList()));
|
||||
}
|
||||
return resMap;
|
||||
}
|
||||
|
||||
|
||||
public static String getQuerySql(String tableName) {
|
||||
Map<String, Object> params = getModeColumns(tableName);
|
||||
String fieldSql = "";
|
||||
StringBuilder whereSql = new StringBuilder();
|
||||
whereSql.append(tableName).append(" t0");
|
||||
for (String key : params.keySet()) {
|
||||
List<String> oldlist = (List<String>) params.get(key);
|
||||
List<String> list = new ArrayList<>();
|
||||
oldlist.forEach(field -> list.add("t" + key + "." + field));
|
||||
fieldSql = StringUtils.join(list, ",");
|
||||
if ("0".equals(key)) {
|
||||
continue;
|
||||
}
|
||||
whereSql.append(" left join ").append(tableName).append("_dt").append(key).append(" ").append("t").append(key).append(" on t0.id=").append("t").append(key).append(".mainid");
|
||||
}
|
||||
return "select " + fieldSql + " from " + whereSql + " where t0.id=?";
|
||||
}
|
||||
|
||||
/**
|
||||
* 获取邮件模板主题
|
||||
*
|
||||
|
|
|
|||
|
|
@ -7,10 +7,13 @@ import com.engine.recruit.enums.PositionThirdChannelEnum;
|
|||
import com.engine.recruit.exception.CustomizeRunTimeException;
|
||||
import com.weaver.rpa.sdk.clients.application.resume.ERPAResumeSDKClient;
|
||||
import com.weaver.rpa.sdk.clients.application.resume.common.ResumePlatform;
|
||||
import com.weaver.rpa.sdk.clients.application.resume.entity.ResumeJobDto;
|
||||
import com.weaver.rpa.sdk.clients.application.resume.entity.ResumeJobDynamicField;
|
||||
import com.weaver.rpa.sdk.clients.application.resume.entity.ResumeJobV2Dto;
|
||||
import com.weaver.rpa.sdk.utils.HttpClientUtils;
|
||||
import org.apache.commons.lang3.StringUtils;
|
||||
import weaver.conn.RecordSet;
|
||||
import weaver.general.BaseBean;
|
||||
import weaver.general.Util;
|
||||
|
||||
import java.text.ParseException;
|
||||
import java.text.SimpleDateFormat;
|
||||
|
|
@ -26,26 +29,43 @@ import java.util.*;
|
|||
public class RecruitPositionUtil {
|
||||
|
||||
/**
|
||||
* 将Map转换成ResumeJobDto对象
|
||||
* 将Map转换成ResumeJobV2Dto对象
|
||||
*
|
||||
* @param map 数据集合
|
||||
* @return ResumeJobDto对象
|
||||
* @return ResumeJobV2Dto
|
||||
*/
|
||||
public static ResumeJobDto convertMap2ResumeJobDto(Map<String, Object> map) {
|
||||
String positionName = Convert.toStr(map.get("zpzwmc"));//职位名称
|
||||
String positionDuty = Convert.toStr(map.get("gwzz"));//职位职责
|
||||
String finishTime = Convert.toStr(map.get("zpjzrq"));//完成时间
|
||||
String education = ApplicantCommonInfo.getRecruitCommonBrowserValue(Convert.toStr(map.get("zdxlyq")));//学历要求
|
||||
String workYears = ApplicantCommonInfo.getRecruitCommonBrowserValue(Convert.toStr(map.get("gznx")));//工作年限
|
||||
String positionNature = ApplicantCommonInfo.getRecruitCommonBrowserValue(Convert.toStr(map.get("zwxz")));//职位性质
|
||||
Integer salaryMin = Convert.toInt(map.get("zdxzk"), 0);//最低薪酬
|
||||
Integer salaryMax = Convert.toInt(map.get("zgxzk"), 0);// 最高薪酬
|
||||
Integer xcyfs = Convert.toInt(map.get("xzyfs"), 12);// 薪酬月份数
|
||||
Integer workingDays = Convert.toInt(map.get("sxmzdgts"), 1);// 实习每周到岗天数
|
||||
Integer internshipDuration = Convert.toInt(map.get("sxscy"), 1);// 实习时长(月)
|
||||
String jobCategory = "不限";//职位类别
|
||||
public static ResumeJobV2Dto convertMap2ResumeJobV2Dto(Map<String, Object> map) {
|
||||
// 职位名称
|
||||
String positionName = Convert.toStr(map.get("zpzwmc"));
|
||||
// 职位职责
|
||||
String positionDuty = Convert.toStr(map.get("gwzz"));
|
||||
// 任职要求
|
||||
String jobRequirements = Convert.toStr(map.get("rzyq"));
|
||||
// 完成时间
|
||||
String finishTime = Convert.toStr(map.get("zpjzrq"));
|
||||
// 学历要求
|
||||
String education = ApplicantCommonInfo.getRecruitCommonBrowserValue(Convert.toStr(map.get("zdxlyq")));
|
||||
// 工作年限
|
||||
String workYears = ApplicantCommonInfo.getRecruitCommonBrowserValue(Convert.toStr(map.get("gznx")));
|
||||
// 职位性质
|
||||
String positionNature = ApplicantCommonInfo.getRecruitCommonBrowserValue(Convert.toStr(map.get("zwxz")));
|
||||
// 最低薪酬
|
||||
Integer salaryMin = Convert.toInt(map.get("zdxzk"), 0);
|
||||
// 最高薪酬
|
||||
Integer salaryMax = Convert.toInt(map.get("zgxzk"), 0);
|
||||
// 薪酬月份数
|
||||
Integer xcyfs = Convert.toInt(map.get("xzyfs"), 12);
|
||||
// 实习每周到岗天数
|
||||
Integer workingDays = Convert.toInt(map.get("sxmzdgts"), 1);
|
||||
// 实习时长(月)
|
||||
Integer internshipDuration = Convert.toInt(map.get("sxscy"), 1);
|
||||
// 招聘人数
|
||||
Integer zprs = Convert.toInt(map.get("zprs"), 1);
|
||||
// 职位类别
|
||||
String jobCategory = "不限";
|
||||
|
||||
int experienceValue = -1;//不限
|
||||
//不限
|
||||
int experienceValue = -1;
|
||||
if ("应届毕业生".equals(workYears)) {
|
||||
experienceValue = 1;
|
||||
} else if ("一年以内".equals(workYears)) {
|
||||
|
|
@ -61,7 +81,8 @@ public class RecruitPositionUtil {
|
|||
}
|
||||
|
||||
|
||||
int educationValue = -1; //不限
|
||||
//不限
|
||||
int educationValue = -1;
|
||||
if ("博士".equals(education)) {
|
||||
educationValue = 8;
|
||||
} else if ("MBA/EMBA".equals(education)) {
|
||||
|
|
@ -80,7 +101,8 @@ public class RecruitPositionUtil {
|
|||
educationValue = 1;
|
||||
}
|
||||
|
||||
int resumeType = 1;// 兼职、全职
|
||||
// 社招(全职、兼职、其他)
|
||||
int resumeType = 1;
|
||||
if ("实习".equals(positionNature)) {
|
||||
resumeType = 3;
|
||||
} else if ("校招".equals(positionNature)) {
|
||||
|
|
@ -89,44 +111,151 @@ public class RecruitPositionUtil {
|
|||
|
||||
|
||||
// 招聘职位类型与特殊设置字段
|
||||
ResumeJobDto resumeJobDto = new ResumeJobDto();
|
||||
resumeJobDto.setResumeType(resumeType); // (必填,默认社招)招聘类型 1:社招 2:校招 3:实习
|
||||
ResumeJobV2Dto resumeJobV2Dto = new ResumeJobV2Dto();
|
||||
// (必填,默认社招)招聘类型 1:社招 2:校招 3:实习
|
||||
resumeJobV2Dto.setResumeType(resumeType);
|
||||
if (2 == resumeType && StringUtils.isBlank(finishTime)) {
|
||||
throw new CustomizeRunTimeException("校招招聘截止时间必填");
|
||||
}
|
||||
resumeJobDto.setStopReumeTimeLong(stringTurnLong(finishTime));// (校招必填)仅校招: 招聘截止时间(时间戳)
|
||||
resumeJobDto.setRequirementsTime(internshipDuration); // (实习必填,默认1个月)仅实习: 实习时长 1~12 单位:(月)
|
||||
resumeJobDto.setWorkDate(workingDays); // (实习必填,默认1天)仅实习: 每周到岗天数 1~7 单位:(天)
|
||||
|
||||
// (校招必填)仅校招: 招聘截止时间(时间戳)
|
||||
resumeJobV2Dto.setStopReumeTimeLong(stringTurnLong(finishTime));
|
||||
// (实习必填,默认1个月)仅实习: 实习时长 1~12 单位:(月)
|
||||
resumeJobV2Dto.setRequirementsTime(internshipDuration);
|
||||
// (实习必填,默认1天)仅实习: 每周到岗天数 1~7 单位:(天)
|
||||
resumeJobV2Dto.setWorkDate(workingDays);
|
||||
|
||||
// 招聘职位基本描述
|
||||
resumeJobDto.setJobname(positionName); // 配置职位名称
|
||||
resumeJobDto.setJobdesc(positionDuty); // 配置职位描述
|
||||
resumeJobDto.setJobType(jobCategory); // 配置职位类别
|
||||
// 配置职位名称
|
||||
resumeJobV2Dto.setJobname(positionName);
|
||||
String jobDescription = "";
|
||||
if (StringUtils.isNotBlank(positionDuty)) {
|
||||
jobDescription += "职位职责:\n" + positionDuty + "\n\n";
|
||||
}
|
||||
if (StringUtils.isNotBlank(jobRequirements)) {
|
||||
jobDescription += "任职要求:\n" + jobRequirements;
|
||||
}
|
||||
// 配置职位描述
|
||||
resumeJobV2Dto.setJobdesc(jobDescription);
|
||||
// 配置职位类别
|
||||
List<ResumeJobDynamicField.Item> items = new ArrayList<>();
|
||||
ResumeJobDynamicField.Item item = new ResumeJobDynamicField.Item();
|
||||
item.setLabel("0");
|
||||
item.setValue(jobCategory);
|
||||
resumeJobV2Dto.setJobType(items);
|
||||
|
||||
// 招聘职位条件
|
||||
//resumeJobDto.setKeywordStr(Lists.newArrayList("java")); // 职位关键词
|
||||
resumeJobDto.setExperience(experienceValue); // (必填,默认不限)经验要求(实习无此字段) -1:不限 1:一年以下 2:1~3年 3:3~5年 5:5~10年 6:10年以上
|
||||
resumeJobDto.setEducation(educationValue); // (必填,默认不限)学历要求 -1:不限 1:初中及以下 2:高中 3:中专/中技 4:大专 5:本科 6:硕士 7:MBA/EMBA 8:博士
|
||||
// (必填,默认不限)经验要求(实习无此字段) -1:不限 1:一年以下 2:1~3年 3:3~5年 5:5~10年 6:10年以上
|
||||
resumeJobV2Dto.setExperience(experienceValue);
|
||||
// (必填,默认不限)学历要求 -1:不限 1:初中及以下 2:高中 3:中专/中技 4:大专 5:本科 6:硕士 7:MBA/EMBA 8:博士
|
||||
resumeJobV2Dto.setEducation(educationValue);
|
||||
|
||||
//薪资福利
|
||||
resumeJobDto.setExpectSalaryStart(salaryMin); // (必填)薪资范围开始 单位:(社招/校招: 千元/月 实习:元/日)
|
||||
resumeJobDto.setExpectSalaryStop(salaryMax); // (必填)薪资范围截止 单位:(社招/校招: 千元/月 实习:元/日)
|
||||
resumeJobDto.setExpectSalaryMonth(xcyfs); // (必填,默认12个月)薪资月份数(实习无此字段) 12~24
|
||||
// (必填)薪资范围开始 单位:(社招/校招: 千元/月 实习:元/日)
|
||||
resumeJobV2Dto.setExpectSalaryStart(salaryMin);
|
||||
// (必填)薪资范围截止 单位:(社招/校招: 千元/月 实习:元/日)
|
||||
resumeJobV2Dto.setExpectSalaryStop(salaryMax);
|
||||
// (必填,默认12个月)薪资月份数(实习无此字段) 12~24
|
||||
resumeJobV2Dto.setExpectSalaryMonth(xcyfs);
|
||||
|
||||
// (必填)要发布的渠道(平台)Id
|
||||
List<Integer> platformIds = matchPlatform(Convert.toStr(map.get("dsfqd")));
|
||||
resumeJobDto.setPlatformIds(platformIds);
|
||||
resumeJobV2Dto.setPlatformList(platformIds);
|
||||
|
||||
// 简历匹配度设置
|
||||
resumeJobDto.setMappingageStart(-1); // (必填,默认不限)匹配年龄age开始 -1:不限
|
||||
resumeJobDto.setMappingageStop(-1);// (必填,默认不限)匹配年龄age开始 -1:不限
|
||||
resumeJobDto.setMappingSex(-1);// (必填,默认不限)匹配性别 -1:不限 0:女 1:男
|
||||
resumeJobDto.setMappingeducationStr(Collections.singletonList(-1));// (必填,默认不限)匹配学历 -1:不限 1:初中及以下 2:高中 3:中专/中技 4:大专 5:本科 6:硕士 7:MBA/EMBA 8:博士
|
||||
resumeJobDto.setMappingexperienceStr(Collections.singletonList(-1));// (必填,默认不限)匹配经验 -1:不限 1:1年内 2:1~3年 3:3~5年 4:5~10年 5:10年以上
|
||||
// resumeJobDto.setMappingKeywordStr(Lists.newArrayList()); // 匹配关键词内容
|
||||
resumeJobDto.setMappingStatus(1); // (必填,默认任一命中)匹配模式 1:任一命中 2:全部命中
|
||||
// (必填,默认不限)匹配年龄age开始 -1:不限
|
||||
resumeJobV2Dto.setMappingageStart(-1);
|
||||
// (必填,默认不限)匹配年龄age开始 -1:不限
|
||||
resumeJobV2Dto.setMappingageStop(-1);
|
||||
// (必填,默认不限)匹配性别 -1:不限 0:女 1:男
|
||||
resumeJobV2Dto.setMappingSex(-1);
|
||||
// (必填,默认不限)匹配学历 -1:不限 1:初中及以下 2:高中 3:中专/中技 4:大专 5:本科 6:硕士 7:MBA/EMBA 8:博士
|
||||
resumeJobV2Dto.setMappingeducationStr(Collections.singletonList(-1));
|
||||
// (必填,默认不限)匹配经验 -1:不限 1:1年内 2:1~3年 3:3~5年 4:5~10年 5:10年以上
|
||||
resumeJobV2Dto.setMappingexperienceStr(Collections.singletonList(-1));
|
||||
|
||||
return resumeJobDto;
|
||||
String zwgjc = Util.null2String(map.get("zwgjc"));
|
||||
List<String> zwgjcList = new ArrayList<>();
|
||||
if (StringUtils.isNotBlank(zwgjc)) {
|
||||
zwgjcList.addAll(Arrays.asList(zwgjc.split("、")));
|
||||
}
|
||||
// 匹配关键词内容
|
||||
resumeJobV2Dto.setMappingKeywordStr(zwgjcList);
|
||||
// 职位关键词
|
||||
resumeJobV2Dto.setKeywordStr(zwgjcList);
|
||||
// (必填,默认任一命中)匹配模式 1:任一命中 2:全部命中
|
||||
resumeJobV2Dto.setMappingStatus(1);
|
||||
resumeJobV2Dto.setBizVersion(1);
|
||||
|
||||
// 海外经历 ["海外工作经历", "海外教育背景"]
|
||||
List<String> hwjlList = new ArrayList<>();
|
||||
String hwjl = Util.null2String(map.get("hwjl"));
|
||||
if (StringUtils.isNotBlank(hwjl)) {
|
||||
String[] split = hwjl.split(",");
|
||||
List<String> strings = Arrays.asList(split);
|
||||
if (strings.contains("0")) {
|
||||
hwjlList.add("海外工作经历");
|
||||
}
|
||||
if (strings.contains("1")) {
|
||||
hwjlList.add("海外教育背景");
|
||||
}
|
||||
}
|
||||
|
||||
resumeJobV2Dto.setHwjl(hwjlList);
|
||||
|
||||
/*
|
||||
*BOSS直聘必填字段
|
||||
*/
|
||||
// 毕业时间-开始 boss校招必填
|
||||
String bysjks = Util.null2String(map.get("bysjks"));
|
||||
resumeJobV2Dto.setBysjStart(bysjks);
|
||||
// 毕业时间-结束 boss校招必填
|
||||
String bysjjs = Util.null2String(map.get("bysjjs"));
|
||||
resumeJobV2Dto.setBysjEnd(bysjjs);
|
||||
|
||||
/*
|
||||
* 前程无忧必填
|
||||
*/
|
||||
// 发布城市
|
||||
List<String> cityList = new ArrayList<>();
|
||||
String fbcs = Util.null2String(map.get("fbcs"));
|
||||
RecordSet rs = new RecordSet();
|
||||
rs.executeQuery("select cityname from hrmcity where id = ?", fbcs);
|
||||
if (rs.next()) {
|
||||
String cityName = rs.getString("cityname");
|
||||
cityList.add(cityName);
|
||||
}
|
||||
resumeJobV2Dto.setFbcs(cityList);
|
||||
// 所属行业
|
||||
String sshy = Util.null2String(map.get("szhy"));
|
||||
List<String> sshyList = new ArrayList<>();
|
||||
if (StringUtils.isNotBlank(sshy)) {
|
||||
sshyList.addAll(Arrays.asList(sshy.split("、")));
|
||||
}
|
||||
resumeJobV2Dto.setSshy(Collections.singletonList(sshyList));
|
||||
|
||||
/*
|
||||
* 猎聘必填 智联必填
|
||||
*/
|
||||
// 招聘人数
|
||||
resumeJobV2Dto.setZprs(zprs);
|
||||
|
||||
/*
|
||||
* 拉勾必填
|
||||
*/
|
||||
// 职位亮点
|
||||
resumeJobV2Dto.setZwld(Util.null2String(map.get("zwld")));
|
||||
// 行业领域
|
||||
String hyly = Util.null2String(map.get("hyly"));
|
||||
List<String> hylyList = new ArrayList<>();
|
||||
if (StringUtils.isNotBlank(hyly)) {
|
||||
hylyList.addAll(Arrays.asList(hyly.split("、")));
|
||||
}
|
||||
resumeJobV2Dto.setHyly(hylyList);
|
||||
|
||||
|
||||
return resumeJobV2Dto;
|
||||
}
|
||||
|
||||
/**
|
||||
|
|
|
|||
|
|
@ -1,5 +1,6 @@
|
|||
package weaver.formmode.recruit.modeexpand.written;
|
||||
|
||||
import com.engine.recruit.conn.ApplicantCommonInfo;
|
||||
import com.engine.recruit.conn.RecruitRecordSet;
|
||||
import com.engine.recruit.util.RecruitMessageUtils;
|
||||
import com.weaver.formmodel.data.model.Formfield;
|
||||
|
|
@ -33,12 +34,8 @@ public class BatchAddWrittenResultModeExpand extends AbstractModeExpandJavaCodeN
|
|||
try {
|
||||
RequestInfo requestInfo = (RequestInfo) param.get("RequestInfo");
|
||||
if (requestInfo != null) {
|
||||
int formModeId = -1;
|
||||
RecordSet rs = new RecordSet();
|
||||
rs.executeQuery("select id from modeinfo where formid =( select id from workflow_bill where tablename = ? )", MODE_TABLE_NAME);
|
||||
if (rs.next()) {
|
||||
formModeId = rs.getInt("id");
|
||||
}
|
||||
int formModeId = ApplicantCommonInfo.getModeIdByTableName(MODE_TABLE_NAME);
|
||||
MainTableInfo mainTableInfo = requestInfo.getMainTableInfo();
|
||||
Property[] properties = mainTableInfo.getProperty();
|
||||
Map<String, Object> mainDataMap = new HashMap<>();
|
||||
|
|
|
|||
|
|
@ -3,10 +3,10 @@ package weaver.interfaces.recruit.action;
|
|||
import com.cloudstore.dev.api.bean.MessageBean;
|
||||
import com.cloudstore.dev.api.bean.MessageType;
|
||||
import com.cloudstore.dev.api.util.Util_Message;
|
||||
import com.engine.recruit.conn.ApplicantCommonInfo;
|
||||
import com.engine.recruit.conn.RecruitRecordSet;
|
||||
import org.apache.commons.collections.CollectionUtils;
|
||||
import weaver.common.DateUtil;
|
||||
import weaver.conn.RecordSet;
|
||||
import weaver.conn.RecordSetTrans;
|
||||
import weaver.formmode.recruit.modeexpand.util.RecruitModeUtil;
|
||||
import weaver.formmode.setup.ModeRightInfo;
|
||||
|
|
@ -54,12 +54,7 @@ public class RecruitFlowToModeAction implements Action {
|
|||
Map<String, Object> mainMap = new HashMap<>(16);
|
||||
// 需求审批流程ID
|
||||
mainMap.put("xqsplc", requestInfo.getRequestid());
|
||||
int formModeId = -1;
|
||||
RecordSet rs = new RecordSet();
|
||||
rs.executeQuery("select id from modeinfo where formid =( select id from workflow_bill where tablename = ? )", MODE_TABLE_NAME);
|
||||
if (rs.next()) {
|
||||
formModeId = rs.getInt("id");
|
||||
}
|
||||
int formModeId = ApplicantCommonInfo.getModeIdByTableName(MODE_TABLE_NAME);
|
||||
|
||||
Property[] propertyArray = mainTableInfo.getProperty();
|
||||
for (Property property : propertyArray) {
|
||||
|
|
@ -131,7 +126,7 @@ public class RecruitFlowToModeAction implements Action {
|
|||
rst.commit();
|
||||
} catch (Exception e) {
|
||||
rst.rollback();
|
||||
new BaseBean().writeLog(e.getMessage());
|
||||
new BaseBean().writeLog(e);
|
||||
requestInfo.getRequestManager().setMessagecontent("接口动作【RecruitFlowToModeAction】执行异常");
|
||||
return FAILURE_AND_CONTINUE;
|
||||
}
|
||||
|
|
|
|||
|
|
@ -0,0 +1,501 @@
|
|||
package weaver.interfaces.recruit.cronjob;
|
||||
|
||||
import cn.hutool.core.convert.Convert;
|
||||
import com.api.cube.util.CubeCipherUitl;
|
||||
import com.engine.recruit.conn.ApplicantCommonInfo;
|
||||
import com.engine.recruit.conn.RecruitDataMap;
|
||||
import com.engine.recruit.conn.RecruitRecordSet;
|
||||
import com.engine.recruit.constant.ModeSearchCodeConstant;
|
||||
import com.engine.recruit.constant.RecruitConstant;
|
||||
import com.engine.recruit.exception.CustomizeRunTimeException;
|
||||
import org.apache.commons.lang3.StringUtils;
|
||||
import weaver.common.DateUtil;
|
||||
import weaver.conn.RecordSet;
|
||||
import weaver.formmode.recruit.modeexpand.util.RecruitModeUtil;
|
||||
import weaver.formmode.service.RemindJobService;
|
||||
import weaver.formmode.task.TaskService;
|
||||
import weaver.formmode.virtualform.VirtualFormHandler;
|
||||
import weaver.general.BaseBean;
|
||||
import weaver.general.Util;
|
||||
import weaver.hrm.resource.ResourceComInfo;
|
||||
import weaver.interfaces.schedule.BaseCronJob;
|
||||
|
||||
import java.util.*;
|
||||
import java.util.concurrent.ConcurrentHashMap;
|
||||
|
||||
/**
|
||||
* @author:dxfeng
|
||||
* @createTime: 2024/03/07
|
||||
* @version: 1.0
|
||||
*/
|
||||
public class ResumePushJob extends BaseCronJob {
|
||||
private final RemindJobService remindJobService = new RemindJobService();
|
||||
private final String remindHistoryTable = "uf_jcl_jldy";
|
||||
|
||||
private String currentDate;
|
||||
private String uuid;
|
||||
private Map<Integer, Set<String>> checkRepeatMap;
|
||||
private int remindHistoryModeId;
|
||||
|
||||
private String startDate;
|
||||
private String endDate;
|
||||
|
||||
public ResumePushJob() {
|
||||
|
||||
}
|
||||
|
||||
public ResumePushJob(String startDate, String endDate) {
|
||||
this.startDate = startDate;
|
||||
this.endDate = endDate;
|
||||
}
|
||||
|
||||
@Override
|
||||
public void execute() {
|
||||
BaseBean baseBean = new BaseBean();
|
||||
baseBean.writeLog("简历订阅推送任务开始...");
|
||||
currentDate = DateUtil.getFullDate();
|
||||
uuid = UUID.randomUUID().toString();
|
||||
checkRepeatMap = new HashMap<>();
|
||||
|
||||
|
||||
String sql = "";
|
||||
if (StringUtils.isNoneBlank(startDate, endDate)) {
|
||||
sql = "select t1.* from uf_jcl_yppc t1 where t1.tdsj >= '" + startDate + "' and t1.tdsj <='" + endDate + "'";
|
||||
} else {
|
||||
Calendar calendar = Calendar.getInstance(Locale.CHINA);
|
||||
Calendar limitDate = DateUtil.addMonth(calendar, -1);
|
||||
Date time = limitDate.getTime();
|
||||
String date = DateUtil.getDate(time);
|
||||
// 推送规则,针对一条简历订阅,首次设置订阅规则且启用的,筛选投递时间为一个月内的简历(简历表),后续为增量推送
|
||||
sql = "select t1.* from uf_jcl_yppc t1 where t1.tdsj >= '" + date + "' ";
|
||||
}
|
||||
RecordSet rs = new RecordSet();
|
||||
|
||||
|
||||
remindHistoryModeId = ApplicantCommonInfo.getModeIdByTableName(remindHistoryTable);
|
||||
// 建模ID
|
||||
int modeId = ApplicantCommonInfo.getModeIdByTableName("uf_jcl_yppc");
|
||||
// 简历订阅规则设置,页面拓展ID
|
||||
String pageExpand = "";
|
||||
rs.executeQuery("select id from mode_pageexpand where modeid = ? and expendname = ?", modeId, "简历订阅规则设置");
|
||||
if (rs.next()) {
|
||||
pageExpand = rs.getString("id");
|
||||
}
|
||||
if (StringUtils.isBlank(pageExpand)) {
|
||||
throw new CustomizeRunTimeException("未获取到对应的页面拓展配置信息");
|
||||
}
|
||||
|
||||
// 查询所有的消息提醒类型的页面拓展
|
||||
String taskSql = "select id from mode_timedtask_detail where isenable='1' and id in (select taskdetailid from mode_pageexpanddetail where interfacetype='5' and mainid=?)";
|
||||
|
||||
rs.executeQuery(taskSql, pageExpand);
|
||||
List<Map<String, Object>> taskDetailList = RecruitRecordSet.getRecordMapList(rs);
|
||||
Map<Integer, Integer> remindCountJob = new ConcurrentHashMap<>();
|
||||
|
||||
baseBean.writeLog("简历订阅推送任务生成列表数据...");
|
||||
for (Map<String, Object> map : taskDetailList) {
|
||||
String taskDetailId = Util.null2String(map.get("id"));
|
||||
Map<String, Object> taskDetailMap = remindJobService.getTaskDetailById(Convert.toInt(taskDetailId));
|
||||
String conditionsType = Util.null2String(taskDetailMap.get("conditionstype"));
|
||||
String whereSql = "";
|
||||
if ("1".equals(conditionsType)) {
|
||||
whereSql = Util.null2String(taskDetailMap.get("conditionsfield"));
|
||||
} else if ("2".equals(conditionsType)) {
|
||||
whereSql = Util.null2String(taskDetailMap.get("conditionssql"));
|
||||
}
|
||||
rs.executeQuery(sql + (StringUtils.isNotBlank(whereSql) ? " and (" + whereSql + ")" : ""));
|
||||
List<Map<String, Object>> recordMapList = RecruitRecordSet.getRecordMapList(rs);
|
||||
for (Map<String, Object> recordMap : recordMapList) {
|
||||
String billId = Util.null2String(recordMap.get("id"));
|
||||
// 判断当前规则,有无推送过这条数据,同一规则,不重复推送数据
|
||||
boolean push = isPush(billId, taskDetailId);
|
||||
if (!push) {
|
||||
continue;
|
||||
}
|
||||
// 该规则推送的人员ID集合
|
||||
Set<Integer> remindUserList = getRemindUserSet(taskDetailMap, billId);
|
||||
// 统计每个人推送多少条数据
|
||||
for (Integer remindUserId : remindUserList) {
|
||||
// 插入订阅历史表数据
|
||||
insertPushHistory(recordMap, remindUserId, remindCountJob);
|
||||
}
|
||||
|
||||
}
|
||||
|
||||
|
||||
}
|
||||
// 简历订阅列表URL
|
||||
String remindSearchLink = ApplicantCommonInfo.getCustomSearchLink(ModeSearchCodeConstant.RESUME_SUBSCRIPTION, RecruitConstant.REMIND_SEARCH_LINK);
|
||||
if (StringUtils.isNotBlank(remindSearchLink)) {
|
||||
remindSearchLink += "&uuid=" + uuid;
|
||||
}
|
||||
|
||||
baseBean.writeLog("简历订阅推送任务发送消息提醒...");
|
||||
// 给每个人推送当前规则的代办
|
||||
for (Map.Entry<Integer, Integer> entry : remindCountJob.entrySet()) {
|
||||
Integer key = entry.getKey();
|
||||
Integer value = entry.getValue();
|
||||
// 发送代办
|
||||
Set<String> userIds = new HashSet<>(1);
|
||||
userIds.add(Integer.toString(key));
|
||||
RecruitModeUtil.messagePush(RecruitConstant.RECRUIT_MESSAGE_TYPE, "简历订阅推送提醒", "有{" + value.toString() + "}条简历推送给您,请查阅。", userIds, 1, remindSearchLink, "");
|
||||
}
|
||||
baseBean.writeLog("简历订阅推送任务结束...");
|
||||
|
||||
}
|
||||
|
||||
|
||||
/**
|
||||
* 插入订阅历史表数据
|
||||
*
|
||||
* @param recordMap
|
||||
* @param remindUserId
|
||||
* @param remindCountJob
|
||||
*/
|
||||
private void insertPushHistory(Map<String, Object> recordMap, Integer remindUserId, Map<Integer, Integer> remindCountJob) {
|
||||
if (recordMap == null || recordMap.isEmpty()) {
|
||||
return;
|
||||
}
|
||||
String billId = Util.null2String(recordMap.get("id"));
|
||||
Set<String> hashSet = new HashSet<>();
|
||||
if (checkRepeatMap.containsKey(remindUserId)) {
|
||||
Set<String> containsSet = checkRepeatMap.get(remindUserId);
|
||||
if (containsSet.contains(billId)) {
|
||||
return;
|
||||
}
|
||||
hashSet.addAll(containsSet);
|
||||
}
|
||||
hashSet.add(billId);
|
||||
checkRepeatMap.put(remindUserId, hashSet);
|
||||
|
||||
RecruitDataMap<Object> insertDataMap = new RecruitDataMap<>();
|
||||
String modeUuid = UUID.randomUUID().toString();
|
||||
insertDataMap.put("modeuuid", modeUuid);
|
||||
insertDataMap.put("formmodeid", remindHistoryModeId);
|
||||
RecruitRecordSet.buildModeInsertFields(insertDataMap, 1);
|
||||
// 姓名
|
||||
insertDataMap.put("xm", billId);
|
||||
// 最近投递职位
|
||||
insertDataMap.put("zjtdzw", recordMap.get("ypzw"));
|
||||
// 性别
|
||||
insertDataMap.put("xb", recordMap.get("xb"));
|
||||
// 最高学历
|
||||
insertDataMap.put("zgxl", recordMap.get("zgxl"));
|
||||
// 工作经验
|
||||
insertDataMap.put("gzjy", recordMap.get("gzjy"));
|
||||
// 简历来源
|
||||
insertDataMap.put("jlly", recordMap.get("jlly"));
|
||||
// 推送时间
|
||||
insertDataMap.put("tssj", currentDate);
|
||||
// 接收人
|
||||
insertDataMap.put("jsr", remindUserId);
|
||||
// UUID
|
||||
insertDataMap.put("uuid", uuid);
|
||||
// 插入推送历史表
|
||||
RecruitRecordSet.insertData(insertDataMap, remindHistoryTable);
|
||||
// 权限重构
|
||||
int id = RecruitRecordSet.refreshRight(modeUuid, remindHistoryTable, remindHistoryModeId, 1);
|
||||
|
||||
// 统计每个人推送多少条数据
|
||||
if (id != -1) {
|
||||
remindCountJob.merge(remindUserId, 1, Integer::sum);
|
||||
}
|
||||
}
|
||||
|
||||
|
||||
/**
|
||||
* 获取当前数据,配置的提醒对象的ID集合
|
||||
*
|
||||
* @param remindJob
|
||||
* @param billid
|
||||
* @return
|
||||
*/
|
||||
private Set<Integer> getRemindUserSet(Map<String, Object> remindJob, String billid) {
|
||||
String formtype = Util.null2String(remindJob.get("formtype"));
|
||||
//字段id
|
||||
String id = Util.null2String(remindJob.get("id"));
|
||||
String modeid = Util.null2String(remindJob.get("modeid"));
|
||||
//表单id
|
||||
String formid = Util.null2String(remindJob.get("formid"));
|
||||
|
||||
|
||||
TaskService taskService = new TaskService();
|
||||
RecordSet rs = new RecordSet();
|
||||
RecordSet rs2 = new RecordSet();
|
||||
RecordSet rs3 = new RecordSet();
|
||||
RecordSet rs4 = new RecordSet();
|
||||
|
||||
|
||||
String tablename = "";
|
||||
String sqlStr = "select b.tablename from modeinfo a,workflow_bill b where a.id=" + modeid + " and a.formid=b.id";
|
||||
rs.executeQuery(sqlStr);
|
||||
if (rs.next()) {
|
||||
tablename = rs.getString("tablename");
|
||||
}
|
||||
// 判断是否为 虚拟表单;
|
||||
boolean isvirtualform = VirtualFormHandler.isVirtualForm(formid);
|
||||
String vdatasource = "";
|
||||
String vprimarykey = "";
|
||||
if (isvirtualform) {
|
||||
Map<String, Object> vFormInfo = VirtualFormHandler.getVFormInfo(formid);
|
||||
vdatasource = Util.null2String(vFormInfo.get("vdatasource"));
|
||||
vprimarykey = Util.null2String(vFormInfo.get("vprimarykey"));
|
||||
tablename = VirtualFormHandler.getRealFromName(tablename);
|
||||
String vformtype = Util.null2String(vFormInfo.get("vformtype"));
|
||||
String vsql = Util.null2String(vFormInfo.get("vsql"));
|
||||
if ("2".equals(vformtype)) {
|
||||
tablename = "(" + vsql + ")";
|
||||
}
|
||||
}
|
||||
|
||||
String sql;
|
||||
if (!"0".equals(formtype) && !"".equals(formtype)) {
|
||||
sql = "select t1.*,d1.id as subbillid from " + tablename + " t1 left join " + tablename + "_dt" + formtype + " d1 on t1.id = d1.mainid where t1.id=" + billid;
|
||||
} else {
|
||||
sql = " select * from " + tablename + " t1 where t1.id=" + billid;
|
||||
if (isvirtualform) {
|
||||
sql = " select * from " + tablename + " t1 where t1." + vprimarykey + "='" + billid + "'";
|
||||
}
|
||||
}
|
||||
//检验条件
|
||||
String sqlwhere = "";
|
||||
String conditionstype = Util.null2String(remindJob.get("conditionstype"));
|
||||
if ("1".equals(conditionstype)) {
|
||||
//字段
|
||||
String conditionsfield = Util.null2String(remindJob.get("conditionsfield"));
|
||||
if (!"".equals(conditionsfield)) {
|
||||
sqlwhere = " and (" + conditionsfield + ") ";
|
||||
}
|
||||
} else if ("2".equals(conditionstype)) {
|
||||
//sql
|
||||
String conditionssql = Util.null2String(remindJob.get("conditionssql"));
|
||||
if (!"".equals(conditionssql)) {
|
||||
sqlwhere = " and (" + conditionssql + ") ";
|
||||
}
|
||||
}
|
||||
if (!"".equals(sqlwhere)) {
|
||||
sql = sql + sqlwhere;
|
||||
}
|
||||
rs.isReturnDecryptData(true);
|
||||
if (isvirtualform) {
|
||||
rs.executeQuery(sql, vdatasource);
|
||||
} else {
|
||||
rs.executeQuery(sql);
|
||||
}
|
||||
|
||||
Set<Integer> userSet = new HashSet<>();
|
||||
String remind_rule_sql = "select * from remind_multi_ruleinfo where taskdetailid='" + id + "' order by receivertype,id ";
|
||||
while (rs.next()) {
|
||||
String subbillid = rs.getString("subbillid");
|
||||
List<Integer> userList = new ArrayList<>();
|
||||
rs3.execute(remind_rule_sql);
|
||||
while (rs3.next()) {
|
||||
String receivertype = rs3.getString("receivertype");
|
||||
String receiverdetail = rs3.getString("receiverdetail");
|
||||
String receiverlevel = rs3.getString("showlevel");
|
||||
String receiverlevel2 = rs3.getString("showlevel2");
|
||||
String receiverfieldtype = rs3.getString("receiverfieldtype");
|
||||
// 上级关系 1 当前人员, 2 直接上级, 3 所有上级, 4 本部门 ,5 本分部, 6 本岗位
|
||||
int remindhigherlevel = Util.getIntValue(rs3.getString("higherlevel"), 1);
|
||||
//1 :所有上级 2:所有下级
|
||||
int orgrelation = Util.getIntValue(rs3.getString("orgrelation"), 1);
|
||||
//----------------处理提醒人员-------------------
|
||||
if ("1".equals(receivertype)) {
|
||||
//人力资源
|
||||
userList = taskService.getRemind_ruleUserList(userList, Util.getIntValue(receivertype), receiverdetail, Util.getIntValue(receiverlevel), Util.getIntValue(receiverlevel2, -1));
|
||||
} else if ("2".equals(receivertype)) {
|
||||
//分部
|
||||
userList = taskService.getRemind_ruleUserList(userList, Util.getIntValue(receivertype), receiverdetail, Util.getIntValue(receiverlevel), Util.getIntValue(receiverlevel2, -1));
|
||||
} else if ("3".equals(receivertype)) {
|
||||
//部门
|
||||
userList = taskService.getRemind_ruleUserList(userList, Util.getIntValue(receivertype), receiverdetail, Util.getIntValue(receiverlevel), Util.getIntValue(receiverlevel2, -1));
|
||||
} else if ("4".equals(receivertype)) {
|
||||
//角色
|
||||
userList = taskService.getRemind_ruleUserList(userList, Util.getIntValue(receivertype), receiverdetail, Util.getIntValue(receiverlevel), Util.getIntValue(receiverlevel2, -1));
|
||||
} else if ("5".equals(receivertype)) {
|
||||
//所有人
|
||||
userList = taskService.getRemind_ruleUserList(userList, Util.getIntValue(receivertype), receiverdetail, Util.getIntValue(receiverlevel), Util.getIntValue(receiverlevel2, -1));
|
||||
} else if ("6".equals(receivertype)) {
|
||||
//模块创建人
|
||||
int modedatacreater = rs.getInt("modedatacreater");
|
||||
//考虑上级关系 1 当前人员, 2 直接上级, 3 所有上级, 4 本部门 ,5 本分部, 6 本岗位 remindhigherlevel
|
||||
if (remindhigherlevel == 1) {
|
||||
// 1 当前人员
|
||||
userList.add(modedatacreater);
|
||||
} else if (remindhigherlevel == 2) {
|
||||
// 2 直接上级
|
||||
try {
|
||||
ResourceComInfo rc = new ResourceComInfo();
|
||||
int manager = Util.getIntValue(rc.getManagerID("" + modedatacreater), 0);
|
||||
userList.add(manager);
|
||||
} catch (Exception e) {
|
||||
e.printStackTrace();
|
||||
}
|
||||
|
||||
} else if (remindhigherlevel == 3) {
|
||||
// 3 所有上级
|
||||
try {
|
||||
ResourceComInfo rc = new ResourceComInfo();
|
||||
String managers = rc.getAllManagerByUserId("" + modedatacreater);
|
||||
String[] ms = managers.split(",");
|
||||
for (String m : ms) {
|
||||
userList.add(Integer.parseInt(m));
|
||||
}
|
||||
|
||||
} catch (Exception e) {
|
||||
e.printStackTrace();
|
||||
}
|
||||
|
||||
} else if (remindhigherlevel == 4) {
|
||||
// 4 本部门
|
||||
// 考虑安全级别
|
||||
try {
|
||||
ResourceComInfo rc = new ResourceComInfo();
|
||||
String departmentID = rc.getDepartmentID("" + modedatacreater);
|
||||
userList = taskService.getRemind_ruleUserList(userList, 3, departmentID, Util.getIntValue(receiverlevel), Util.getIntValue(receiverlevel2, -1));
|
||||
} catch (Exception e) {
|
||||
e.printStackTrace();
|
||||
}
|
||||
|
||||
} else if (remindhigherlevel == 5) {
|
||||
// 5 本分部
|
||||
// 考虑安全级别
|
||||
try {
|
||||
ResourceComInfo rc = new ResourceComInfo();
|
||||
String subCompanyID = rc.getSubCompanyID("" + modedatacreater);
|
||||
userList = taskService.getRemind_ruleUserList(userList, 2, subCompanyID, Util.getIntValue(receiverlevel), Util.getIntValue(receiverlevel2, -1));
|
||||
} catch (Exception e) {
|
||||
e.printStackTrace();
|
||||
}
|
||||
|
||||
} else if (remindhigherlevel == 6) {
|
||||
// 6 本岗位
|
||||
try {
|
||||
ResourceComInfo rc = new ResourceComInfo();
|
||||
String jobTitle = rc.getJobTitle("" + modedatacreater);
|
||||
userList = taskService.getRemind_ruleUserList(userList, 6, jobTitle, Util.getIntValue(receiverlevel), Util.getIntValue(receiverlevel2, -1));
|
||||
} catch (Exception e) {
|
||||
e.printStackTrace();
|
||||
}
|
||||
}
|
||||
|
||||
} else if ("1000".equals(receivertype)) {
|
||||
//字段
|
||||
String objids = "";
|
||||
String sqlstr1 = "select id,fieldname,detailtable,viewtype from workflow_billfield where id in (" + receiverdetail + ")";
|
||||
rs4.executeQuery(sqlstr1);
|
||||
String tempFieldName;
|
||||
String viewtype;
|
||||
while (rs4.next()) {
|
||||
tempFieldName = rs4.getString("fieldname").toLowerCase();
|
||||
viewtype = Util.null2String(rs4.getString("viewtype"));
|
||||
if ("0".equals(viewtype)) {
|
||||
String val = CubeCipherUitl.decrypt(rs.getString(tempFieldName));
|
||||
if (StringUtils.isNotBlank(val)) {
|
||||
if ("".equals(objids)) {
|
||||
objids = val;
|
||||
} else {
|
||||
objids = objids + "," + val;
|
||||
}
|
||||
}
|
||||
} else if ("1".equals(viewtype)) {
|
||||
if (subbillid != null && !"".equals(subbillid)) {
|
||||
String psql = "select * from " + tablename + "_dt" + formtype + " where id=" + subbillid;
|
||||
rs2.executeQuery(psql);
|
||||
if (rs2.next()) {
|
||||
String val1 = CubeCipherUitl.decrypt(rs2.getString(tempFieldName));
|
||||
if (!"".equals(val1)) {
|
||||
if ("".equals(objids)) {
|
||||
objids = val1;
|
||||
} else {
|
||||
objids = objids + "," + val1;
|
||||
}
|
||||
}
|
||||
}
|
||||
}
|
||||
}
|
||||
}
|
||||
if ("1".equals(receiverfieldtype)) {
|
||||
//人力资源字段
|
||||
if (remindhigherlevel == 1) {
|
||||
//当前人员
|
||||
userList = taskService.getRemind_ruleUserList(userList, 1, objids, Util.getIntValue(receiverlevel), Util.getIntValue(receiverlevel2, -1));
|
||||
} else if (remindhigherlevel == 2) {
|
||||
// 2 直接上级
|
||||
userList = taskService.getRemind_ruleUserList(userList, 7, objids, Util.getIntValue(receiverlevel), Util.getIntValue(receiverlevel2, -1));
|
||||
} else if (remindhigherlevel == 3) {
|
||||
// 3 所有上级
|
||||
userList = taskService.getRemind_ruleUserList(userList, 8, objids, Util.getIntValue(receiverlevel), Util.getIntValue(receiverlevel2, -1));
|
||||
} else if (remindhigherlevel == 4) {
|
||||
// 4 本部门
|
||||
// 考虑安全级别
|
||||
// 获取 当前字段的部门id
|
||||
objids = taskService.getDeptOrCompany(objids, "1");
|
||||
userList = taskService.getRemind_ruleUserList(userList, 3, objids, Util.getIntValue(receiverlevel), Util.getIntValue(receiverlevel2, -1));
|
||||
} else if (remindhigherlevel == 5) {
|
||||
// 5 本分部
|
||||
// 考虑安全级别
|
||||
// 获取 当前字段的分部id
|
||||
objids = taskService.getDeptOrCompany(objids, "2");
|
||||
userList = taskService.getRemind_ruleUserList(userList, 2, objids, Util.getIntValue(receiverlevel), Util.getIntValue(receiverlevel2, -1));
|
||||
} else if (remindhigherlevel == 6) {
|
||||
// 6 本岗位
|
||||
// 获取 当前字段的岗位id
|
||||
objids = taskService.getDeptOrCompany(objids, "3");
|
||||
userList = taskService.getRemind_ruleUserList(userList, 6, objids, Util.getIntValue(receiverlevel), Util.getIntValue(receiverlevel2, -1));
|
||||
}
|
||||
} else if ("2".equals(receiverfieldtype)) {
|
||||
//部门
|
||||
if (orgrelation == 0) {
|
||||
userList = taskService.getRemind_ruleUserList(userList, 3, objids, Util.getIntValue(receiverlevel), Util.getIntValue(receiverlevel2, -1));
|
||||
} else if (orgrelation == 1) {
|
||||
//所有上级
|
||||
userList = taskService.getRemind_ruleUserList(userList, 9, objids, Util.getIntValue(receiverlevel), Util.getIntValue(receiverlevel2, -1));
|
||||
} else if (orgrelation == 2) {
|
||||
//所有下级
|
||||
userList = taskService.getRemind_ruleUserList(userList, 10, objids, Util.getIntValue(receiverlevel), Util.getIntValue(receiverlevel2, -1));
|
||||
}
|
||||
} else if ("3".equals(receiverfieldtype)) {
|
||||
//分部
|
||||
if (orgrelation == 0) {
|
||||
userList = taskService.getRemind_ruleUserList(userList, 2, objids, Util.getIntValue(receiverlevel), Util.getIntValue(receiverlevel2, -1));
|
||||
} else if (orgrelation == 1) {
|
||||
//所有上级
|
||||
userList = taskService.getRemind_ruleUserList(userList, 11, objids, Util.getIntValue(receiverlevel), Util.getIntValue(receiverlevel2, -1));
|
||||
} else if (orgrelation == 2) {
|
||||
//所有下级
|
||||
userList = taskService.getRemind_ruleUserList(userList, 12, objids, Util.getIntValue(receiverlevel), Util.getIntValue(receiverlevel2, -1));
|
||||
}
|
||||
}
|
||||
}
|
||||
}
|
||||
userSet.addAll(userList);
|
||||
}
|
||||
return userSet;
|
||||
}
|
||||
|
||||
private boolean isPush(String billId, String taskDetailId) {
|
||||
RecordSet recordSet = new RecordSet();
|
||||
recordSet.executeQuery("select dygz from uf_jcl_jltsjl where ypz = ? ", billId);
|
||||
if (recordSet.next()) {
|
||||
String dygz = recordSet.getString("dygz");
|
||||
String[] split = dygz.split(",");
|
||||
List<String> taskIdList = Arrays.asList(split);
|
||||
if (taskIdList.contains(taskDetailId)) {
|
||||
return false;
|
||||
} else {
|
||||
// 更新简历推送记录表
|
||||
Set<String> list = new HashSet<>(taskIdList);
|
||||
list.add(taskDetailId);
|
||||
String taskIds = StringUtils.join(list, ",");
|
||||
recordSet.executeUpdate("update uf_jcl_jltsjl set dygz = ? where ypz = ? ", taskIds, billId);
|
||||
}
|
||||
|
||||
} else {
|
||||
// 插入简历推送记录表
|
||||
recordSet.executeUpdate("insert into uf_jcl_jltsjl (ypz,dygz) values (?,?)", billId, taskDetailId);
|
||||
}
|
||||
|
||||
return true;
|
||||
}
|
||||
}
|
||||
|
|
@ -1,5 +1,7 @@
|
|||
package weaver.interfaces.recruit.thread;
|
||||
|
||||
import cn.hutool.core.convert.Convert;
|
||||
import com.alibaba.fastjson.JSON;
|
||||
import com.engine.recruit.conn.*;
|
||||
import com.engine.recruit.entity.resume.QllResumePo;
|
||||
import com.engine.recruit.enums.ApplicationStatusEnum;
|
||||
|
|
@ -8,6 +10,8 @@ import org.apache.commons.collections.CollectionUtils;
|
|||
import org.apache.commons.lang3.StringUtils;
|
||||
import weaver.common.DateUtil;
|
||||
import weaver.conn.RecordSet;
|
||||
import weaver.general.BaseBean;
|
||||
import weaver.general.Util;
|
||||
|
||||
import java.util.List;
|
||||
import java.util.Map;
|
||||
|
|
@ -18,6 +22,8 @@ import java.util.Map;
|
|||
* @version: 1.0
|
||||
*/
|
||||
public class ExtractQllResumeThread extends Thread {
|
||||
BaseBean baseBean = new BaseBean();
|
||||
|
||||
@Override
|
||||
public void run() {
|
||||
RecordSet rs = new RecordSet();
|
||||
|
|
@ -28,10 +34,29 @@ public class ExtractQllResumeThread extends Thread {
|
|||
}
|
||||
for (Map<String, Object> map : mapList) {
|
||||
QllResumePo qllResumePo = RecruitUtil.parseMap2Object(map, QllResumePo.class);
|
||||
RecruitDataMap<Object> dataMap = buildApplicantMap(qllResumePo);
|
||||
// 校验简历信息、并插入
|
||||
CheckRepeatResume.getInstance().insertResumeMainTable(dataMap);
|
||||
rs.executeUpdate("update uf_jcl_jlzjb set cqzt = 1 where id = ? ", qllResumePo.getId());
|
||||
try {
|
||||
baseBean.writeLog("千里聆简历解析开始,中间表ID=【" + qllResumePo.getId() + "】");
|
||||
RecruitDataMap<Object> dataMap = buildApplicantMap(qllResumePo);
|
||||
baseBean.writeLog("千里聆简历主表数据解析完成==" + JSON.toJSONString(dataMap));
|
||||
// 校验简历信息、并插入
|
||||
CheckRepeatResume instance = CheckRepeatResume.getInstance();
|
||||
Map<String, Object> checkMap = instance.insertResumeAndReturn(dataMap);
|
||||
String mainId = Util.null2String(checkMap.get("mainId"));
|
||||
String sourceId = Util.null2String(checkMap.get("sourceId"));
|
||||
baseBean.writeLog("千里聆简历主表数据插入完成,mainId==【" + mainId + "】,sourceId==【" + sourceId + "】");
|
||||
|
||||
// 数据写入完成后,更新抽取状态为新插入的数据ID
|
||||
rs.executeUpdate("update uf_jcl_jlzjb set cqzt = 1 ,mainid = ? ,sourceid = ? where id = ? ", Convert.toInt(mainId), Convert.toInt(sourceId), qllResumePo.getId());
|
||||
|
||||
// 插入明细表数据
|
||||
instance.insertResumeDetailTable(qllResumePo.getJyjl(), "uf_jcl_yppc_dt1", mainId, sourceId);
|
||||
instance.insertResumeDetailTable(qllResumePo.getGzjl(), "uf_jcl_yppc_dt2", mainId, sourceId);
|
||||
instance.insertResumeDetailTable(qllResumePo.getXmjl(), "uf_jcl_yppc_dt3", mainId, sourceId);
|
||||
baseBean.writeLog("千里聆简历解析完成,mainId==【" + mainId + "】,sourceId==【" + sourceId + "】");
|
||||
} catch (Exception e) {
|
||||
baseBean.writeLog("简历解析失败" + JSON.toJSONString(qllResumePo), e);
|
||||
}
|
||||
|
||||
}
|
||||
}
|
||||
|
||||
|
|
@ -45,35 +70,39 @@ public class ExtractQllResumeThread extends Thread {
|
|||
RecruitDataMap<Object> insertMap = new RecruitDataMap<>();
|
||||
// 姓名
|
||||
insertMap.put("xm", qllResumePo.getXm());
|
||||
// 简历来源
|
||||
insertMap.put("jlly", qllResumePo.getLyqd());
|
||||
// 电子邮箱
|
||||
insertMap.put("dzyx", qllResumePo.getYx());
|
||||
// 手机号码
|
||||
insertMap.put("sjhm", qllResumePo.getSjhm());
|
||||
// 年龄
|
||||
insertMap.put("nl", qllResumePo.getNl());
|
||||
// 性别
|
||||
insertMap.put("xb", qllResumePo.getXb());
|
||||
// 年龄
|
||||
insertMap.put("nl", qllResumePo.getNl());
|
||||
// 工作经验
|
||||
insertMap.put("gzjy", qllResumePo.getGzjy());
|
||||
// 最高学历
|
||||
insertMap.put("zgxl", qllResumePo.getZgxl());
|
||||
// 投递时间
|
||||
insertMap.put("tdsj", DateUtil.getDateTime());
|
||||
// 手机号码
|
||||
insertMap.put("sjhm", qllResumePo.getSjhm());
|
||||
// 电子邮箱
|
||||
insertMap.put("dzyx", qllResumePo.getYx());
|
||||
// 自我评价
|
||||
insertMap.put("zwpj", qllResumePo.getGrys());
|
||||
// 最高学历
|
||||
insertMap.put("zgxl", qllResumePo.getZgxl());
|
||||
// 简历来源
|
||||
insertMap.put("jlly", qllResumePo.getLyqd());
|
||||
// 投递时间
|
||||
insertMap.put("tdsj", DateUtil.getDateTime());
|
||||
// 原始简历
|
||||
insertMap.put("ysjl", qllResumePo.getJlfj());
|
||||
// 投递职位(第三方)
|
||||
insertMap.put("tdzwdsf", qllResumePo.getYpzw());
|
||||
|
||||
|
||||
String zt = ApplicationStatusEnum.DISTRIBUTION.getValue();
|
||||
// 应聘职位
|
||||
String ypzw = qllResumePo.getYpzw();
|
||||
String ypzw = PositionCommonInfo.getPositionIdByName(qllResumePo.getYpzw(), qllResumePo.getGjrsjh());
|
||||
baseBean.writeLog("投递职位==【" + qllResumePo.getYpzw() + "】,投递职位ID==【" + ypzw + "】");
|
||||
if (StringUtils.isNotBlank(ypzw)) {
|
||||
String flowId = PositionCommonInfo.getRecruitFlowId(ypzw);
|
||||
Map<String, String> initialStage = ApplicantCommonInfo.getInitialStage(flowId);
|
||||
if (null != initialStage) {
|
||||
baseBean.writeLog("initialStage===" + JSON.toJSONString(initialStage));
|
||||
String zpjd = initialStage.get("zpjd");
|
||||
String dqypjd = initialStage.get("jdlx");
|
||||
if (StringUtils.isNotBlank(zpjd) && StringUtils.isNotBlank(dqypjd)) {
|
||||
|
|
|
|||
File diff suppressed because one or more lines are too long
Binary file not shown.
Binary file not shown.
Binary file not shown.
|
|
@ -0,0 +1,47 @@
|
|||
#############################消息提醒相关配置##############################
|
||||
|
||||
#聚才林默认招聘消息提醒,消息来源(消息来源ID获取方式:==》应用中心-消息中心-消息类型设置>>>>消息来源-列中字段中的绑定标识)
|
||||
RECRUIT_MESSAGE_TYPE=2022061063
|
||||
|
||||
|
||||
#面试反馈消息提醒,消息来源
|
||||
INTERVIEW_MESSAGE_TYPE=2022061063
|
||||
#添加面试消息提醒标题
|
||||
INTERVIEW_ADD_MESSAGE_TITLE=面试安排提醒
|
||||
#取消面试消息提醒标题
|
||||
INTERVIEW_CANCEL_MESSAGE_TITLE=取消面试提醒
|
||||
#面试评价消息提醒标题
|
||||
INTERVIEW_EVALUATE_MESSAGE_TITLE=面试评价提醒
|
||||
|
||||
|
||||
#人才黑名单通知
|
||||
JOIN_BLACKLIST_MESSAGE_TITLE=人才黑名单通知
|
||||
|
||||
#筛选反馈
|
||||
#筛选反馈消息提醒,消息来源
|
||||
SCREENING_MESSAGE_TYPE=2022061063
|
||||
#筛选反馈,消息提醒标题
|
||||
SCREENING_MESSAGE_TITLE=简历筛选
|
||||
#筛选反馈,消息提醒链接地址(需替换下面链接地址的ID,ID获取方式:==》建模引擎-应用建模-查询>>>>聚才林招聘管理-应聘者简历-筛选反馈)
|
||||
SCREENING_MESSAGE_URL=/wui/index.html#/main/cube/search?customid=64
|
||||
|
||||
|
||||
#############################移动建模相关配置##############################
|
||||
#配置获取路径:移动引擎-应用建模-应用
|
||||
#APPID获取方式:选择对应的应用,页面即展示对应ID
|
||||
#移动建模地址获取方式:选择对应的应用,鼠标右键>>免登陆访问设置,即可复制应用访问地址
|
||||
|
||||
#信息采集移动建模APPID
|
||||
MOBILE_APPID_COLLECT=3
|
||||
#信息采集移动建模地址
|
||||
COLLECT_MESSAGE_LINK=http://ip:port/mobilemode/mobile/view.html?appid=3&mTokenFrom=anonymous&mToken=6B56BDC3C4233A984BA4BCE626FD44CF
|
||||
|
||||
#offer移动建模APPID
|
||||
MOBILE_APPID_OFFER=2
|
||||
#offer反馈移动建模地址
|
||||
OFFER_MOBILE_URL=http://ip:port/mobilemode/mobile/view.html?appid=2&mTokenFrom=anonymous&mToken=C13059E5D6B68D0F23BC30B80E440C42
|
||||
|
||||
|
||||
#############################文档目录相关配置##############################
|
||||
#原始简历附件目录ID(后端引擎-内容引擎-目录设置-文档目录>>>>招聘-原始简历附件)
|
||||
APPLICANTS_RESUMES_CATEGORY=110
|
||||
|
|
@ -0,0 +1,69 @@
|
|||
#简历智能抽取服务-千里聆地址
|
||||
qianlilingurl=https://open.easst.cn/openapi/rest/resume
|
||||
#appid
|
||||
appId=66666666
|
||||
#appSecret
|
||||
appSecret=66666666666666666666666666666666
|
||||
#模块-简历库id
|
||||
model.id=71
|
||||
|
||||
|
||||
#是否使用自建,0不使用1使用
|
||||
sfsymr=1
|
||||
#自建表-表名
|
||||
jlk.tablename=uf_jcl_jlzjb
|
||||
#字段映射
|
||||
#姓名
|
||||
rmxm=xm
|
||||
#性别
|
||||
xb=xb
|
||||
#出生日期
|
||||
csrq=csrq
|
||||
#籍贯
|
||||
jg=jg
|
||||
#电子邮箱
|
||||
email=yx
|
||||
#微信
|
||||
wx=wx
|
||||
#QQ
|
||||
qq=qq
|
||||
#现居住地
|
||||
jzd=xjzd
|
||||
#爱好
|
||||
ah=ah
|
||||
#个人评价
|
||||
grpj=grys
|
||||
#学业信息
|
||||
xyxg=jyjl
|
||||
#毕业时间
|
||||
bysj=bysj
|
||||
#最高学历
|
||||
zgxl=zgxl
|
||||
#专业技能
|
||||
zyjn=zyjn
|
||||
#实习经历
|
||||
sxjl=gzjl
|
||||
#英语水平
|
||||
yysp=yysp
|
||||
#技能证书
|
||||
jnzs=zs
|
||||
#校园经历
|
||||
#xyjl=xyjl
|
||||
#工作信息
|
||||
gzxg=gzjl
|
||||
#期望从事岗位
|
||||
qwcsgw=ypzw
|
||||
#工作经验
|
||||
gzjy1=gzjy
|
||||
#期望薪资
|
||||
#qwxz=qwsqyxk
|
||||
#期望工作地点
|
||||
#qwgzdd=qwgzdd
|
||||
#项目经历
|
||||
xmjl=xmjl
|
||||
#手机号码
|
||||
sjhm=sjhm
|
||||
#年龄
|
||||
nl=nl
|
||||
#身份证
|
||||
sfz=sfz
|
||||
|
|
@ -0,0 +1,69 @@
|
|||
host=http://youyun.market.alicloudapi.com
|
||||
path=/
|
||||
method=POST
|
||||
#appcode
|
||||
appcode=66666666666666666666666666666666
|
||||
#是否使用自建,0不使用1使用
|
||||
sfsymr=1
|
||||
#模块-简历库id
|
||||
formmodeid=71
|
||||
|
||||
#自建表-表名
|
||||
tablename=uf_jcl_jlzjb
|
||||
|
||||
|
||||
#姓名
|
||||
rmxm=xm
|
||||
#性别
|
||||
xb=xb
|
||||
#出生日期
|
||||
csrq=csrq
|
||||
#籍贯
|
||||
jg=jg
|
||||
#电子邮箱
|
||||
email=yx
|
||||
#微信
|
||||
wx=wx
|
||||
#QQ
|
||||
qq=qq
|
||||
#现居住地
|
||||
jzd=xjzd
|
||||
#爱好
|
||||
ah=ah
|
||||
#个人评价
|
||||
grpj=grys
|
||||
#学业信息
|
||||
xyxg=jyjl
|
||||
#毕业时间
|
||||
bysj=bysj
|
||||
#最高学历
|
||||
zgxl=zgxl
|
||||
#专业技能
|
||||
zyjn=zyjn
|
||||
#实习经历
|
||||
sxjl=sxjl
|
||||
#英语水平
|
||||
yysp=yysp
|
||||
#技能证书
|
||||
jnzs=zs
|
||||
#校园经历
|
||||
#xyjl=xyjl
|
||||
#工作信息
|
||||
gzxg=gzjl
|
||||
#期望从事岗位
|
||||
qwcsgw=ypzw
|
||||
#工作经验
|
||||
gzjy1=gzjy
|
||||
#期望薪资
|
||||
#qwxz=qwsqyxk
|
||||
#期望工作地点
|
||||
#qwgzdd=qwgzdd
|
||||
#项目经历
|
||||
xmjl=xmjl
|
||||
#手机号码
|
||||
sjhm=sjhm
|
||||
#年龄
|
||||
nl=nl
|
||||
#身份证
|
||||
sfz=sfz
|
||||
|
||||
Binary file not shown.
Binary file not shown.
Binary file not shown.
Binary file not shown.
Binary file not shown.
Binary file not shown.
Binary file not shown.
Binary file not shown.
Binary file not shown.
Binary file not shown.
Binary file not shown.
Binary file not shown.
Binary file not shown.
Some files were not shown because too many files have changed in this diff Show More
Loading…
Reference in New Issue