package com.steerinfo.ems.trmworkprocmaterialvalue.service;

import com.steerinfo.ems.trmworkprocmaterialvalue.model.TRmWorkprocMaterialValue;
import com.steerinfo.framework.service.IBaseService;
import com.steerinfo.framework.service.pagehelper.PageList;

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

/**
 * TRmWorkprocMaterialValue服务接口：
 * @author generator
 * @version 1.0-SNAPSHORT 2019-10-17 04:39
 * 类描述
 * 修订历史：
 * 日期：2019-10-17
 * 作者：generator
 * 参考：
 * 描述：TRmWorkprocMaterialValue服务接口
 * @see null
 * @Copyright 湖南视拓信息技术股份有限公司. All rights reserved.
 */
public interface ITRmWorkprocMaterialValueService extends IBaseService<TRmWorkprocMaterialValue, HashMap<String, Object>>{
	
	/**
	 * 获得工序与原材料数据维护数据（能源平衡管理-工序与原材料数据维护页面，分页查询）
	 * 
	 * @return
	 */
	PageList<Map<String, Object>> getWorkprocMaterialDetailForPage(Map<String, Object> parameters, Integer pageNum, Integer pageSize);
	
	/**
	 * 根据主键(itemid, clock, timegranid)更新对象
	 * 
	 * @param
	 * @return
	 */
	TRmWorkprocMaterialValue updateForUKey(TRmWorkprocMaterialValue tRmWorkprocMaterialValue);

	int updateValue(HashMap<String, Object> m);

	int insertValue(HashMap<String, Object> m);
	
	int deleteByPrimaryKey(HashMap<String, Object> m);
	/**
	 * 将IF_MES_EMS_SWAPFILE中未读取的数据进行处理，将数据保存至T_RM_WORKPROC_MATERIAL_VALUE
	 */
	void synchronousData();
	
	/**
	 * 原料购入0数据处理（type=4）
	 */
	void synchronousData4();
	
	/**
	 * 原料库存-数据处理（type=5）
	 */
	void synchronousData5();

    /**
     * 原材料定时任务，先处理IF_MES_EMS_SWAPFILE数据，然后公式计算或者粒度累加，生成计算公式生成数据的日数据，以及月数据、年数据(新增或者更新)
     * 
     * @param date 统计日(统计该天的上一天、上月或者上年)
     */
    void setDate(Date date);

    /**
     * 获取最终值
     * @param params
     * @return
     */
    Double getSumvalue(HashMap<String,Object> params);

    int insert(TRmWorkprocMaterialValue tRmWorkprocMaterialValue);

    /**
     * 获取月实绩产量和累计产量
     * @param params
     * @return
     */
    Map<String,Object>getMonthOutPut(HashMap<String,Object> params);
    /**
     * 
     * @param itemid项目id
     * @param clock 时间
     * @param timegranid 时间粒度
     * @return
     */
    Double getSumvalue(String itemid,String clock,String timegranid);

    /**
     * 重新计算单个项目数据(新增或者更新)
     * 
     * @param itemid 项目ID
     * @param clock	时间
     * @param timegranid 时间粒度
     * @return
     */
    String restatData(String itemid, String clock, String timegranid);

	/**
	 * 从报表视图(V_INPUTOUTPUT)获取数据并修改实绩消耗
	 * @param params 开始时间，结束时间
	 * @return
	 */
	void getReportValue(HashMap<String, Object> params);

	/**
	 * 从报表视图(V_INPUTOUTPUT)获取数据并修改实绩消耗
	 * @param date 时间
	 * @return
	 */
	void getReportValue(Date date);
}