招聘流程按钮Action

This commit is contained in:
dxfeng 2023-09-18 15:01:35 +08:00
parent 540dbf3421
commit 4c14329a77
28 changed files with 699 additions and 0 deletions

View File

@ -0,0 +1,12 @@
package com.api.recruit.controller;
import javax.ws.rs.Path;
/**
* @author:dxfeng
* @createTime: 2023/09/18
* @version: 1.0
*/
@Path("/jcl/recruit/button")
public class RecruitButtonController extends com.engine.recruit.controller.RecruitButtonController{
}

View File

@ -0,0 +1,38 @@
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.RecruitButtonWrapper;
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: 2023/09/18
* @version: 1.0
*/
public class RecruitButtonController {
public RecruitButtonWrapper getRecruitButtonWrapper(User user) {
return ServiceUtil.getService(RecruitButtonWrapper.class, user);
}
@POST
@Path("/executeButtonAction")
@Produces(MediaType.APPLICATION_JSON)
public String executeButtonAction(@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(getRecruitButtonWrapper(user)::execute, params);
}
}

View File

@ -1,6 +1,7 @@
package com.engine.recruit.enums;
/**
* <p>聚才林招聘</p>
* 需求状态枚举类
*
* @author:dxfeng

View File

@ -0,0 +1,21 @@
package com.engine.recruit.exception;
/**
* @author:dxfeng
* @createTime: 2023/09/18
* @version: 1.0
*/
public class CustomizeRunTimeException extends RuntimeException{
public CustomizeRunTimeException(String message) {
super(message);
}
public CustomizeRunTimeException(Throwable cause) {
super(cause);
}
public CustomizeRunTimeException(String message, Throwable cause) {
super(message, cause);
}
}

View File

@ -0,0 +1,37 @@
package com.engine.recruit.factory;
import com.engine.core.impl.Service;
import com.engine.recruit.service.RecruitButtonService;
/**
* <p>聚才林招聘</p>
* 招聘按钮工厂类
*
* @author:dxfeng
* @createTime: 2023/09/18
* @version: 1.0
*/
public class RecruitButtonFactory {
/**
* 根据类的全路径获取类对象
*
* @param className 类全路径
* @param <T>
* @return
*/
public static <T extends Service> Class<T> getClass(String className) {
Class<?> clazz;
try {
clazz = Class.forName(className);
if (!RecruitButtonService.class.isAssignableFrom(clazz)) {
throw new IllegalArgumentException("该类未实现RecruitButtonService");
}
return (Class<T>) clazz;
} catch (ClassNotFoundException e) {
throw new RuntimeException(e);
}
}
}

View File

@ -0,0 +1,22 @@
package com.engine.recruit.service;
import java.util.Map;
/**
* <p>聚才林招聘</p>
* 招聘流程按钮功能实现接口
*
* @author:dxfeng
* @createTime: 2023/09/18
* @version: 1.0
*/
public interface RecruitButtonService {
/**
* 按钮执行的业务逻辑
*
* @param params 参数集合
* @return 响应结果
*/
Map<String, Object> execute(Map<String, Object> params);
}

View File

@ -0,0 +1,21 @@
package com.engine.recruit.service.impl;
import com.engine.core.impl.Service;
import com.engine.recruit.service.RecruitButtonService;
import java.util.Map;
/**
* <p>聚才林招聘</p>
* "添加备注"按钮实现类
*
* @author:dxfeng
* @createTime: 2023/09/18
* @version: 1.0
*/
public class AddRemarksServiceImpl extends Service implements RecruitButtonService {
@Override
public Map<String, Object> execute(Map<String, Object> params) {
return null;
}
}

View File

@ -0,0 +1,21 @@
package com.engine.recruit.service.impl;
import com.engine.core.impl.Service;
import com.engine.recruit.service.RecruitButtonService;
import java.util.Map;
/**
* <p>聚才林招聘</p>
* "归档人才库"按钮实现类
*
* @author:dxfeng
* @createTime: 2023/09/18
* @version: 1.0
*/
public class ArchiveTalentPoolServiceImpl extends Service implements RecruitButtonService {
@Override
public Map<String, Object> execute(Map<String, Object> params) {
return null;
}
}

View File

@ -0,0 +1,21 @@
package com.engine.recruit.service.impl;
import com.engine.core.impl.Service;
import com.engine.recruit.service.RecruitButtonService;
import java.util.Map;
/**
* <p>聚才林招聘</p>
* "安排面试"按钮实现类
*
* @author:dxfeng
* @createTime: 2023/09/18
* @version: 1.0
*/
public class ArrangeInterviewsServiceImpl extends Service implements RecruitButtonService {
@Override
public Map<String, Object> execute(Map<String, Object> params) {
return null;
}
}

