ES过滤查询以及多个数据集组合

	@Override
	public List<ExaminationQry> findExaminationAndStatus(Long schCode, Long boeCode, String examType, String grade,
			List<SortEntity> sortEntitys, Integer from, Integer size) {
		Map<String, Object> map = new HashMap<String, Object>();
		if(schCode != null){
			map.put("schools.schCode", schCode);
		}else if(boeCode != null){
			map.put("bureaus.boeCode", boeCode);
		}
		
		if (!examType.equals("0")) {
			map.put("examType.code", examType);
		}
		if (!grade.equals("0")) {
			map.put("grade.code", grade);
		}
		Search search = buildSearch(getIndex(EsConfig.INDEX_BIZ_EXAM_DATA),
				getType(EsConfig.TYPE_BED_EXAMINATION),
				map);
		JSONArray array = eao.query(search);
		List<ExaminationQry> result = new ArrayList<>();
		Iterator<Object> it = array.iterator();
		while (it.hasNext()) {
			ExaminationQry examination = fixBean((JSONObject) it.next(), schCode, boeCode);// 补充bean的部分从其它表获取的数据
			result.add(examination);
		}
		return result;
	}

	private ExaminationQry fixBean(JSONObject json, Long schCode, Long boeCode) {
		Examination examination = (Examination) BaseEntity.fromDocument(json, Examination.class);
		ExaminationQry examinationQry = rdasDataFixService.fix(examination,schCode,boeCode);
		return examinationQry;
	}
	/**
	 * 补充业务数据-考试的考卷和状态信息
	 * 
	 * @param examination
	 *            业务数据-考试数据
	 * @return ExaminationQry
	 */
	public ExaminationQry fix(Examination examination, Long schCode, Long boeCode){
		
		if(examination==null)return null;
		
		ExaminationQry examinationQry=new ExaminationQry();
		examinationQry.setExamination(examination);
		
		
		// 状态
		if(examination.getExamCode()!=null ){
			List<ExaminationStatus> examinationStatus =  examinationStatusService.findExaminationStatuses(examination.getExamCode(),null, schCode, boeCode);
			examinationQry.setExaminationStatus(examinationStatus);
		}
		return examinationQry;
	}
	@Override
	public List<ExaminationStatus> findExaminationStatuses(Long examCode,Long paperCode, Long schCode, Long boeCode) {
		Map<String, Object> map = new HashMap<String, Object>();
		if(schCode != null){
			map.put("schCode", schCode);
		}else if (boeCode != null){
			map.put("boeCode", boeCode);
		}
		map.put("examCode", examCode);
		Search search = buildSearch(getIndex(EsConfig.INDEX_BIZ_EXAM_DATA),
				getType(EsConfig.TYPE_BED_EXAMINATION_STATUS),
				map);
		JSONArray array = eao.query(search);
		List<ExaminationStatus> result = new ArrayList<>();
		Iterator<Object> it = array.iterator();
		while (it.hasNext()) {
			ExaminationStatus examinationStatus=fixExaminationBean((JSONObject) it.next());//补充bean的部分从其它表获取的数据
			result.add(examinationStatus);
		}
		return result;
	}
	
	//补充bean的部分从其它表获取的数据
	private ExaminationStatus fixExaminationBean(JSONObject json) {
		ExaminationStatus examinationStatus=(ExaminationStatus) BaseEntity.fromDocument(json, ExaminationStatus.class);
		examinationStatus=rdasDataFixService.fix(examinationStatus);
		return examinationStatus;
	}
	/**
	 * 补充考试状态的试卷信息
	 *        
	 * @return
	 */
	@Override
	public com.moofen.core.entity.biz.exam.ExaminationStatus fix(com.moofen.core.entity.biz.exam.ExaminationStatus examinationStatus) {
		if(examinationStatus==null)return null;
		// 试卷
		if(examinationStatus.getPaper()!=null && examinationStatus.getPaper().getPaperCode()!=null){
			Paper paper = paperService.getPaper(examinationStatus.getPaper().getPaperCode());
			examinationStatus.setPaper(paper);// 试卷
		}
		return examinationStatus;

	}

 

	@Override
	public Paper getPaper(Long paperCode) {
		String paperType = getType(EsConfig.TYPE_BED_PAPER);
		String itemType = getType(EsConfig.TYPE_BED_ITEM);
		Search search = SearchBuilder.preparSearch(getIndex(EsConfig.INDEX_BIZ_EXAM_DATA))
				.setTypes(paperType, itemType)
				.setQuery(QueryBuilder.term("paperCode", paperCode));
		JSONArray array = eao.query(search);
		Paper result = null;
		List<Item> items = new ArrayList<Item>();
		for (int i = 0; i < array.size(); i++) {
			JSONObject json = array.getJSONObject(i);
			if (paperType.equalsIgnoreCase(json.getString(EsConstant.TYPE)))
				result = json.toJavaObject(Paper.class);
			else
				items.add((Item)BaseEntity.fromDocument(json, Item.class));
//				items.add(json.toJavaObject(Item.class));
		}
		if (null == result)
			return null;
		result.setItems(items);
		return result;
	}

 

