package com.gx.obe.evaluation.step.checker;

import java.util.ArrayList;
import java.util.HashMap;
import java.util.List;
import java.util.Map;

import com.gx.obe.business.vo.ErrorLeakCheckResult;
import com.gx.obe.components.core.enumeration.EngineerConstants;
import com.gx.obe.evaluation.step.entity.CacheDataClass;
import com.gx.obe.evaluation.step.inter.IChecker;
import com.gx.obe.util.utils.CollectionUtils;
import com.gx.obe.util.utils.DateUtils;
import com.gx.obe.util.utils.NumberFormatUtils;
import com.gx.obe.util.utils.ObjectUtils;
import com.gx.obe.web.entity.CheckResult;
import com.gx.obe.web.entity.DictionaryValue;
import com.gx.obe.web.entity.Supplier;
import com.gx.obe.web.entity.boq.BillTable;
import com.gx.obe.web.entity.boq.ConstructProject;
import com.gx.obe.web.entity.boq.ExtraTable;
import com.gx.obe.web.entity.boq.MeasureTable;
import com.gx.obe.web.entity.evaluation.EvaluationStep;
import com.gx.obe.web.entity.tender.TenderProjectEntity;
import com.gx.obe.web.service.boq.BillTableService;
import com.gx.obe.web.service.boq.MeasureTableService;

/**
 * @Description: 错漏项检查
 * @author guoyr
 */
public class ErrorLeakItemChecker extends BaseChecker implements IChecker {
	
//	private ConstructProjectService constructProjectService = ServiceFactory.getInstance("constructProjectService", ConstructProjectService.class);
	private BillTableService billTableService = new BillTableService();
	private MeasureTableService measureTableService = new MeasureTableService();
	private List<ErrorLeakCheckResult> checkResultTreeList = new ArrayList<ErrorLeakCheckResult>();
	private List<ErrorLeakCheckResult> checkResultErrorList = new ArrayList<ErrorLeakCheckResult>();
	private int nameError = 0;// 统计项目名称错误
	private int addError = 0;// 统计增项
	private int leakError = 0;// 统计漏项
	private int unitError = 0;// 统计单位错误
	private int quantityError = 0;// 统计工程量错误
	private CacheDataClass cacheDataClass;
	
