From 30513192b0983869f472a37747e1fdc992042690 Mon Sep 17 00:00:00 2001 From: howec <> Date: Fri, 20 Oct 2023 10:17:07 +0800 Subject: [PATCH] =?UTF-8?q?=E9=99=95=E8=A5=BF=E5=BB=BA=E5=B7=A5-=E6=B5=8B?= =?UTF-8?q?=E8=AF=84=E7=AE=A1=E7=90=86=E5=AF=B9=E6=8E=A5=E6=BA=90=E7=A0=81?= MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit --- .../weaver/sxjg/assess/config/EbDbDataSourceConfig.java | 70 +++++ .../com/weaver/sxjg/assess/esb/SendAssessNotice.java | 266 ++++++++++++++++++ .../src/main/java/com/weaver/sxjg/assess/util/Md5.java | 42 +++ .../main/java/com/weaver/sxjg/assess/util/SxjgUtil.java | 217 ++++++++++++++ .../src/main/resources/config/assessManage.properties | 9 + 5 files changed, 604 insertions(+) create mode 100644 陕建测评管理对接源码/src/main/java/com/weaver/sxjg/assess/config/EbDbDataSourceConfig.java create mode 100644 陕建测评管理对接源码/src/main/java/com/weaver/sxjg/assess/esb/SendAssessNotice.java create mode 100644 陕建测评管理对接源码/src/main/java/com/weaver/sxjg/assess/util/Md5.java create mode 100644 陕建测评管理对接源码/src/main/java/com/weaver/sxjg/assess/util/SxjgUtil.java create mode 100644 陕建测评管理对接源码/src/main/resources/config/assessManage.properties diff --git a/陕建测评管理对接源码/src/main/java/com/weaver/sxjg/assess/config/EbDbDataSourceConfig.java b/陕建测评管理对接源码/src/main/java/com/weaver/sxjg/assess/config/EbDbDataSourceConfig.java new file mode 100644 index 0000000..effae56 --- /dev/null +++ b/陕建测评管理对接源码/src/main/java/com/weaver/sxjg/assess/config/EbDbDataSourceConfig.java @@ -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; + } + +} diff --git a/陕建测评管理对接源码/src/main/java/com/weaver/sxjg/assess/esb/SendAssessNotice.java b/陕建测评管理对接源码/src/main/java/com/weaver/sxjg/assess/esb/SendAssessNotice.java new file mode 100644 index 0000000..63c93c9 --- /dev/null +++ b/陕建测评管理对接源码/src/main/java/com/weaver/sxjg/assess/esb/SendAssessNotice.java @@ -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 2023年10月16日 + * @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> execute(Map params) { + Map 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> rs1 = SxjgUtil.getOrgJobLevelList(jdbcTemplate); + //遍历组织岗位维度zwssbm,position_id + if(rs1 != null && rs1.size() > 0) { + for(int i = 0;i rs2 = rs1.get(i); + String orgcode = (String)rs2.get("zwssbm"); + String jobid = (String)rs2.get("position_id"); + //根据岗位,组织 获取应聘者id + log.error("根据岗位,组织,应聘者获取维度>>>"); + List> 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 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>>>>>>>"); + 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; + } +} diff --git a/陕建测评管理对接源码/src/main/java/com/weaver/sxjg/assess/util/Md5.java b/陕建测评管理对接源码/src/main/java/com/weaver/sxjg/assess/util/Md5.java new file mode 100644 index 0000000..86cabba --- /dev/null +++ b/陕建测评管理对接源码/src/main/java/com/weaver/sxjg/assess/util/Md5.java @@ -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; + } +} diff --git a/陕建测评管理对接源码/src/main/java/com/weaver/sxjg/assess/util/SxjgUtil.java b/陕建测评管理对接源码/src/main/java/com/weaver/sxjg/assess/util/SxjgUtil.java new file mode 100644 index 0000000..53e9548 --- /dev/null +++ b/陕建测评管理对接源码/src/main/java/com/weaver/sxjg/assess/util/SxjgUtil.java @@ -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; + } + + /** + * 根据组织id获取companyid + */ + 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 rs = jdbcTemplate.queryForMap(sql); + String companyid = (String)rs.get("companyid"); + return companyid; + }catch (Exception e){ + return ""; + } + } + + /** + * 根据组织code获取companyname + */ + 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 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> 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> rs = jdbcTemplate.queryForList(sql); + return rs; + }catch (Exception e){ + return null; + } + } + + public static List> 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> 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 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 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); + } + + /** + * use:根据用户id获取姓名(人才基本信息) + */ + 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 rs = jdbcTemplate.queryForMap(sql); + String name = (String)rs.get("candidate_name"); + return name; + } +} diff --git a/陕建测评管理对接源码/src/main/resources/config/assessManage.properties b/陕建测评管理对接源码/src/main/resources/config/assessManage.properties new file mode 100644 index 0000000..baa7a77 --- /dev/null +++ b/陕建测评管理对接源码/src/main/resources/config/assessManage.properties @@ -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