View File

@ -0,0 +1,21 @@
package com.engine.recruit.service.impl;
import com.engine.core.impl.Service;
import com.engine.recruit.service.RecruitButtonService;
import java.util.Map;
/**
* <p>聚才林招聘</p>
* "背调结果登记"按钮实现类
*
* @author:dxfeng
* @createTime: 2023/09/18
* @version: 1.0
*/
public class BackToneRegistrationServiceImpl extends Service implements RecruitButtonService {
@Override
public Map<String, Object> execute(Map<String, Object> params) {
return null;
}
}

View File

@ -0,0 +1,21 @@
package com.engine.recruit.service.impl;
import com.engine.core.impl.Service;
import com.engine.recruit.service.RecruitButtonService;
import java.util.Map;
/**
* <p>聚才林招聘</p>
* "创建offer"按钮实现类
*
* @author:dxfeng
* @createTime: 2023/09/18
* @version: 1.0
*/
public class CreateOfferServiceImpl extends Service implements RecruitButtonService {
@Override
public Map<String, Object> execute(Map<String, Object> params) {
return null;
}
}

View File

@ -0,0 +1,21 @@
package com.engine.recruit.service.impl;
import com.engine.core.impl.Service;
import com.engine.recruit.service.RecruitButtonService;
import java.util.Map;
/**
* <p>聚才林招聘</p>
* "发放offer"按钮实现类
*
* @author:dxfeng
* @createTime: 2023/09/18
* @version: 1.0
*/
public class DistributeOffersServiceImpl extends Service implements RecruitButtonService {
@Override
public Map<String, Object> execute(Map<String, Object> params) {
return null;
}
}

View File

@ -0,0 +1,21 @@
package com.engine.recruit.service.impl;
import com.engine.core.impl.Service;
import com.engine.recruit.service.RecruitButtonService;
import java.util.Map;
/**
* <p>聚才林招聘</p>
* "淘汰"按钮实现类
*
* @author:dxfeng
* @createTime: 2023/09/18
* @version: 1.0
*/
public class EliminateServiceImpl extends Service implements RecruitButtonService {
@Override
public Map<String, Object> execute(Map<String, Object> params) {
return null;
}
}

View File

@ -0,0 +1,21 @@
package com.engine.recruit.service.impl;
import com.engine.core.impl.Service;
import com.engine.recruit.service.RecruitButtonService;
import java.util.Map;
/**
* <p>聚才林招聘</p>
* "邀请更新简历"按钮实现类
*
* @author:dxfeng
* @createTime: 2023/09/18
* @version: 1.0
*/
public class InviteToUpdateResumeServiceImpl extends Service implements RecruitButtonService {
@Override
public Map<String, Object> execute(Map<String, Object> params) {
return null;
}
}

View File

@ -0,0 +1,21 @@
package com.engine.recruit.service.impl;
import com.engine.core.impl.Service;
import com.engine.recruit.service.RecruitButtonService;
import java.util.Map;
/**
* <p>聚才林招聘</p>
* "加入黑名单"按钮实现类
*
* @author:dxfeng
* @createTime: 2023/09/18
* @version: 1.0
*/
public class JoinBlacklistServiceImpl extends Service implements RecruitButtonService {
@Override
public Map<String, Object> execute(Map<String, Object> params) {
return null;
}
}

View File

@ -0,0 +1,21 @@
package com.engine.recruit.service.impl;
import com.engine.core.impl.Service;
import com.engine.recruit.service.RecruitButtonService;
import java.util.Map;
/**
* <p>聚才林招聘</p>
* "谈判记录登记"按钮实现类
*
* @author:dxfeng
* @createTime: 2023/09/18
* @version: 1.0
*/
public class NegotiationRecordsServiceImpl extends Service implements RecruitButtonService {
@Override
public Map<String, Object> execute(Map<String, Object> params) {
return null;
}
}

View File

@ -0,0 +1,21 @@
package com.engine.recruit.service.impl;
import com.engine.core.impl.Service;
import com.engine.recruit.service.RecruitButtonService;
import java.util.Map;
/**
* <p>聚才林招聘</p>
* "进入下一阶段"按钮实现类
*
* @author:dxfeng
* @createTime: 2023/09/18
* @version: 1.0
*/
public class NextStageServiceImpl extends Service implements RecruitButtonService {
@Override
public Map<String, Object> execute(Map<String, Object> params) {
return null;
}
}

View File

