陕西建工-测评管理对接源码

main
howec 2 years ago
parent c0bc040bd3
commit 30513192b0

@ -0,0 +1,70 @@
package com.weaver.sxjg.assess.config;
import com.zaxxer.hikari.HikariDataSource;
import org.slf4j.Logger;
import org.slf4j.LoggerFactory;
import org.springframework.beans.factory.annotation.Value;
import org.springframework.context.annotation.Configuration;
import org.springframework.stereotype.Component;
import javax.sql.DataSource;
/**
*
* @author liuhao
*/
@Configuration
@Component
public class EbDbDataSourceConfig {
private static final Logger log = LoggerFactory.getLogger(EbDbDataSourceConfig.class);
private static String url;
private static String driverClassName;
private static String username;
private static String password;
private volatile static HikariDataSource dataSource;
public static DataSource dbDataSource() {
if (dataSource ==null){
synchronized (DataSource.class){
if (dataSource == null){
dataSource = new HikariDataSource();
dataSource.setDriverClassName(driverClassName);
dataSource.setJdbcUrl(url);
dataSource.setUsername(username);
dataSource.setPassword(password);
// 连接池参数
dataSource.setMaximumPoolSize(3);
dataSource.setPoolName("MyHikariCP1");
dataSource.setConnectionTimeout(30000);
return dataSource;
}
}
}
return dataSource;
}
@Value("${spring.datasource.urlebdesign}")
public void setUrl(String url) {
EbDbDataSourceConfig.url = url;
}
@Value("${spring.datasource.driver-class-name}")
public void setDriverClassName(String driverClassName) {
EbDbDataSourceConfig.driverClassName = driverClassName;
}
@Value("${spring.datasource.username}")
public void setUsername(String username) {
EbDbDataSourceConfig.username = username;
}
@Value("${spring.datasource.password}")
public void setPassword(String password) {
EbDbDataSourceConfig.password = password;
}
}