	public void startCheck(ConstructProject constructProject) {
		checkResultTreeList.clear();
		checkResultErrorList.clear();
		checkResult = null;
		nameError = 0;// 统计项目名称错误
		addError = 0;// 统计增项
		leakError = 0;// 统计漏项
		unitError = 0;// 统计单位错误
		quantityError = 0;// 统计工程量错误
		
		if (null != constructProject) {
			// 获得单项工程
			List<ConstructProject> singleConstructionList = constructProject.getChildProjectList();
			if (null != singleConstructionList) {
				
				for (ConstructProject singleConstruction : singleConstructionList) {
					// 获得单位工程
					List<ConstructProject> unitConstructionList = singleConstruction.getChildProjectList();
					if (null != unitConstructionList) {
						for (ConstructProject unitConstruction : unitConstructionList) {
							ErrorLeakCheckResult unitResult = new ErrorLeakCheckResult();
							unitResult.setName(singleConstruction.getProjectName() + "-" + unitConstruction.getProjectName());
							unitResult.setCheckType(EngineerConstants.DWGC);
							checkResultTreeList.add(unitResult);
							long startTime = System.currentTimeMillis(); //获取结束时间		
							
							ErrorLeakCheckResult fbfxResult = new ErrorLeakCheckResult();
							fbfxResult.setName("分部分项");
							fbfxResult.setParent(unitResult);
							fbfxResult.setCheckType(EngineerConstants.FBFX);
							fbfxResult.setOpinion("");
							unitResult.addChild(fbfxResult);
							
							LOG.debug("开始获取项目  " + unitConstruction.getProjectName() + "分部分项清单");
							List<BillTable> projectBillTableList = getCacheListener().getProjectUnitConstructBillTableList(tenderProject.getId(), unitConstruction);
							// 检查分布分项清单
							LOG.debug("项目  " + unitConstruction.getProjectName() + "分部分项清单  " + projectBillTableList.size() + "   用时：\t" + DateUtils.timeSpan((System.currentTimeMillis() - startTime)));
							startTime = System.currentTimeMillis(); //获取结束时间		
							
							LOG.debug("开始获取" + supplier.getSupplierName() + "  " + unitConstruction.getProjectName() + "分部分项清单");
							List<BillTable> billTableList = getCacheListener().getSupplierUnitConstructBillTableList(tenderProject.getId(), supplier.getId(), unitConstruction);
							// 检查分布分项清单
							LOG.debug(supplier.getSupplierName() + "  " + unitConstruction.getProjectName() + "分部分项清单  " + billTableList.size() + "   用时：\t" + DateUtils.timeSpan((System.currentTimeMillis() - startTime)));
							
							// 检查分布分项清单
							checkBillTable(fbfxResult, unitConstruction, projectBillTableList, billTableList);
							
							ErrorLeakCheckResult csxmResult = new ErrorLeakCheckResult();
							csxmResult.setName("单价措施");
							csxmResult.setParent(unitResult);
							csxmResult.setCheckType(EngineerConstants.CSXM);
							csxmResult.setOpinion("");
							unitResult.addChild(csxmResult);
							LOG.debug("开始获取项目  " + unitConstruction.getProjectName() + "措施清单");
							List<MeasureTable> projectMeasureTableList = getCacheListener().getProjectUnitConstructMeasureTableList(tenderProject.getId(), unitConstruction);
							// 检查分布分项清单
							LOG.debug("项目  " + unitConstruction.getProjectName() + "措施清单" + projectMeasureTableList.size() + "   用时：\t" + DateUtils.timeSpan((System.currentTimeMillis() - startTime)));
							startTime = System.currentTimeMillis(); //获取结束时间		
							
							LOG.debug("开始获取" + supplier.getSupplierName() + "  " + unitConstruction.getProjectName() + "措施清单");
							List<MeasureTable> measureTableList = getCacheListener().getSupplierUnitConstructMeasureTableList(tenderProject.getId(), supplier.getId(), unitConstruction);
							// 检查分布分项清单
							LOG.debug(supplier.getSupplierName() + "  " + unitConstruction.getProjectName() + "措施清单  " + measureTableList.size() + "   用时：\t" + DateUtils.timeSpan((System.currentTimeMillis() - startTime)));
							// 检查措施清单
							checkMeasureTable(csxmResult, unitConstruction, projectMeasureTableList, measureTableList);
							
							ErrorLeakCheckResult qtxmResult = new ErrorLeakCheckResult();
							qtxmResult.setName("其他项目");
							qtxmResult.setParent(unitResult);
							qtxmResult.setCheckType(EngineerConstants.QTXM);
							qtxmResult.setOpinion("");
							unitResult.addChild(qtxmResult);
							List<ExtraTable> projectExtraTable = getCacheListener().getProjectUnitConstructExtraTableList(tenderProject.getId(), unitConstruction);
							
							List<ExtraTable> extraTableLIst = getCacheListener().getSupplierUnitConstructExtraTableList(tenderProject.getId(), supplier.getId(), unitConstruction);
							// 检查其他项目
							checkExtraTable(qtxmResult, unitConstruction, projectExtraTable, extraTableLIst);
						}
					}
				}
			}
		}
	}
	