package com.moofen.core.entity.biz.exam;

import java.util.List;

import com.moofen.core.entity.BaseEntity;

public class ExaminationQry extends BaseEntity {
	private static final long serialVersionUID = 1373036662349731849L;
	
	private Examination examination; // 考试
	private List<ExaminationStatus> examinationStatus; // 考试分析状态
	

	public List<ExaminationStatus> getExaminationStatus() {
		return examinationStatus;
	}
	public void setExaminationStatus(List<ExaminationStatus> examinationStatus) {
		this.examinationStatus = examinationStatus;
	}
	public Examination getExamination() {
		return examination;
	}
	public void setExamination(Examination examination) {
		this.examination = examination;
	}

}

 

/**
 *  Copyright (C) 2017 上海牧分信息科技有限公司版权所有
 *  
 *  项目: Moofen Core Module 
 *  文件:com.moofen.core.entity.biz.exam.ExaminationStatus.java
 *  描述:考试分析状态
 *  作者:Chen Xiaoming
 *  日期:2018年6月27日
 * 
 */
package com.moofen.core.entity.biz.exam;

import java.util.HashMap;
import java.util.Map;

import com.alibaba.fastjson.annotation.JSONField;
import com.moofen.core.entity.BaseEntity;

public class ExaminationStatus extends BaseEntity {
	private static final long serialVersionUID = 4470772531841794089L;

	private Examination examination; // 考试编号
	private Paper paper; // 试卷
	private Long boeCode; // 局编号
	private Long schCode; // 学校编号
	private Integer totalScoreStatus; // 总分导入状态:0-未导入 1-已导入
	private Integer detailScoreStatus; // 详分导入状态:0-未导入 1-已导入
	private Integer answerStatus; // 客观题作答导入状态:0-未导入 1-已导入
	private Integer analyzeStatus; // 分析状态: 0-未分析 1-已分析

	public Examination getExamination() {
		return examination;
	}

	public void setExamination(Examination examination) {
		this.examination = examination;
	}

	public Long getBoeCode() {
		return boeCode;
	}

	public void setBoeCode(Long boeCode) {
		this.boeCode = boeCode;
	}

	public Long getSchCode() {
		return schCode;
	}

	public void setSchCode(Long schCode) {
		this.schCode = schCode;
	}

	public Integer getAnalyzeStatus() {
		return analyzeStatus;
	}

	public void setAnalyzeStatus(Integer analyzeStatus) {
		this.analyzeStatus = analyzeStatus;
	}

	public Integer getTotalScoreStatus() {
		return totalScoreStatus;
	}

	public void setTotalScoreStatus(Integer totalScoreStatus) {
		this.totalScoreStatus = totalScoreStatus;
	}

	public Integer getDetailScoreStatus() {
		return detailScoreStatus;
	}

	public void setDetailScoreStatus(Integer detailScoreStatus) {
		this.detailScoreStatus = detailScoreStatus;
	}

	public Integer getAnswerStatus() {
		return answerStatus;
	}

	public void setAnswerStatus(Integer answerStatus) {
		this.answerStatus = answerStatus;
	}

	public Paper getPaper() {
		return paper;
	}

	public void setPaper(Paper paper) {
		this.paper = paper;
	}

	@JSONField(serialize = false)
	@Override
	public Map<String, String> getFieldMapping() {
		Map<String, String> result = new HashMap<String, String>();
		result.put("id", "id");
		result.put("schCode", "schCode");
		result.put("examCode", "examination.examCode");
		result.put("paperCode", "paper.paperCode");
		result.put("boeCode", "boeCode");
		result.put("schCode", "schCode");
		result.put("totalScoreStatus", "totalScoreStatus");
		result.put("detailScoreStatus", "detailScoreStatus");
		result.put("answerStatus", "answerStatus");
		result.put("analyzeStatus", "analyzeStatus");
		return result;
	}

}

 

/**
 *  Copyright (C) 2017 上海牧分信息科技有限公司版权所有
 *  
 *  项目: Moofen Bean Module 
 *  文件:com.moofen.core.entity.biz.exam.Paper.java
 *  描述:试卷
 *  作者:Chen Xiaoming
 *  日期:2018年5月14日
 * 
 */
package com.moofen.core.entity.biz.exam;

import java.util.List;

import com.alibaba.fastjson.JSONObject;
import com.moofen.core.entity.BaseEntity;
import com.moofen.core.entity.CodeNameEntity;
import com.moofen.core.entity.sys.base.Subject;
import com.moofen.core.entity.sys.sch.Grade;
import com.moofen.core.entity.sys.sch.Term;

public class Paper extends BaseEntity {

	private static final long serialVersionUID = -2256761766321815950L;

	public final static Integer PAPER_TYPE_EXAMINATION = 1; // 考试卷
	public final static Integer PAPER_TYPE_RESOURCE = 2; // 资源卷

	// 试卷难度
	public final static Integer DIFFICULTY_1 = 1; // 易
	public final static Integer DIFFICULTY_2 = 2; // 偏易
	public final static Integer DIFFICULTY_3 = 3; // 适中
	public final static Integer DIFFICULTY_4 = 4; // 偏难
	public final static Integer DIFFICULTY_5 = 5; // 难

