实体类:
package com.beagledata.mgc.lucas.jdcvmatch.common.domain;
import com.beagledata.mgc.lucas.jdcvmatch.common.MongoBaseEntity;
import org.springframework.data.mongodb.core.index.Indexed;
import org.springframework.data.mongodb.core.mapping.Document;
import java.util.Date;
/**
-
Created by liulu on 2019/9/6.
*/
@Document(collection = “cv”)
public class CV extends MongoBaseEntity {
private static final long serialVersionUID = -7341317053118138725L;/**
- 罗科仕简历ID
/
@Indexed(unique = true, sparse = true)
private String cvId;
/* - 应聘人姓名
/
private String name;
/* - 应聘人性别0:未知1:男2:女
/
private Integer sex;
/* - 婚姻状况 未婚:0 已婚:1
/
private Integer marriage;
/* - 应聘人出生日期
/
private Date birth;
/* - 现所在地
/
private String addr;
/* - 顾问评价
/
private String assessment;
/* - 教育经历
/
private String edu;
/* - 工作经历
/
private String workExperience;
/* - 项目经历
/
private String projectExperience;
/* - 目前薪资
/
private Double currentSalary;
/* - 培训经历
/
private String trainingCourses;
/* - 其它资料
*/
private String other;
public String getName() {
return name;
}public void setName(String name) {
this.name = name;
}public String getCvId() {
return cvId;
}public void setCvId(String cvId) {
this.cvId = cvId;
}public Integer getSex() {
return sex;
}public void setSex(Integer sex) {
this.sex = sex;
}public Integer getMarriage() {
return marriage;
}public void setMarriage(Integer marriage) {
this.marriage = marriage;
}public String getAddr() {
return addr;
}public void setAddr(String addr) {
this.addr = addr;
}public String getAssessment() {
return assessment;
}public void setAssessment(String assessment) {
this.assessment = assessment;
}public String getEdu() {
return edu;
}public void setEdu(String edu) {
this.edu = edu;
}public String getWorkExperience() {
return workExperience;
}public void setWorkExperience(String workExperience) {
this.workExperience = workExperience;
}public String getProjectExperience() {
return projectExperience;
}public void setProjectExperience(String projectExperience) {
this.projectExperience = projectExperience;
}public Double getCurrentSalary() {
return currentSalary;
}public void setCurrentSalary(Double currentSalary) {
this.currentSalary = currentSalary;
}public String getTrainingCourses() {
return trainingCourses;
}public void setTrainingCourses(String trainingCourses) {
this.trainingCourses = trainingCourses;
}public String getOther() {
return other;
}public void setOther(String other) {
this.other = other;
}public Date getBirth() {
return birth;
}public void setBirth(Date birth) {
this.birth = birth;
}@Override
public String toString() {
return “CV{” +
“cvId=’” + cvId + ‘’’ +
“, name=’” + name + ‘’’ +
“, sex=” + sex +
“, marriage=” + marriage +
“, birth=” + birth +
“, addr=’” + addr + ‘’’ +
“, assessment=’” + assessment + ‘’’ +
“, edu=’” + edu + ‘’’ +
“, workExperience=’” + workExperience + ‘’’ +
“, projectExperience=’” + projectExperience + ‘’’ +
“, currentSalary=” + currentSalary +
“, trainingCourses=’” + trainingCourses + ‘’’ +
“, other=’” + other + ‘’’ +
‘}’;
}
} - 罗科仕简历ID
查询接口:
package com.beagledata.mgc.lucas.jdcvmatch.admin.service.impl;
import com.beagledata.mgc.lucas.jdcvmatch.admin.service.CvService;
import com.beagledata.mgc.lucas.jdcvmatch.common.Result;
import com.beagledata.mgc.lucas.jdcvmatch.common.domain.CV;
import org.slf4j.Logger;
import org.slf4j.LoggerFactory;
import org.springframework.beans.factory.annotation.Autowired;
import org.springframework.data.domain.PageRequest;
import org.springframework.data.domain.Pageable;
import org.springframework.data.domain.Sort;
import org.springframework.data.mongodb.core.MongoTemplate;
import org.springframework.data.mongodb.core.query.Criteria;
import org.springframework.data.mongodb.core.query.Query;
import org.springframework.stereotype.Service;
import org.springframework.util.StringUtils;
import java.util.List;
import java.util.regex.Pattern;
/**
-
Created by mahongfei on 2019/9/9.
*/
@Service
public class CvServiceImpl implements CvService {
private static final Logger logger = LoggerFactory.getLogger(CvServiceImpl.class);@Autowired
private MongoTemplate mongoTemplate;@Override
public Result list() {
try {
return Result.newSuccess().withData(mongoTemplate.findAll(CV.class));
} catch (Exception e) {
logger.error(e.getLocalizedMessage(), e);
throw new IllegalArgumentException(“查询简历列表出错”);
}
}@Override
public Result pageList(int page, int pageNum, CV cv) {
try {
Pageable pageable = new PageRequest((page > 0 ? page - 1 : page), pageNum);
Query query = new Query();
long total = mongoTemplate.count(query, CV.class);
query.with(pageable);//设置分页
query.with(new Sort(Sort.Direction.DESC, “createTime”));//默认按创建时间降序
if (cv != null) {
if (!StringUtils.isEmpty(cv.getName())) { //简历名称模糊查询
query.addCriteria(Criteria.where(“name”).regex(Pattern.compile(String.format("^.%s.$", cv.getName()), Pattern.CASE_INSENSITIVE)));
}
}
List cvs = mongoTemplate.find(query, CV.class);
return Result.newSuccess().withData(cvs).withTotal(total);
} catch (Exception e) {
logger.error(e.getLocalizedMessage(), e);
throw new IllegalArgumentException(“查询简历列表出错”);
}
}@Override
public Result getBycvId(String cvId) {
if (StringUtils.isEmpty(cvId)) {
logger.error(“查询简历详情,cvId为空”);
throw new IllegalArgumentException(“查询简历详情出错,参数不能为空”);
}
try {
Query query = new Query(Criteria.where(“cvId”).is(cvId));
return Result.newSuccess().withData(mongoTemplate.find(query, CV.class));
} catch (Exception e) {
logger.info(String.format(“查询简历详情出错,cvId = %s”, cvId));
logger.error(e.getLocalizedMessage(), e);
throw new IllegalArgumentException(“查询简历详情出错”);
}
}
}
增删改接口:
package com.beagledata.mgc.lucas.jdcvmatch.openapi.service.impl;
import com.alibaba.fastjson.JSONObject;
import com.beagledata.mgc.lucas.jdcvmatch.common.Result;
import com.beagledata.mgc.lucas.jdcvmatch.common.domain.CV;
import com.beagledata.mgc.lucas.jdcvmatch.openapi.mq.Producer;
import com.beagledata.mgc.lucas.jdcvmatch.common.QueueName;
import com.beagledata.mgc.lucas.jdcvmatch.openapi.service.CvService;
import org.slf4j.Logger;
import org.slf4j.LoggerFactory;
import org.springframework.beans.factory.annotation.Autowired;
import org.springframework.data.mongodb.core.MongoTemplate;
import org.springframework.data.mongodb.core.query.Criteria;
import org.springframework.data.mongodb.core.query.Query;
import org.springframework.data.mongodb.core.query.Update;
import org.springframework.jms.annotation.JmsListener;
import org.springframework.stereotype.Service;
import org.springframework.util.StringUtils;
import java.text.SimpleDateFormat;
import java.util.Date;
/**
-
Created by mahongfei on 2019/9/9.
*/
@Service
public class CvSerciveImpl implements CvService {
private static final Logger logger = LoggerFactory.getLogger(JdServiceImpl.class);@Autowired
private Producer producer;
@Autowired
private MongoTemplate mongoTemplate;@Override
public Result add(String cvJson) {
producer.sendTextMsg(QueueName.CV_ADD, cvJson);
return Result.newSuccess();
}@Override
public Result delete(String deleteJson) {
producer.sendTextMsg(QueueName.CV_DEL, deleteJson);
return Result.newSuccess();
}@Override
public Result update(String updateJson) {
producer.sendTextMsg(QueueName.CV_UPDATE, updateJson);
return Result.newSuccess();
}@Override
@JmsListener(destination = QueueName.CV_ADD)
public void consumerAdd(String text) {
logger.info(“consumerAdd 接收到的报文为:” + text);
if (StringUtils.isEmpty(text)) {
logger.info(“消费CV新增同步, 消息内容为空”);
return;
}
try {
JSONObject cvJson = JSONObject.parseObject(text);
if (cvJson == null) {
logger.info(“CV数据同步 [新增], cvJson为空”);
return;
}
String cvId = cvJson.getString(“id”);
if (StringUtils.isEmpty(cvId)) {
logger.info(“cv数据同步 [新增], cvId为空”);
return;
}
Query query = new Query(Criteria.where(“cvId”).is(cvId));
Update update = new Update();
update.set(“cvId”, cvId);
update.set(“name”, cvJson.getString(“name”));
update.set(“sex”, Integer.parseInt(cvJson.getString(“gender_id”)));
update.set(“marriage”, Integer.parseInt(cvJson.getString(“is_married”)));
SimpleDateFormat sdf = new SimpleDateFormat(“yyyy-MM-dd”);
Date date = sdf.parse(cvJson.getString(“birth_year”)
+ “-” + cvJson.getString(“birth_month”)
+ “-” + cvJson.getString(“birth_day”));
update.set(“birth”, date);
update.set(“addr”, cvJson.getString(“address”));
update.set(“assessment”, cvJson.getString(“description”));
update.set(“edu”, String.valueOf(cvJson.getJSONArray(“education_experience”)));
update.set(“workExperience”, String.valueOf(cvJson.getJSONArray(“work_experience”)));
update.set(“projectExperience”, String.valueOf(cvJson.getJSONArray(“project_experience”)));
double value = Double.parseDouble(cvJson.getString(“salary_total”));
update.set(“currentSalary”, value * 10000);
mongoTemplate.upsert(query, update, CV.class);
} catch (Exception e) {
logger.error(e.getLocalizedMessage(), e);
}
}@Override
@JmsListener(destination = QueueName.CV_DEL)
public void consumerDel(String deleteJson) {
logger.info(“consumerDel 接收到的报文为:” + deleteJson);
try {
JSONObject cvJson = JSONObject.parseObject(deleteJson);
if (cvJson == null) {
logger.info(“cv数据同步 [更新], cvJson为空”);
return;
}
String cvId = cvJson.getString(“id”);
Query query = Query.query(Criteria.where(“cvId”).is(cvId));
mongoTemplate.remove(query, CV.class);
} catch (Exception e) {
logger.error(e.getLocalizedMessage() ,e);}
}
@Override
@JmsListener(destination = QueueName.CV_UPDATE)
public void consumerUpdate(String text) {
logger.info(“consumerUpdate 接收到的报文为:” + text);
try {
JSONObject json = JSONObject.parseObject(text);
if (json == null) {
logger.info(“cv数据同步 [更新], json为空”);
return;
}
String cvId = json.getString(“id”);
Query query = Query.query(Criteria.where(“cvId”).is(cvId));
Update update = new Update();
update.set(“name”, json.getString(“name”));
update.set(“sex”, Integer.parseInt(json.getString(“gender_id”)));
update.set(“marriage”, Integer.parseInt(json.getString(“is_married”)));
SimpleDateFormat sdf = new SimpleDateFormat(“yyyy-MM-dd”);
Date date = sdf.parse(json.getString(“birth_year”)
+ “-” + json.getString(“birth_month”)
+ “-” + json.getString(“birth_day”));
update.set(“birth”, date);
update.set(“addr”, json.getString(“address”));
update.set(“assessment”, json.getString(“description”));
update.set(“edu”, String.valueOf(json.getJSONArray(“education_experience”)));
update.set(“workExperience”, String.valueOf(json.getJSONArray(“work_experience”)));
update.set(“projectExperience”, String.valueOf(json.getJSONArray(“project_experience”)));
double value = Double.parseDouble(json.getString(“salary_total”));
update.set(“currentSalary”, value * 10000);
update.set(“updateTime”, new Date());
mongoTemplate.updateFirst(query, update, CV.class);
} catch (Exception e) {
logger.error(e.getLocalizedMessage() ,e);
}
}
}
生产者接口:
package com.beagledata.mgc.lucas.jdcvmatch.openapi.mq;
import org.apache.activemq.command.ActiveMQQueue;
import org.springframework.beans.factory.annotation.Autowired;
import org.springframework.jms.core.JmsMessagingTemplate;
import org.springframework.stereotype.Component;
import javax.jms.Destination;
/**
-
统一向MQ生成消息,根据queueName区分增删改查操作
-
Created by Cyf on 2019/9/9
**/
@Component
public class Producer {
@Autowired
private JmsMessagingTemplate template;public void sendTextMsg(String queueName, String message){
Destination destination = new ActiveMQQueue(queueName);
template.convertAndSend(destination, message);
}
}
配置:
server:
port: ${LJCM_OPENAPI_SERVER_PORT:33405}
context-path: /manage
spring:
data:
mongodb:
uri: L J C M M O N G O D B U R I : m o n g o d b : / / 172.16.210.20 , 172.16.210.21 , 172.16.210.22 / l u c a s h r ? r e p l i c a S e t = d e v a c t i v e m q : b r o k e r − u r l : f a i l o v e r : ( {LJCM_MONGODB_URI:mongodb://172.16.210.20,172.16.210.21,172.16.210.22/lucas_hr?replicaSet=dev} activemq: broker-url: failover:( LJCMMONGODBURI:mongodb://172.16.210.20,172.16.210.21,172.16.210.22/lucashr?replicaSet=devactivemq:broker−url:failover:({LJCM_ACTIVEMQ_BROKER_URL:tcp://localhost:61616})
pool:
enabled: true