package com.steerinfo.ems.trmworkprocproductvalue.service;

import com.steerinfo.framework.service.IBaseService;
import com.steerinfo.ems.trmworkprocproductvalue.model.TRmWorkprocProductValue;
import com.steerinfo.framework.service.pagehelper.PageList;

import java.math.BigDecimal;
import java.util.Date;
import java.util.HashMap;
import java.util.Map;
import java.util.Set;

/**
 * TRmWorkprocProductValue服务接口：
 * @author generator
 * @version 1.0-SNAPSHORT 2019-10-17 04:31
 * 类描述
 * 修订历史：
 * 日期：2019-10-17
 * 作者：generator
 * 参考：
 * 描述：TRmWorkprocProductValue服务接口
 * @see null
 * @Copyright 湖南视拓信息技术股份有限公司. All rights reserved.
 */
public interface ITRmWorkprocProductValueService extends IBaseService<TRmWorkprocProductValue, HashMap<String, Object>>{
	/**
	 * 根据主键(itemid, itemtype, clock, timegranid)更新对象
	 * 
	 * @param
	 * @return
	 */
	TRmWorkprocProductValue updateForUKey(TRmWorkprocProductValue tRmWorkprocProductValue);

   /* *//**
     * 查询时间粒度,时间,产品,工序获取数据(能源计划管理-计划项目数据维护)
     * @param parameters
     * @param pageNum
     * @param pageSize
     * @return
     */
    PageList<Map<String,Object>>getWorkprocProductValueForPage(Map<String,Object>parameters, Integer pageNum, Integer pageSize);

    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_PRODUCT_VALUE
     */
    void synchronousData();
    /**
     * 获取生产计划数据
     * 将IF_MES_EMS_PRODUCTORDER中未读取的数据进行处理，将数据保存至T_RM_WORKPROC_PRODUCT_VALUE
     */
    void synchronousOrderData();

	PageList<Map<String, Object>> getDate53ForPage(HashMap<String, Object> parmas, Integer pageNum, Integer pageSize);

	/**
	 * 新增
	 * @param tRmWorkprocProductValue
	 * @return
	 */
	TRmWorkprocProductValue insert(TRmWorkprocProductValue t);

	/**
     * 计算累计值
     * @param params <br/>
     *  itemid 项目ID <br/>
     *  clock 时间头(like clock%)<br/>
     *  timegranid 时间粒度
     * @return
     */
    Double getSumvalue(HashMap<String,Object> params);

    /**
     * 根据联合主键获取
     * @return
     */
    Set<String> getByCompositekeys();

    /**
     * 月粒度 获取计算值
     * @param params
     * @return
     */
    Double getTRmActValue(HashMap<String,Object> params);

    /**
     * 先处理IF_MES_EMS_SWAPFILE、IF_MES_EMS_PRODUCTORDER数据，然后统计产品实绩、产品计划，公式计算或者粒度累加(新增或者更新)
     * 
     * @param date 统计日(统计该天的上一天、上月或者上年)
     */
    void setDate(Date date);

    /**
     * 获取实绩产量
     * @param params
     * @return
     */
    Map<String ,BigDecimal> getOutPut(HashMap<String,Object> params);
    
    public Map<String, BigDecimal>getOutPut(String workprocid,String clock,String timegranid,String itemtype);
    
    /**
     * 统计生成实绩数据
     * 
     * @param timegranid 时间粒度
     * @param clock 时间
     * @param itmegranidSource 来源时间粒度
     */
    void createRData(String timegranid,String clock,String itmegranidSource);
    
    /**
     * 重新计算单个项目数据(新增或者更新月、年实绩)
     * 
     * @param itemid 项目ID
     * @param clock	时间
     * @param timegranid 时间粒度
     * @return
     */
    String restatData(String itemid, String clock, String timegranid);
    
    /**
     * 重新计算所有公式类型实绩产品数据
     * 
     * @param clock 时间
     * @param timegranid 时间粒度
     */
    void restatAllRData1(String clock, String timegranid);
    
    /**
     * 获取某工序某时间粒度产品产量
     * @param params <br/>
     *  workprocid 工序ID <br/>
     *  clock 时间 <br/>
     *  timegranid 时间粒度<br/>
     *  isprimary 是否主产品
     * @return
     */
    Double getProductvalue(HashMap<String,Object> params);

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

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