	private Long paperCode; // 试卷编号
	private String paperName; // 试卷名称
	private Subject subject; // 学科
	private Grade grade; // 年级
	private Term term; // 学期
	private Integer difficulty; // 难度
	private Integer score; // 总分
	private Integer paperType; // 试卷类型 [1-考试卷 2-资源卷]
	private Boolean itemStatus; // 试卷结构是否导入
	private Boolean questionStatus; // 试题是否导入
	private String remarks; // 备注
	private Long createTime; // 创建时间
	private List<Item> items = null;

	public Subject getSubject() {
		return subject;
	}

	public void setSubject(Subject subject) {
		this.subject = subject;
	}

	public Grade getGrade() {
		return grade;
	}

	public void setGrade(Grade grade) {
		this.grade = grade;
	}

	public Term getTerm() {
		return term;
	}

	public void setTerm(Term term) {
		this.term = term;
	}

	public Long getPaperCode() {
		return paperCode;
	}

	public void setPaperCode(Long paperCode) {
		this.paperCode = paperCode;
	}

	public String getPaperName() {
		return paperName;
	}

	public void setPaperName(String paperName) {
		this.paperName = paperName;
	}

	public Integer getDifficulty() {
		return difficulty;
	}

	public void setDifficulty(Integer difficulty) {
		this.difficulty = difficulty;
	}

	public Integer getScore() {
		return score;
	}

	public void setScore(Integer score) {
		this.score = score;
	}

	public String getRemarks() {
		return remarks;
	}

	public void setRemarks(String remarks) {
		this.remarks = remarks;
	}

	public Long getCreateTime() {
		return createTime;
	}

	public void setCreateTime(Long createTime) {
		this.createTime = createTime;
	}

	public List<Item> getItems() {
		return items;
	}

	public void setItems(List<Item> items) {
		this.items = items;
	}

	public Integer getPaperType() {
		return paperType;
	}

	public void setPaperType(Integer paperType) {
		this.paperType = paperType;
	}

	public Boolean getItemStatus() {
		return itemStatus;
	}

	public void setItemStatus(Boolean itemStatus) {
		this.itemStatus = itemStatus;
	}

	public Boolean getQuestionStatus() {
		return questionStatus;
	}

	public void setQuestionStatus(Boolean questionStatus) {
		this.questionStatus = questionStatus;
	}

	@Override
	public JSONObject toDocument() {
		JSONObject result = new JSONObject();
		result.put("id", (null == getId()) ? null : getId());
		result.put("paperCode", (null == getPaperCode()) ? null : getPaperCode());
		result.put("paperName", (null == getPaperName()) ? null : getPaperName());
		result.put("subject", CodeNameEntity.toJsonObject(getSubject()));
		result.put("grade", CodeNameEntity.toJsonObject(getGrade()));
		result.put("term", CodeNameEntity.toJsonObject(getTerm()));
		result.put("difficulty", (null == getDifficulty()) ? null : getDifficulty());
		result.put("score", (null == getScore()) ? null : getScore());
		result.put("paperType", (null == getPaperType()) ? null : getPaperType());
		result.put("itemStatus", (null == getItemStatus()) ? null : getItemStatus());
		result.put("questionStatus", (null == getQuestionStatus()) ? null : getQuestionStatus());
		result.put("createTime", (null == getCreateTime()) ? null : getCreateTime());
		result.put("remarks", (null == getRemarks()) ? null : getRemarks());
		return result;
	}

}
	protected Search buildSearch(String index, String type, Map<String, Object> conds) {
		return buildSearch(index, type, null, null, conds, null, null, null);
	}

	protected Search buildSearch(String index, String type, String schCode, String yearIn, Map<String, Object> conds, List<SortEntity> sortEntitys, Integer from, Integer size) {
		Search search = SearchBuilder.preparSearch(index).setTypes(type);
		List<Query> queryList = buildQuery(conds);
		if (0 == queryList.size()) {
			search.setQuery(QueryBuilder.matchAll());
		} else if (1 == queryList.size()) {
			search.setQuery(queryList.get(0));
		} else {
			BoolQuery boolQuery = QueryBuilder.bool();
			for (Query query : queryList)
				boolQuery.must(query);
			search.setQuery(boolQuery);
		}
		if (sortEntitys != null && sortEntitys.size() > 0) {
			for (SortEntity aSortEntity : sortEntitys) {
				search.addSort(aSortEntity.getFieldName(), aSortEntity.getFieldOrder());
			}
		}
		if (null != from)
			search.setFrom(from);
		if (null != size)
			search.setSize(size);
		return search;
	}
	protected List<Query> buildQuery(Map<String, Object> conds) {
		List<Query> result = new ArrayList<Query>();
		if ((null == conds) || (conds.keySet().size() == 0))
			return result;
		for (String key : conds.keySet()) {
			Object value = conds.get(key);
			if (value != null){
				result.add(QueryBuilder.term(key, value));
			}
		}
		return result;
	}
	

 

 

 

 

  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值