	public void check2(TenderProjectEntity tenderProject, Supplier supplier, EvaluationStep evaluationStep, DictionaryValue dictionaryValue, ConstructProject constructProject, CacheDataClass cacheDataClass, CheckResult checkResult) {
		checkResultTreeList.clear();
		checkResultErrorList.clear();
		this.cacheDataClass = cacheDataClass;
		if (null == constructProject && null != checkResult) {
			this.checkResult = checkResult;
			return;
		}
		if (null != constructProject) {
			// 获得单项工程
			List<ConstructProject> singleConstructionList = constructProject.getChildProjectList();
			if (null != singleConstructionList) {
				
				List<String> constructProjectId = new ArrayList<String>();
				for (ConstructProject singleConstruction : singleConstructionList) {
					List<ConstructProject> unitConstructionList = singleConstruction.getChildProjectList();
					for (ConstructProject unitConstruction : unitConstructionList) {
						constructProjectId.add(unitConstruction.getId());
					}
				}
				cacheDataClass.setConstructProjectId(constructProjectId);
				
				for (ConstructProject singleConstruction : singleConstructionList) {
					// 获得单位工程
					List<ConstructProject> unitConstructionList = singleConstruction.getChildProjectList();
					if (null != unitConstructionList) {
						if (unitConstructionList.size() > 0) {
							addCacheData(unitConstructionList.size());
						}
						for (ConstructProject unitConstruction : unitConstructionList) {
							ErrorLeakCheckResult unitResult = new ErrorLeakCheckResult();
							unitResult.setName(singleConstruction.getProjectName() + "-" + unitConstruction.getProjectName());
							checkResultTreeList.add(unitResult);
							String unitConstructionID = unitConstruction.getId();
							List<BillTable> billTableList = cacheDataClass.getBILLTABLE_MAP().get(unitConstruction.getTenderId() + "_" + unitConstruction.getProjectCode());
							if (null == billTableList) {
								billTableList = billTableService.getTenderProjectBillTableQdList(unitConstruction.getTenderId(), unitConstruction.getProjectCode());
								//查询后天就到缓存中
								cacheDataClass.setBILLTABLE_MAP(unitConstruction.getTenderId() + "_" + unitConstruction.getProjectCode(), billTableList);
							}
							
							List<MeasureTable> measureTableList = cacheDataClass.getMEASURETBALE_MAP().get(unitConstruction.getTenderId() + "_" + unitConstruction.getProjectCode());
							if (null == measureTableList) {
								measureTableList = measureTableService.getTenderProjectMeasureTableQdList(constructProject.getTenderId(), constructProject.getProjectCode(), EngineerConstants.CSXM_DJ);
								//查询后天就到缓存中
								cacheDataClass.setMEASURETBALE_MAP(unitConstruction.getTenderId() + "_" + unitConstruction.getProjectCode(), measureTableList);
							}
							List<BillTable> billTableByIdList = cacheDataClass.getBILLTABLE_KYE_CONSTRUCT().get(unitConstructionID);
							if (null == billTableByIdList) {
								billTableByIdList = billTableService.getBillTableQdList(unitConstructionID);
							}
							List<MeasureTable> measureTableByIdList = cacheDataClass.getMEASURETBALE_KYE_CONSTRUCT().get(unitConstructionID);
							if (null == measureTableByIdList) {
								measureTableByIdList = measureTableService.getMeasureTableQdList(unitConstructionID);
							}
							
							// 检查分布分项清单
							checkBillTable(unitResult, unitConstruction, billTableList, billTableByIdList);
							// 检查措施清单
							checkMeasureTable(unitResult, unitConstruction, measureTableList, measureTableByIdList);
							if (null != billTableByIdList) {
								CacheDataClass.removeBillTableConstructProjectCacheDataById(unitConstructionID);
							}
							if (null != measureTableByIdList) {
								CacheDataClass.removeMeasureTableConstructProjectCacheDataById(unitConstructionID);
							}
						}
					}
				}
			}
		}
	}
	
	public void addCacheData(int subNumber) {
		List<String> constructProjectId = cacheDataClass.getConstructProjectId(subNumber);
		if (CollectionUtils.isNotNull(constructProjectId)) {
			List<BillTable> billTableList = billTableService.getBillTableBTConstructionIdsList(constructProjectId);
			for (BillTable billTable : billTableList) {
				String tempkey = billTable.getProjectId();
				List<BillTable> templist = cacheDataClass.getBILLTABLE_KYE_CONSTRUCT().get(tempkey);
				if (templist == null) {
					templist = new ArrayList<BillTable>();
					templist.add(billTable);
				} else {
					templist.add(billTable);
				}
				cacheDataClass.setBILLTABLE_KYE_CONSTRUCT(tempkey, templist);
			}
			List<MeasureTable> MeasureTableList = measureTableService.getMeasureTableByConstructionIdsList(constructProjectId, EngineerConstants.CSXM_DJ);
			
			for (MeasureTable measureTable : MeasureTableList) {
				String tempkey = measureTable.getProjectId();
				List<MeasureTable> templist = cacheDataClass.getMEASURETBALE_KYE_CONSTRUCT().get(tempkey);
				if (templist == null) {
					templist = new ArrayList<MeasureTable>();
					templist.add(measureTable);
				} else {
					templist.add(measureTable);
				}
				cacheDataClass.setMEASURETBALE_KYE_CONSTRUCT(tempkey, templist);
			}
		}
	}
	