@ -0,0 +1,266 @@
package com.weaver.sxjg.assess.esb;
import com.alibaba.fastjson.JSONArray;
import com.alibaba.fastjson.JSONObject;
import com.weaver.common.base.entity.result.WeaResult;
import com.weaver.ebuilder.common.exception.BusinessException;
import com.weaver.ebuilder.form.client.entity.obj.Obj;
import com.weaver.ebuilder.form.client.utils.UserUtils;
import com.weaver.esb.api.rpc.EsbServerlessRpcRemoteInterface;
import com.weaver.eteams.file.client.file.FileObj;
import com.weaver.eteams.file.client.param.RemoteUploadParam;
import com.weaver.file.ud.api.FileUploadService;
import com.weaver.sxjg.assess.config.EbDbDataSourceConfig;
import com.weaver.sxjg.assess.util.SxjgUtil;
import com.weaver.teams.security.UserAgentUtils;
import org.apache.commons.configuration.ConfigurationException;
import org.apache.commons.configuration.PropertiesConfiguration;
import org.slf4j.Logger;
import org.slf4j.LoggerFactory;
import org.springframework.beans.factory.annotation.Autowired;
import org.springframework.jdbc.core.JdbcTemplate;
import org.springframework.stereotype.Service;
import java.io.InputStream;
import java.net.MalformedURLException;
import java.net.URL;
import java.net.URLConnection;
import java.util.Date;
import java.util.HashMap;
import java.util.List;
import java.util.Map;
/**
* @use
* @date 20231016
* @author
*/
@Service("esbRpcAssessManage_sj")
public class SendAssessNotice implements EsbServerlessRpcRemoteInterface {
private static final Logger log = LoggerFactory.getLogger(SendAssessNotice.class);
private JdbcTemplate jdbcTemplate = new JdbcTemplate(EbDbDataSourceConfig.dbDataSource());
private int companyId;
private String secret;
private String assessNoticeUrl;
private String tenantKey;
private String managerid;
@Autowired
FileUploadService fileUploadService;
private String assessResultUrl;
public SendAssessNotice() {
PropertiesConfiguration p = null;
try {
p = new PropertiesConfiguration();
p.setEncoding("utf-8");
p.setFileName("config/assessManage.properties");
p.load();
this.setCompanyId(p.getString("sxjg.companyid"));
this.setSecret(p.getString("sxjg.secret"));
this.setAssessNoticeUrl(p.getString("sxjg.answerurl"));
this.setAssessResultUrl(p.getString("sxjg.answerresult"));
this.setManagerid(p.getString("managerid"));
this.setTenantKey(p.getString("tenantKey"));
}catch (ConfigurationException e) {
throw new BusinessException("获取sxjg.properties配置文件失败", e);
}
}
@Override
public WeaResult<Map<String, Object>> execute(Map<String, Object> params) {
Map<String, Object> rs =new HashMap<>();
String operate_flag = (String)params.get("operate_flag");
if("1".equals(operate_flag)) {
log.error("获取测评通知链接地址:>>>>>>>>>>>>>>>>>>>>>>Thread.currentThread().getName()"+Thread.currentThread().getName());
String Deadline = (String)params.get("Deadline");
String Email = (String)params.get("Email");
String JobId = (String)params.get("JobId");
String JobName = (String)params.get("JobName");
String Name = (String)params.get("Name");
String PaperIds = (String)params.get("PaperIds");
String s1[] = PaperIds.split("/");
PaperIds = s1[2];
String PersonId = (String)params.get("PersonId");
String orgCode = (String)params.get("orgcode");
log.error("orgCode:"+orgCode);
String companyId = SxjgUtil.getCompanyId(orgCode,jdbcTemplate);
String companyName = SxjgUtil.getCompanyName(orgCode,jdbcTemplate);
if(companyId.length()==0) {
log.error("没有找到对应匹配的companyId");
throw new RuntimeException("没有找到对应匹配的companyId");
}
log.error("Deadline:"+Deadline);
log.error("Email:"+Email);
log.error("JobId:"+JobId);
log.error("JobName:"+JobName);
log.error("Name:"+Name);
log.error("PaperIds:"+PaperIds);
log.error("PersonId:"+PersonId);
Date dateLine = SxjgUtil.getDateByTimestr(Deadline,"yyyy-MM-dd HH:mm:ss");
long deadline1 = dateLine.getTime();
Deadline = String.valueOf(deadline1);
String url = SxjgUtil.getAssessNoticeUrl(Integer.parseInt(companyId),getSecret(),getAssessNoticeUrl(),Deadline,Email,JobId,JobName,Name,PaperIds,PersonId);
log.error("测评链接地址:"+url);
rs.put("url",url);
rs.put("companyName",companyName);
}else if("2".equals(operate_flag)) {//获取测评结果
Thread t = new Thread(() -> {
try{
log.error("获取测评结果... ...");
getAssessResult(jdbcTemplate);
}catch (Exception e){
log.error("error::::::::");
e.printStackTrace();
}
});
t.start();
}
return WeaResult.success(rs);
}
private void getAssessResult(JdbcTemplate jdbcTemplate) throws Exception {
//根据组织岗位id获取维度
List<Map<String,Object>> rs1 = SxjgUtil.getOrgJobLevelList(jdbcTemplate);
//遍历组织岗位维度zwssbm,position_id
if(rs1 != null && rs1.size() > 0) {
for(int i = 0;i<rs1.size();i++) {
Map<String, Object> rs2 = rs1.get(i);
String orgcode = (String)rs2.get("zwssbm");
String jobid = (String)rs2.get("position_id");
//根据岗位,组织 获取应聘者id
log.error("根据岗位,组织,应聘者获取维度>>>");
List<Map<String, Object>> rs3 = SxjgUtil.getUserids(jdbcTemplate,orgcode,jobid);
//同一个组织项目下的人员
if(rs3!=null&&rs3.size()>0) {
//手动逻辑分页
int total = rs3.size();
int page = total/50+1;
for(int a = 1; a <= page;a++) {
//第一页 0-49 第二页50-99 第三页100-149
int current = (a-1)*50;
int currenttotal = (current+50) >total ? total : (current+50);
String PersonIds = "";
for(int b = current; b < currenttotal; b++) {
Map<String, Object> rs4 = rs3.get(b);
String talent_id = (String) rs4.get("talent_id");
if(b == currenttotal-1) {
PersonIds += talent_id;
}else {
PersonIds += talent_id+",";
}
}
String companyid = SxjgUtil.getCompanyId(orgcode,jdbcTemplate);
//获取第一页的结果同步
String getrs = SxjgUtil.getApiResult(jdbcTemplate,PersonIds,companyid,jobid,getAssessResultUrl(),getSecret());
log.error("智联测评:获取结果:"+getrs);
JSONObject rsobj = JSONObject.parseObject(getrs);
//有结果
if(rsobj.containsKey("JobId")) {
String jobid1 = rsobj.getString("JobId");
JSONArray Persons = rsobj.getJSONArray("Persons");
for(int c = 0;c<Persons.size();c++) {
JSONObject jsonObject = Persons.getJSONObject(c);
String PersonId = jsonObject.getString("PersonId");
JSONArray PersonPapers = jsonObject.getJSONArray("Papers");
for(int d = 0;d<PersonPapers.size();d++) {
JSONObject j1 = PersonPapers.getJSONObject(d);
int paperid =j1.getInteger("PaperId");
if(SxjgUtil.isExistPaper(jdbcTemplate,paperid,orgcode,jobid1)) {//匹配试卷id更新结果
String shortpdf=j1.getString("PdfShortReportUrl");
String longpdf=j1.getString("PdfReportUrl");
String id = SxjgUtil.getIdByCause(jdbcTemplate,orgcode,jobid1,PersonId,paperid);
String username = SxjgUtil.getNameById(jdbcTemplate,id);
URL url = new URL(longpdf);
URLConnection conn = url.openConnection();
String fileName = "人岗匹配测试报告_"+username+"_详情_"+paperid+".pdf";
Long longpdfid = uploadfiletoYc(fileName,conn.getInputStream());
url = new URL(shortpdf);
conn = url.openConnection();
fileName = "人岗匹配测试报告_"+username+"_简介_"+paperid+".pdf";
Long shortpdfid = uploadfiletoYc(fileName,conn.getInputStream());
String TotalScore = j1.getBigDecimal("TotalScore").toString();
//更新 根据orgcodejobidpersonidpaperid
SxjgUtil.updateResultById(jdbcTemplate,id,shortpdfid,longpdfid,TotalScore);
}
}
}
}
}
}
}
}
}
/**
*
*/
public Long uploadfiletoYc(String fileName, InputStream inputStream) throws Exception{
String type = "application/pdf";
FileObj fileObj = null;
log.error("附件上传开始:>>>>>>>>");
RemoteUploadParam remoteUploadParam = new RemoteUploadParam(fileName,String.valueOf(System.currentTimeMillis()),"recruit");
remoteUploadParam.setCreateDoc(true);
remoteUploadParam.setSecretLevel(4);
remoteUploadParam.setTenantKey(this.getTenantKey());
fileObj = fileUploadService.uploadLocalFile(inputStream,Long.parseLong(getManagerid()),type,remoteUploadParam);
Long fieldid = fileObj.getFileid();
return fieldid;
}
public int getCompanyId() {
return companyId;
}
public void setCompanyId(String companyId) {
int companyid1 = Integer.parseInt(companyId);
this.companyId = companyid1;
}
public String getSecret() {
return secret;
}
public void setSecret(String secret) {
this.secret = secret;
}
public String getAssessNoticeUrl() {
return assessNoticeUrl;
}
public void setAssessNoticeUrl(String assessNoticeUrl) {
this.assessNoticeUrl = assessNoticeUrl;
}
public String getAssessResultUrl() {
return assessResultUrl;
}
public void setAssessResultUrl(String assessResultUrl) {
this.assessResultUrl = assessResultUrl;
}
public String getTenantKey() {
return tenantKey;
}
public void setTenantKey(String tenantKey) {
this.tenantKey = tenantKey;
}
public String getManagerid() {
return managerid;
}
public void setManagerid(String managerid) {
this.managerid = managerid;
}
}

