package com.yunfeiyun.agmp.fms.service;

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

import com.yunfeiyun.agmp.fms.domain.SpmOrder;
import com.yunfeiyun.agmp.fms.domain.reqvo.SelectCountOfScreenReqVo;
import com.yunfeiyun.agmp.fms.domain.reqvo.SelectOfTssStatReqVo;
import com.yunfeiyun.agmp.fms.domain.reqvo.SpmOrderLogisticsInfoReqVo;
import com.yunfeiyun.agmp.fms.domain.reqvo.SpmOrderMatchTraceCodeReqVo;
import com.yunfeiyun.agmp.fms.domain.resvo.SpmOrderLogisticsInfoResVo;
import com.yunfeiyun.agmp.fms.domain.resvo.SpmOrderLogisticsSumInfoResVo;
import com.yunfeiyun.agmp.fms.domain.resvo.SpmOrderOfScreenResVo;
import com.yunfeiyun.agmp.fms.domain.resvo.SpmOrderOfTssStatResVo;
import com.yunfeiyun.agmp.fms.domain.resvo.SpmOrderResVo;
import com.yunfeiyun.agmp.fms.domain.resvo.SpmOrderStatResVo;
import com.yunfeiyun.agmp.fms.domain.resvo.SpmPayOfTssStatResVo;


/**
 * 农产品出库登记单Service接口
 * 
 * @author 杨晓辉
 * @date 2023-07-06
 */
public interface ISpmOrderService 
{
    /**
     * 查询农产品出库登记单
     * 
     * @param orderId 农产品出库登记单主键
     * @return 农产品出库登记单
     */
    public SpmOrder selectSpmOrderByOrderId(String orderId);

    /**
     * 查询农产品出库登记单列表
     * 
     * @param spmOrder 农产品出库登记单
     * @return 农产品出库登记单集合
     */
    public List<SpmOrder> selectSpmOrderList(SpmOrder spmOrder);

    public List<SpmOrderResVo> selectSpmOrderResVoList(SpmOrder spmOrder);
    public List<SpmOrderOfScreenResVo> selectSpmOrderOfScreenList(SpmOrder spmOrder);
    /** 溯源统计页面使用：销售明细列表数据（分页） */
    public List<SpmOrderOfTssStatResVo> selectSpmOrderOfTssStatList(SelectOfTssStatReqVo reqVo);
    /** 溯源统计页面使用：支出/投入明细列表（分页）-物流费用 */
    public List<SpmPayOfTssStatResVo> selectSpmOrderPayOfTssStatList(SelectOfTssStatReqVo reqVo);
    
    public Map<String, Object> selectSpmOrderStat(SelectCountOfScreenReqVo reqVo);
    /** 溯源统计页面使用：统计概要-总收入，物流支出 */
    public Map<String, Object> selectMoneyOfTssTrace(SelectOfTssStatReqVo reqVo);
    /** 溯源统计页面使用：年度每月收益，物流支出 */
    public List<Map<String, Object>> selectMoneyByMonthOfTssTrace(SelectOfTssStatReqVo reqVo);
    /** 溯源统计页面使用：年度分析-每月（农产品费用-按类型） */
    public Map<String, Map<String, Object>> selectPayMonthByType(SelectOfTssStatReqVo reqVo);
    /** 溯源统计页面使用：成本占比（农产品费用） */
    public List<Map<String, Object>> selectFinishgoodsMoneyOfTssTrace(SelectOfTssStatReqVo reqVo);
    /** 溯源统计页面使用：成本占比-明细（农产品费用-采收） */
    public List<SpmPayOfTssStatResVo> selectPayByCs(SelectOfTssStatReqVo reqVo);
    /** 溯源统计页面使用：成本占比-明细（农产品费用-加工） */
    public List<SpmPayOfTssStatResVo> selectPayByJg(SelectOfTssStatReqVo reqVo);
    /** 溯源统计页面使用：成本占比-明细（农产品费用-包装） */
    public List<SpmPayOfTssStatResVo> selectPayByBz(SelectOfTssStatReqVo reqVo);
    public List<SpmOrderStatResVo> selectSpmOrderByGoodsStat(SelectCountOfScreenReqVo reqVo);
    public List<SpmOrderStatResVo> selectSpmOrderMoneyByGoodsStat(SelectCountOfScreenReqVo reqVo);
    /** 溯源统计页面使用：产品销售金额排行 */
    public List<SpmOrderStatResVo> selectSpmOrderMoneyByTssStat(SelectOfTssStatReqVo reqVo);
    /** 溯源统计页面使用：概要信息-地块数量 */
    public Integer selectDkCountOfTssTrace(SelectOfTssStatReqVo reqVo);
    /** 溯源统计页面使用：概要信息-产品类型 */
    public Integer selectGoodsTypeCountOfTssTrace(SelectOfTssStatReqVo reqVo);
    
    public List<SpmOrderStatResVo> selectCountGroupByProvince(SelectCountOfScreenReqVo reqVo);
    public List<SpmOrderStatResVo> selectCountGroupByCity(SelectCountOfScreenReqVo reqVo);
    /** 溯源统计页面使用：产品销售地（气泡图） */
    public List<SpmOrderStatResVo> selectMoneyGroupByCity(SelectOfTssStatReqVo reqVo);

    public List<SpmOrderLogisticsInfoResVo> selectSpmOrderLogisticsInfoReqVo(SpmOrderLogisticsInfoReqVo spmOrderLogisticsInfoReqVo);

    public  List<SpmOrderLogisticsSumInfoResVo> selectSpmOrderLogisticsSumInfo(SpmOrderLogisticsInfoReqVo spmOrderLogisticsInfoReqVo);
    /**
     * 新增农产品出库登记单
     * 
     * @param spmOrder 农产品出库登记单
     * @return 结果
     */
    public int insertSpmOrder(SpmOrder spmOrder);

    /**
     * 修改农产品出库登记单
     * 
     * @param spmOrder 农产品出库登记单
     * @return 结果
     */
    public int updateSpmOrder(SpmOrder spmOrder);

    /**
     * 修改农产品出库登记单
     *
     * @param spmOrder 农产品出库登记单
     * @return 结果
     */
    public int updateSpmOrderByIds(SpmOrder spmOrder,String[] ids);

    /**
     * 批量删除农产品出库登记单
     * 
     * @param orderIds 需要删除的农产品出库登记单主键集合
     * @return 结果
     */
    public int deleteSpmOrderByOrderIds(String[] orderIds);

    /**
     * 删除农产品出库登记单信息
     * 
     * @param orderId 农产品出库登记单主键
     * @return 结果
     */
    public int deleteSpmOrderByOrderId(String orderId);

     void sale(SpmOrder spmOrder);

     void deliver(SpmOrder spmOrder);
     boolean traceCodeMatch(SpmOrderMatchTraceCodeReqVo spmOrderMatchTraceCodeReqVo);

     boolean traceCodeUnbind(String tarcecodeapplyno);
}