	/**
	 * @Description: 检查分布分项清单
	 * @author mazc
	 * @param parentCheckResult
	 * @param constructProject
	 */
	private void checkBillTable(ErrorLeakCheckResult parentCheckResult, ConstructProject constructProject, List<BillTable> projectItemList, List<BillTable> billTableList) {
		Map<String, BillTable> projectItemMap = new HashMap<String, BillTable>();
		if (null != projectItemList) {
			for (BillTable qd : projectItemList) {
				projectItemMap.put(qd.getBillCode(), qd);
			}
		}
		
		for (BillTable qd : billTableList) {
			ErrorLeakCheckResult qdResult = new ErrorLeakCheckResult();
			qdResult.setCode(qd.getBillCode());
			qdResult.setName(qd.getBillName());
			qdResult.setParent(parentCheckResult);
			BillTable projectQd = projectItemMap.get(qd.getBillCode());
			// 如果是招标项目中规定的清单，则验证清单的其他信息
			if (null != projectQd) {
				qdResult.setReasonable(false);
				projectItemMap.remove(projectQd.getBillCode());
				if (!ObjectUtils.equals(projectQd.getBillCode(), qd.getBillCode())) {
					nameError++;
					qdResult.setOpinion("清单编码错误 ");
					qdResult.setErrorItem(qd.getBillName());// 错误项
					qdResult.setCorrectItem(projectQd.getBillName());// 正确项
					checkResultErrorList.add(qdResult);
				} else if (!ObjectUtils.equals(projectQd.getBillName(), qd.getBillName())) {
					nameError++;
					qdResult.setOpinion("清单名称错误");
					qdResult.setErrorItem(qd.getBillName());// 错误项
					qdResult.setCorrectItem(projectQd.getBillName());// 正确项
					checkResultErrorList.add(qdResult);
				} else if (!ObjectUtils.equals(projectQd.getUnit(), qd.getUnit())) {
					unitError++;
					qdResult.setOpinion("计量单位错误");
					qdResult.setErrorItem(qd.getUnit());// 错误项
					qdResult.setCorrectItem(projectQd.getUnit());// 正确项
					checkResultErrorList.add(qdResult);
				} else if (!isSame(projectQd.getQuantity(), qd.getQuantity())) {
					quantityError++;
					qdResult.setOpinion("工程量错误");
					qdResult.setErrorItem(NumberFormatUtils.format(qd.getQuantity()));// 错误项
					qdResult.setCorrectItem(NumberFormatUtils.format(projectQd.getQuantity()));// 正确项
					checkResultErrorList.add(qdResult);
				} else {
					qdResult.setReasonable(true);
					qdResult.setOpinion("无错漏");
				}
			} else {// 如果未在招标项目中规定的清单中，则说明是增项
				
				addError++;
				qdResult.setOpinion("增项");
				qdResult.setReasonable(false);
				checkResultErrorList.add(qdResult);
			}
			parentCheckResult.addChild(qdResult);
		}
		
		// 统计是否有漏项
		for (BillTable lackBillTable : projectItemMap.values()) {
			ErrorLeakCheckResult lackQdResult = new ErrorLeakCheckResult();
			lackQdResult.setCode(lackBillTable.getBillCode());
			lackQdResult.setName(lackBillTable.getBillName());
			lackQdResult.setParent(parentCheckResult);
			lackQdResult.setOpinion("漏项");
			lackQdResult.setReasonable(false);
			leakError++;
			checkResultErrorList.add(lackQdResult);
			parentCheckResult.addChild(lackQdResult);
		}
	}
	
