package com.steerinfo.ems.formula.mapper;

import com.steerinfo.ems.formula.model.Formula;
import com.steerinfo.framework.mapper.IBaseMapper;

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

import org.apache.ibatis.annotations.Mapper;
import org.apache.ibatis.annotations.Param;
import org.springframework.web.bind.annotation.PathVariable;

@Mapper
public interface FormulaMapper extends IBaseMapper<Formula, String> {
    /**
     * 根据公式code查找
     * @param code
     * @return
     */
	List<Formula> getByCode(String code);

    /**
     * 获取公式与写入表名
     * @param mp
     * @return
     */
	Map<String, Object> getFormulaAndTbname(Map<String, Object> mp);

	/**
	 * 根据项目与版本获取公式内容（参数需要itemid、clock，公式被禁用则返回null）
	 * 
	 * @param m
	 * @return
	 */
	String getFormula(Map<String, Object> m);

    /**
     * 根据code进行删除
     * @param code
     * @return
     */
	int deleteBycode(@Param("code") String code);

	/**
	 * 当公式code发生更改，替换对应的公式内容
	 * @param params
	 * @return
	 */
	int replaceFormula(Map<String, Object> params);
	
	/**
	 * 获得计算公式中包含code的公式列表
	 * 
	 * @param code 公式code(项目itemid)
	 * @return
	 */
	List<Formula> getFormulaByCode(@Param("code")String code);

	/**
	 * 获取最新版本的公式
	 *
	 * @param itemid 项目编号
	 * @return
	 */
	Formula getFormulaLatest(String itemid);
	
	/**
	 * 根据项目编号、时间获取公式，clock之前最近的公式
	 * 
	 * @param params
	 * @return
	 */
	Formula getFormulaCodeClock(Map<String, Object> params);
	
	/**
	 * 根据项目编号、版本获取公式，指定版本
	 * 
	 * @param params
	 * @return
	 */
	Formula getFormulaCodeClock2(Map<String, Object> params);

	/**
	 * 获得计算公式中包含code的	列表
	 *
	 * @param code 公式code(项目itemid)
	 * @return
	 */
	List<Formula> getAssociatedFormula(@Param("code")String code);
	
	/**
     * 查找日期前code的所有公式（包括禁用，解析公式使用，判断子项是否禁用）
     * 
     * @param params
     * @return
     */
	List<Formula> getByCodeClock(Map<String, Object> params);
	
	/**
     * 查找项目的各个版本号
     * 
     * @param params
     * @return
     */
	List<String> getClockByCode(Map<String, Object> params);
	
	/**
	 * 根据code进行批量更新
	 * 
	 * @param params
	 * @return
	 */
	int updateDesBycode(Map<String, Object> params);
	/**
	 * 批量更新
	 * @return
	 */
	List<Map<String, Object>> getDateForPage(HashMap<String, Object> parmas);
	
}