@ -0,0 +1,42 @@
package com.weaver.sxjg.assess.util;
import java.security.MessageDigest;
public class Md5 {
/**
* 16
* @param bytes byte
* @return Hex
*/
public static String bytesToHex(byte[] bytes) {
StringBuffer md5str = new StringBuffer();
//把数组每一字节换成16进制连成md5字符串
int digital;
for (int i = 0; i < bytes.length; i++) {
digital = bytes[i];
if (digital < 0) {
digital += 256;
}
if (digital < 16) {
md5str.append("0");
}
md5str.append(Integer.toHexString(digital));
}
return md5str.toString();
}
public static String GenerateSignature(String str){
String signature = "";
try{
//创建一个提供信息摘要算法的对象初始化为md5算法对象
MessageDigest md = MessageDigest.getInstance("MD5");
//计算后获得字节数组
byte[] bytes = md.digest(str.getBytes("utf-8"));
//把数组每一字节换成16进制连成md5字符串
signature = bytesToHex(bytes);
}catch (Exception e) {
e.printStackTrace();
}
return signature;
}
}

@ -0,0 +1,217 @@
package com.weaver.sxjg.assess.util;
import org.apache.commons.httpclient.URIException;
import org.apache.commons.httpclient.util.URIUtil;
import org.slf4j.Logger;
import org.slf4j.LoggerFactory;
import org.springframework.jdbc.core.JdbcTemplate;
import java.io.BufferedReader;
import java.io.IOException;
import java.io.InputStreamReader;
import java.net.HttpURLConnection;
import java.net.URL;
import java.text.SimpleDateFormat;
import java.util.Date;
import java.util.List;
import java.util.Map;
public class SxjgUtil{
private static final Logger log = LoggerFactory.getLogger(SxjgUtil.class);
public static String getAssessNoticeUrl(int CompanyId,String secret,String url0,String Deadline,String Email,String JobId,String JobName,String Name,String PaperIds,String PersonId){
String url = url0+"?CompanyId="+CompanyId+"&PersonId="+PersonId+"&Name="+Name+"&Email="+Email+"&PaperIds="+PaperIds+"&JobName="+JobName+"&JobId="+JobId+"&Deadline="+Deadline+"&Signature=";
String r2 = CompanyId+Deadline+Email+JobId+JobName+Name+PaperIds+PersonId+secret;
String s = Md5.GenerateSignature(r2);
url+=s;
String s1 = "";
try {
s1 = URIUtil.encodeQuery(url);
}catch (URIException e) {
log.error("获取发送链接地址失败!!!");
}
return s1;
}
/**
* idcompanyid
*/
public static String getCompanyId(String orgcode, JdbcTemplate jdbcTemplate) {
String sql = "select companyid from uf_rcrt_zhiliancp where qyzt = '1' and IS_DELETE = 0 and ssfb = '"+orgcode+"' limit 1";
try {
Map<String, Object> rs = jdbcTemplate.queryForMap(sql);
String companyid = (String)rs.get("companyid");
return companyid;
}catch (Exception e){
return "";
}
}
/**
* codecompanyname
*/
public static String getCompanyName(String orgcode, JdbcTemplate jdbcTemplate) {
String sql = "select dwmc from uf_rcrt_zhiliancp where qyzt = '1' and IS_DELETE = 0 and ssfb = '"+orgcode+"' limit 1";
try {
Map<String, Object> rs = jdbcTemplate.queryForMap(sql);
String dwmc = (String)rs.get("dwmc");
return dwmc;
}catch (Exception e){
return "";
}
}
/**
*
*/
public static Date getDateByTimestr(String datatime, String format) {
SimpleDateFormat sdf2 = new SimpleDateFormat(format);
Date myDate2 = null;
try {
myDate2 = sdf2.parse(datatime);
return myDate2;
}catch (Exception e){
return null;
}
}
public static List<Map<String, Object>> getOrgJobLevelList(JdbcTemplate jdbcTemplate) {
String sql = "select zwssbm,position_id from uf_rcrt_evaluation where zwssbm is not null" +
" and position_id is not null and cpjzsj > NOW() and papers is not null and status = '1' group by zwssbm,position_id";
try {
List<Map<String,Object>> rs = jdbcTemplate.queryForList(sql);
return rs;
}catch (Exception e){
return null;
}
}
public static List<Map<String, Object>> getUserids(JdbcTemplate jdbcTemplate,String zwsszz1,String ypzw1) {
String sql = "select talent_id,papers from uf_rcrt_evaluation where zwssbm = '"+zwsszz1+"' and position_id = '"+ypzw1+"' and cpjzsj > NOW() and papers is not null and status = '1'";
log.error("维度sql"+sql);
try {
List<Map<String,Object>> rs = jdbcTemplate.queryForList(sql);
return rs;
}catch (Exception e){
return null;
}
}
public static String getApiResult(JdbcTemplate jdbcTemplate, String personIds, String CompanyId, String jobid,String url1,String secret) {
String url = url1+"?CompanyId="+CompanyId+"&PersonIds="+personIds+"&JobId="+jobid+"&Signature=";
String r2 = CompanyId+jobid+personIds+secret;
String s = Md5.GenerateSignature(r2);
url+=s;
String s1 = "";
try {
s1 = URIUtil.encodeQuery(url);
return getResultGet(s1);
}catch (URIException e) {
log.error("获取发送链接地址失败!!!");
}
return "";
}
public static boolean isExistPaper(JdbcTemplate jdbcTemplate, int paperid, String orgcode, String jobid1) {
String sql = "select count(id) as nums from uf_rcrt_evaluation where papers like '%"+paperid+"' and zwssbm = "+orgcode+" and position_id = "+jobid1;
Map<String, Object> rs = jdbcTemplate.queryForMap(sql);
long nums = (long)rs.get("nums");
return nums > 0l;
}
public static String getIdByCause(JdbcTemplate jdbcTemplate, String orgcode, String jobid1, String personId, int paperid) {
String sql = "select id from uf_rcrt_evaluation where zwssbm = '"+orgcode+"' and position_id = '"+jobid1+"' and talent_id = '"+personId+"' and papers like '%"+paperid+"'";
Map<String, Object> rs = jdbcTemplate.queryForMap(sql);
String id = rs.get("id").toString();
return id;
}
//{"Code":4004,"Message":"没有查到该考生相关信息."}
// public static void main(String[] args) {
// String CompanyId = "846245";
// String Deadline="1800152643000";
// String Email="slqliuhao@qq.com";
// String JobId="1008611";
// String JobName="泛微测试项目";
// String Name="张志东";
// String PaperIds="12964";
// String PersonId="10086112";
// String secret = "f65a0fc0c3cf0c1ff60343d8f771cc98";
// String url = "https://eas.zhaopin.com/Assessment/Api/OpenApiLogin.ashx?CompanyId="+CompanyId+"&PersonId="+PersonId+"&Name="+Name+"&Email="+Email+"&PaperIds="+PaperIds+"&JobName="+JobName+"&JobId="+JobId+"&Deadline="+Deadline+"&Signature=";
// String r2 = CompanyId+Deadline+Email+JobId+JobName+Name+PaperIds+PersonId+secret;
// String s = Md5.GenerateSignature(r2);
// url+=s;
// String s1 = "";
// try {
// s1 = URIUtil.encodeQuery(url);
// }catch (URIException e) {
// log.error("获取发送链接地址失败!!!");
// }
// System.out.println(s1);
// }
// public static void main(String[] args) {
// String CompanyId = "846245";
// String JobId="1008611";
// String PersonId="10086112,10086111";
// String secret = "f65a0fc0c3cf0c1ff60343d8f771cc98";
// String url = "https://eas.zhaopin.com/Assessment/api/OpenApiResult.ashx?CompanyId="+CompanyId+"&PersonIds="+PersonId+"&JobId="+JobId+"&Signature=";
// String r2 = CompanyId+JobId+PersonId+secret;
// String s = Md5.GenerateSignature(r2);
// url+=s;
// String s1 = "";
// try {
// s1 = URIUtil.encodeQuery(url);
// }catch (URIException e) {
// log.error("获取发送链接地址失败!!!");
// }
// getResultGet(s1);
// System.out.println(s1);
// }
/**
* get
*/
public static String getResultGet(String url) {
try {
URL apiUrl = new URL(url);
HttpURLConnection connection = (HttpURLConnection) apiUrl.openConnection();
connection.setRequestMethod("GET");
int responseCode = connection.getResponseCode();
if (responseCode == HttpURLConnection.HTTP_OK) {
BufferedReader reader = new BufferedReader(new InputStreamReader(connection.getInputStream()));
String inputLine;
StringBuffer response = new StringBuffer();
while ((inputLine = reader.readLine()) != null) {
response.append(inputLine);
}
reader.close();
String rs = response.toString();
return rs;
} else {
log.error("GET request failed. Response code: " + responseCode);
}
} catch (IOException e) {
e.printStackTrace();
}
return "";
}
/**
*
*/
public static void updateResultById(JdbcTemplate jdbcTemplate, String id, Long shortpdfid, Long longpdfid, String totalScore) {
String sql ="update uf_rcrt_evaluation set status = '2',result='"+totalScore+"',attachment = "+longpdfid+",cpjdfx = "+shortpdfid+" where id = "+id;
jdbcTemplate.execute(sql);
}
/**
* useid
*/
public static String getNameById(JdbcTemplate jdbcTemplate, String id) {
String sql = "select b.candidate_name from uf_rcrt_evaluation a inner join uf_rcrt_talent b on b.id = a.talent_id where a.id = "+id;
Map<String, Object> rs = jdbcTemplate.queryForMap(sql);
String name = (String)rs.get("candidate_name");
return name;
}
}

@ -0,0 +1,9 @@
sxjg.answerurl=https://eas.zhaopin.com/Assessment/Api/OpenApiLogin.ashx
sxjg.companyid=846245
sxjg.secret=f65a0fc0c3cf0c1ff60343d8f771cc98
sxjg.answerresult=https://eas.zhaopin.com/Assessment/api/OpenApiResult.ashx
#??????
#??key
tenantKey=tl2qvzz346
#???ID?????
managerid=891584027606974465
Loading…
Cancel
Save