	/**
	 * @Description: 检查分布分项清单
	 * @author mazc
	 * @param parentCheckResult
	 * @param constructProject
	 * @param projectItemsList
	 */
	private void checkMeasureTable(ErrorLeakCheckResult parentCheckResult, ConstructProject constructProject, List<MeasureTable> projectItemsList, List<MeasureTable> MeasureTableList) {
		Map<String, MeasureTable> projectItemsMap = new HashMap<String, MeasureTable>();
		if (null != projectItemsList) {
			for (MeasureTable qd : projectItemsList) {
				projectItemsMap.put(qd.getMeasureCode(), qd);
			}
		}
		
//		List<MeasureTable> MeasureTableList = measureTableService.getMeasureTableQdList(constructProject.getId());
		for (MeasureTable qd : MeasureTableList) {
			
			ErrorLeakCheckResult qdResult = new ErrorLeakCheckResult();
			qdResult.setCode(qd.getMeasureCode());
			qdResult.setName(qd.getMeasureName());
			qdResult.setParent(parentCheckResult);
			MeasureTable projectQd = projectItemsMap.get(qd.getMeasureCode());
			// 如果是招标项目中规定的清单，则验证清单的其他信息
			if (null != projectQd) {
				projectItemsMap.remove(projectQd.getMeasureCode());
				qdResult.setReasonable(false);
				if (!ObjectUtils.equals(projectQd.getMeasureCode(), qd.getMeasureCode())) {
					nameError++;
					qdResult.setOpinion("清单编码错误");
					qdResult.setErrorItem(qd.getMeasureName());// 错误项
					qdResult.setCorrectItem(projectQd.getMeasureName());// 正确项
					checkResultErrorList.add(qdResult);
//				}else if(!ObjectUtils.equals(projectQd.getMeasureName().trim(), qd.getMeasureName().trim())){
				} else if (null != qd.getMeasureName() && null != projectQd.getMeasureName() && !qd.getMeasureName().contains(projectQd.getMeasureName())) {
					nameError++;
					qdResult.setOpinion("清单名称错误");
					qdResult.setErrorItem(qd.getMeasureName());// 错误项
					qdResult.setCorrectItem(projectQd.getMeasureName());// 正确项
					checkResultErrorList.add(qdResult);
				} else if (!ObjectUtils.equals(projectQd.getUnit(), qd.getUnit())) {
					unitError++;
					qdResult.setOpinion("计量单位错误");
					qdResult.setErrorItem(qd.getUnit());// 错误项
					qdResult.setCorrectItem(projectQd.getUnit());// 正确项
					checkResultErrorList.add(qdResult);
				} else if (!isSame(projectQd.getQuantity(), qd.getQuantity())) {
					quantityError++;
					qdResult.setOpinion("工程量错误");
					qdResult.setErrorItem(NumberFormatUtils.format(qd.getQuantity()));// 错误项
					qdResult.setCorrectItem(NumberFormatUtils.format(projectQd.getQuantity()));// 正确项
					checkResultErrorList.add(qdResult);
				} else {
					qdResult.setReasonable(true);
					qdResult.setOpinion("无错漏");
				}
			} else {// 如果未在招标项目中规定的清单中，则说明是增项
			
//				addError ++;
				qdResult.setOpinion("增项");
				qdResult.setReasonable(false);
//				checkResultErrorList.add(qdResult);
			}
			parentCheckResult.addChild(qdResult);
		}
		
		// 统计是否有漏项
		for (MeasureTable lackItem : projectItemsMap.values()) {
			ErrorLeakCheckResult lackQdResult = new ErrorLeakCheckResult();
			lackQdResult.setCode(lackItem.getMeasureCode());
			lackQdResult.setName(lackItem.getMeasureName());
			lackQdResult.setParent(parentCheckResult);
			leakError++;
			lackQdResult.setOpinion("漏项");
			lackQdResult.setReasonable(false);
			checkResultErrorList.add(lackQdResult);
			parentCheckResult.addChild(lackQdResult);
		}
	}
	