@ -0,0 +1,21 @@
package com.engine.recruit.service.impl;
import com.engine.core.impl.Service;
import com.engine.recruit.service.RecruitButtonService;
import java.util.Map;
/**
* <p>聚才林招聘</p>
* "转为待入职"按钮实现类
*
* @author:dxfeng
* @createTime: 2023/09/18
* @version: 1.0
*/
public class PendingEmploymentServiceImpl extends Service implements RecruitButtonService {
@Override
public Map<String, Object> execute(Map<String, Object> params) {
return null;
}
}

View File

@ -0,0 +1,21 @@
package com.engine.recruit.service.impl;
import com.engine.core.impl.Service;
import com.engine.recruit.service.RecruitButtonService;
import java.util.Map;
/**
* <p>聚才林招聘</p>
* "笔试结果登记"按钮实现类
*
* @author:dxfeng
* @createTime: 2023/09/18
* @version: 1.0
*/
public class RegisterForWrittenServiceImpl extends Service implements RecruitButtonService {
@Override
public Map<String, Object> execute(Map<String, Object> params) {
return null;
}
}

View File

@ -0,0 +1,21 @@
package com.engine.recruit.service.impl;
import com.engine.core.impl.Service;
import com.engine.recruit.service.RecruitButtonService;
import java.util.Map;
/**
* <p>聚才林招聘</p>
* "业务筛选"按钮实现类
*
* @author:dxfeng
* @createTime: 2023/09/18
* @version: 1.0
*/
public class ScreenServiceImpl extends Service implements RecruitButtonService {
@Override
public Map<String, Object> execute(Map<String, Object> params) {
return null;
}
}

View File

@ -0,0 +1,21 @@
package com.engine.recruit.service.impl;
import com.engine.core.impl.Service;
import com.engine.recruit.service.RecruitButtonService;
import java.util.Map;
/**
* <p>聚才林招聘</p>
* "转推其他岗位"按钮实现类
*
* @author:dxfeng
* @createTime: 2023/09/18
* @version: 1.0
*/
public class TransferToOtherPositionsServiceImpl extends Service implements RecruitButtonService {
@Override
public Map<String, Object> execute(Map<String, Object> params) {
return null;
}
}

View File

@ -0,0 +1,19 @@
package com.engine.recruit.util;
/**
* @author:dxfeng
* @createTime: 2023/09/18
* @version: 1.0
*/
public class ExceptionUtil {
public static String getRealMessage(Throwable e) {
while (e != null) {
Throwable cause = e.getCause();
if (cause == null) {
return e.getMessage();
}
e = cause;
}
return "";
}
}

View File

