package com.beagledata.mgc.lucas.jdcvmatch.admin.service.impl;
import com.beagledata.mgc.lucas.jdcvmatch.admin.mapper.PermissionMapper;
import com.beagledata.mgc.lucas.jdcvmatch.admin.service.RecommendService;
import com.beagledata.mgc.lucas.jdcvmatch.common.domain.CV;
import com.beagledata.utils.StringUtil;
import org.apache.log4j.LogManager;
import org.apache.log4j.Logger;
import org.springframework.beans.factory.annotation.Autowired;
import org.springframework.data.mongodb.core.MongoTemplate;
import org.springframework.data.mongodb.core.aggregation.*;
import org.springframework.data.mongodb.core.query.Criteria;
import org.springframework.stereotype.Service;
import java.util.*;
@Service
public class RecommendServiceImpl implements RecommendService{
private static Logger logger = LogManager.getLogger(RecommendServiceImpl.class);
@Autowired
private PermissionMapper permissionMapper;
@Autowired
private MongoTemplate mongoTemplate;
@Override
public List<CV> selectList(String jdid, int page, int pageNum) {
if (StringUtil.isBlank(jdid)) {
throw new IllegalArgumentException("jdid不能为空!") ;
}
Criteria criteria = new Criteria();
List<AggregationOperation> operations = new ArrayList<>();
operations.add(Aggregation.match(criteria.and("jdId").is(jdid)));
//toObjectId只适用于mongodb4
operations.add(Aggregation.project().andExpression("\"$recommend.cvId\"").as("recommend"));
operations.add(UnwindOperation.newUnwind().path("recommend").noArrayIndex().skipNullAndEmptyArrays());
operations.add(LookupOperation.newLookup()
.from("cv")
.localField("recommend")
.foreignField("cvId")
.as("cv"));
operations.add(UnwindOperation.newUnwind().path("cv").noArrayIndex().skipNullAndEmptyArrays());
operations.add(Aggregation.project()
.andExpression("\"$cv._id\"").as("_id")
.andExpression("\"$cv.updateTime\"").as("updateTime")
.andExpression("\"$cv.createTime\"").as("createTime")
.andExpression("\"$cv.name\"").as("name")
.andExpression("\"$cv.cvId\"").as("cvId")
.andExpression("\"$cv.sex\"").as("sex")
.andExpression("\"$cv.marriage\"").as("marriage")
.andExpression("\"$cv.birth\"").as("birth")
.andExpression("\"$cv.addr\"").as("addr")
.andExpression("\"$cv.assessment\"").as("assessment")
.andExpression("\"$cv.edu\"").as("edu")
.andExpression("\"$cv.projectExperience\"").as("projectExperience")
.andExpression("\"$cv.currentSalary\"").as("currentSalary")
.andExpression("\"$cv.trainingCourses\"").as("trainingCourses")
.andExpression("\"$cv.other\"").as("other")
.andExpression("\"$cv.workExperience\"").as("workExperience"));
operations.add(Aggregation.skip((page - 1) * pageNum));
operations.add(Aggregation.limit(pageNum));
Aggregation aggregationCount = Aggregation.newAggregation(operations);
AggregationResults results = mongoTemplate.aggregate(aggregationCount, "recommendTask", CV.class);
List<CV> list = results.getMappedResults();
return list;
}
@Override
public int selectListTotal(String jdid) {
Criteria criteria = new Criteria();
List<AggregationOperation> operations = new ArrayList<>();
operations.add(Aggregation.match(criteria.and("jdId").is(jdid)));
operations.add(Aggregation.project().andExpression("\"$recommend.cvId\"").as("recommend"));
operations.add(UnwindOperation.newUnwind().path("recommend").noArrayIndex().skipNullAndEmptyArrays());
Aggregation aggregationCount = Aggregation.newAggregation(operations);
AggregationResults results = mongoTemplate.aggregate(aggregationCount, "recommendTask", CV.class);
List<CV> list = results.getMappedResults();
return list.size();
}
}