	/**
	 * @Description: 检查其他项目
	 * @author mazc
	 * @param parentCheckResult
	 * @param constructProject
	 * @param projectItemList
	 * @param extraTableList
	 */
	private void checkExtraTable(ErrorLeakCheckResult parentCheckResult, ConstructProject constructProject, List<ExtraTable> projectItemList, List<ExtraTable> extraTableList) {
		Map<String, ExtraTable> projectItemMap = new HashMap<String, ExtraTable>();
		if (null != projectItemList) {
			for (ExtraTable qd : projectItemList) {
				projectItemMap.put(qd.getExtraCode(), qd);
			}
		}
		for (ExtraTable qd : extraTableList) {
			ErrorLeakCheckResult qdResult = new ErrorLeakCheckResult();
			qdResult.setCode(qd.getExtraCode());
			qdResult.setName(qd.getExtraName());
			qdResult.setParent(parentCheckResult);
			if (qd.getExtraName().contains("总承包服务费") || qd.getExtraName().contains("计日工")) {
				continue;
			}
			ExtraTable projectQd = projectItemMap.get(qd.getExtraCode());
			if (null != projectQd) {
				qdResult.setReasonable(false);
				projectItemMap.remove(projectQd.getExtraCode());
				if (!ObjectUtils.equals(projectQd.getExtraName().trim(), qd.getExtraName().trim())) {
					nameError++;
					qdResult.setOpinion("项目名称错误");
					qdResult.setErrorItem(qd.getExtraName());// 错误项
					qdResult.setCorrectItem(projectQd.getExtraName());// 正确项
					checkResultErrorList.add(qdResult);
				} else if (!ObjectUtils.equals(projectQd.getUnit().trim(), qd.getUnit().trim())) {
					unitError++;
					qdResult.setOpinion("计量单位错误");
					qdResult.setErrorItem(qd.getUnit());// 错误项
					qdResult.setCorrectItem(projectQd.getUnit());// 正确项
					checkResultErrorList.add(qdResult);
				} else if (!isSame(projectQd.getTotal(), qd.getTotal())) {
					quantityError++;
					qdResult.setOpinion("金额错误");
					qdResult.setErrorItem(NumberFormatUtils.format(qd.getTotal()));// 错误项
					qdResult.setCorrectItem(NumberFormatUtils.format(projectQd.getTotal()));// 正确项
					checkResultErrorList.add(qdResult);
				} else {
					qdResult.setReasonable(true);
					qdResult.setOpinion("无错漏");
				}
			} else {
				addError++;
				qdResult.setOpinion("增项");
				qdResult.setReasonable(false);
				checkResultErrorList.add(qdResult);
			}
			parentCheckResult.addChild(qdResult);
		}
		// 统计是否有漏项
		for (ExtraTable lackExtraTable : projectItemMap.values()) {
			if (lackExtraTable.getExtraName().contains("总承包服务费") || lackExtraTable.getExtraName().contains("计日工")) {
				continue;
			}
			ErrorLeakCheckResult lackQdResult = new ErrorLeakCheckResult();
			lackQdResult.setCode(lackExtraTable.getExtraCode());
			lackQdResult.setName(lackExtraTable.getExtraName());
			lackQdResult.setParent(parentCheckResult);
			lackQdResult.setOpinion("漏项");
			lackQdResult.setReasonable(false);
			leakError++;
			checkResultErrorList.add(lackQdResult);
			parentCheckResult.addChild(lackQdResult);
		}
	}
	
	public int getErrorCount() {
		return checkResultErrorList.size();
	}
	
	@SuppressWarnings("unchecked")
	public <T> List<T> getCheckResultDetailTreeList() {
		return (List<T>) checkResultTreeList;
	}
	
	@SuppressWarnings("unchecked")
	public <T> List<T> getCheckResultErrorList() {
		return (List<T>) checkResultErrorList;
	}
	
	public void setCheckResult(CheckResult checkResult) {
		this.checkResult = checkResult;
	}
	
	public CheckResult getCheckResult() {
		if (null != checkResult) return checkResult;
		checkResult = initCheckResult(checkResult);
		if (checkResultErrorList.size() > 0) {
			checkResult.setErrorNum(checkResultErrorList.size());
			checkResult.setAccessment(com.gx.obe.components.core.enumeration.EvaluationStepEnum.UNQUALIFIED);
			StringBuilder error = new StringBuilder();
			if (nameError > 0) {
				error.append(nameError);
				error.append("项项目名称错误");
			}
			if (unitError > 0) {
				if (error.length() > 0) {
					error.append("；");
				}
				error.append(unitError);
				error.append("项计量单位错误");
			}
			if (quantityError > 0) {
				if (error.length() > 0) {
					error.append("；");
				}
				error.append(quantityError);
				error.append("项工程量错误");
			}
			if (addError > 0) {
				if (error.length() > 0) {
					error.append("；");
				}
				error.append(addError);
				error.append("项增项");
			}
			if (leakError > 0) {
				if (error.length() > 0) {
					error.append("；");
				}
				error.append(leakError);
				error.append("项漏项");
			}
			error.append("。");
			checkResult.setCheckResult(error.toString());
		} else {
			checkResult.setErrorNum(0);
			checkResult.setAccessment(com.gx.obe.components.core.enumeration.EvaluationStepEnum.QUALIFIED);
			checkResult.setCheckResult("无错漏。");
		}
		
		return checkResult;
	}
	
}