@ -0,0 +1,187 @@
package com.engine.recruit.util;
import com.alibaba.fastjson.JSONObject;
import com.alibaba.fastjson.serializer.SerializerFeature;
import com.engine.recruit.exception.CustomizeRunTimeException;
import com.engine.core.exception.ECException;
import com.fasterxml.jackson.core.JsonProcessingException;
import com.fasterxml.jackson.databind.ObjectMapper;
import lombok.extern.slf4j.Slf4j;
import weaver.general.BaseBean;
import weaver.hrm.User;
import java.util.HashMap;
import java.util.Map;
import java.util.function.Consumer;
import java.util.function.Function;
import java.util.function.Supplier;
/**
* @author:dxfeng
* @createTime: 2023/09/18
* @version: 1.0
*/
@Slf4j
public class ResponseResult<T, R> {
private static final long serialVersionUID = 1L;
private final User user;
private final BaseBean baseBean = new BaseBean();
private final Boolean isLog = "true".equals(baseBean.getPropValue("hrmSalary", "log"));
public ResponseResult(User user) {
this.user = user;
}
/**
* 统一返回方法(自定义返回格式)
*/
public String customRun(Function<T, R> f, T t) {
try {
if (isLog) {
log.info("run api , param {}", t);
}
return getJsonString(f.apply(t));
} catch (CustomizeRunTimeException e) {
log.error("api run fail", e);
return Error(e.getMessage());
} catch (ECException e) {
log.error("api run fail", e);
Throwable cause = e.getCause();
return Error(cause.getMessage());
} catch (Exception e) {
log.error("api run fail", e);
return Error("系统异常!");
}
}
/**
* 统一返回方法
*/
public String run(Function<T, R> f, T t) {
try {
if (isLog) {
log.info("run api , param {}", t);
}
return Ok(f.apply(t));
} catch (CustomizeRunTimeException e) {
log.error("api run fail", e);
return Error(e.getMessage());
} catch (ECException e) {
log.error("api run fail", e);
Throwable cause = e.getCause();
return Error(cause.getMessage());
} catch (Exception e) {
log.error("api run fail", e);
return Error("系统异常!");
}
}
/**
* 统一返回方法有参无返回
*/
public String run(Consumer<T> f, T t) {
try {
if (isLog) {
log.info("run api , param {}", t);
}
f.accept(t);
return Ok();
} catch (CustomizeRunTimeException e) {
log.error("api run fail", e);
return Error(e.getMessage());
} catch (ECException e) {
log.error("api run fail", e);
return Error(ExceptionUtil.getRealMessage(e));
} catch (Exception e) {
log.error("api run fail", e);
return Error("系统异常!", e);
}
}
/**
* 统一返回方法无参有返回
*/
public String run(Supplier<R> f) {
try {
if (isLog) {
log.info("run api");
}
return Ok(f.get());
} catch (CustomizeRunTimeException e) {
log.error("api run fail", e);
return Error(e.getMessage());
} catch (ECException e) {
log.error("api run fail", e);
Throwable cause = e.getCause();
return Error(cause.getMessage());
} catch (Exception e) {
log.error("api run fail", e);
return Error("系统异常!", e);
}
}
private static String getJsonString(Object apidatas) {
ObjectMapper mapper = new ObjectMapper();
try {
return mapper.writeValueAsString(apidatas);
} catch (JsonProcessingException e) {
e.printStackTrace();
}
return "";
}
/**
* 成功返回
*/
private String Ok() {
Map<String, Object> apidatas = new HashMap<>();
apidatas.put("status", true);
return JSONObject.toJSONString(apidatas, SerializerFeature.DisableCircularReferenceDetect);
}
/**
* 成功返回
*/
private String Ok(R r) {
Map<String, Object> apidatas = new HashMap<>();
apidatas.put("status", true);
apidatas.put("data", r);
String success = getJsonString(apidatas);
if (isLog) {
log.info("run salary api success return {}", success);
}
return success;
}
/**
* 失败返回
*/
private static String Error(String message) {
Map<String, Object> apidatas = new HashMap<>();
apidatas.put("status", false);
apidatas.put("errormsg", message);
return JSONObject.toJSONString(apidatas, SerializerFeature.DisableCircularReferenceDetect);
}
/**
* 系统异常失败返回
*/
private static String Error(String message, Exception e) {
Map<String, Object> apidatas = new HashMap<>();
apidatas.put("status", false);
apidatas.put("errormsg", message);
apidatas.put("error", e.getMessage());
return JSONObject.toJSONString(apidatas, SerializerFeature.DisableCircularReferenceDetect);
}
}

View File

@ -0,0 +1,43 @@
package com.engine.recruit.wrapper;
import com.engine.common.util.ServiceUtil;
import com.engine.core.impl.Service;
import com.engine.recruit.factory.RecruitButtonFactory;
import com.engine.recruit.service.RecruitButtonService;
import weaver.general.Util;
import weaver.hrm.User;
import java.util.Map;
/**
* <p>聚才林招聘</p>
*
* @author:dxfeng
* @createTime: 2023/09/18
* @version: 1.0
*/
public class RecruitButtonWrapper extends Service {
/**
* 根据类全路径获取对应的实现类
*
* @param user 当前用户
* @param classPath 类全路径
* @return
*/
public RecruitButtonService getRecruitButtonService(User user, String classPath) {
return ServiceUtil.getService(RecruitButtonFactory.getClass(classPath), user);
}
/**
* 执行对应实现类的方法
*
* @param params 参数集合
*/
public Map<String, Object> execute(Map<String, Object> params) {
// 获取实现类全路径
String classPath = Util.null2String(params.get("classPath"));
return getRecruitButtonService(user, classPath).execute(params);
}
}

View File

@ -13,6 +13,7 @@ import java.util.HashMap;
import java.util.Map;
/**
* <p>聚才林招聘</p>
* 完成需求
* <p>完成需求更新状态为招聘完成置空结束日期完成日期取当前日期</p>
*

View File

@ -12,6 +12,7 @@ import java.util.HashMap;
import java.util.Map;
/**
* <p>聚才林招聘</p>
* 开启需求
* <p>开启需求状态为进行中置空完成日期和结束日期</p>
*

View File

@ -13,6 +13,7 @@ import java.util.HashMap;
import java.util.Map;
/**
* <p>聚才林招聘</p>
* 关闭需求
* <p>关闭需求状态为招聘停止置空完成日期结束日期取当前日期</p>
*

View File

@ -19,6 +19,7 @@ import java.io.IOException;
import java.util.*;
/**
* <p>聚才林招聘</p>
* 招聘需求流程明细表数据转建模台账
*
* @author:dxfeng