package com.sunda.spmsorder.service;

import com.alibaba.fastjson.JSONObject;
import com.baomidou.mybatisplus.core.metadata.IPage;
import com.baomidou.mybatisplus.extension.plugins.pagination.Page;
import com.baomidou.mybatisplus.extension.service.IService;
import com.sunda.spmscommon.ResponseResult;
import com.sunda.spmsorder.entity.OrderWerks;

import java.util.List;
import java.util.Map;

/**
 * <p>
 * 工厂请购单 服务类
 * </p>
 *
 * @author Wayne
 * @since 2021-02-05
 */
public interface IOrderWerksService extends IService<OrderWerks> {

    /** 获取工厂请购单表头信息，使用 mybatis-plus 自带分页； */
    IPage<OrderWerks> getOrderWerksByWerks(Page<OrderWerks> page, String werks, String spmsStatus,  String spmsId, String urgencyDegree, String dateRequiredStart, String dateRequiredEnd, String applicationDateStart, String applicationDateEnd,String requestType);

    /** 获取工厂请购单行项目信息，分页 */
    Map<String, Object> getOrderWerksDtl(int pageNo, int pageSize, String spmsId);

    /** 获取工厂请购单行项目信息，不分页，包含日志信息 */
    List<Map<String, Object>> getOrderWerksDtl2(String spmsId);

    /** 获取工厂请购单行项目信息，不分页，包含安全库存、在库库存、在途库存等信息 */
    List<Map<String, Object>> getOrderWerksDtlWithInventory(String spmsId);

    /** 根据用户传入信息，创建工厂请购单和工厂请购单详情 */
    Boolean addOrderWerks(JSONObject jsonObject, String uuid) throws Exception;

    /** 根据用户传入信息，更新工厂请购单表头信息 */
    int updateOrderWerks(JSONObject doc, String userId);

    /** 根据请购单号获取工厂请购单表头、行项目、日志信息 */
    Map<String, Object> getOrderWerksDtlById(String spmsId);

    /** 根据uuid及请求OA成功后返回的OA编号信息，写入uuid对应的工厂请购单下 */
    void updateOrderWerksByUuid(String uuid, String oaBianhao,String oaClient);

    /** 将提交OA失败的状态，写入uuid对应的工厂请购单下 */
    void updateOrderWerksStatusByUuid(String uuid, String status);

    /** 通过 uuid 查询获取工厂请购单单号 */
    String getSpmsIdByUuid(String uuid);

    /** 通过 OA 编号更新工厂请购单状态 */
    int updateOrderWerksStatus(String userId, String oaBianhao, String oaStatus) throws Exception ;

    void updateOrderWerksStatusByOaBianhao(String userId, String oaBianhao, String status);

    /** 将 OA 审批通过的工厂请购单提交 SRM；示例参数：工厂请购单uuid = ed64f63d663141028cad97a42510da89 */
    Map<String, Object> orderWerksToSrm(String uuid);

    /** 将 OA 审批通过的工厂请购单提交 SRM；示例参数：工厂请购单oaBianhao = 945496 */
    Map<String, Object> orderWerksToSrm2(String oaBianhao);

    /** 根据OA编号，查询工厂请购单 */
    OrderWerks getByOaBianhao(String oaBianhao);

    /** 获取高频SKU报表/以工厂请购单为基准 */
    List<Map<String, Object>> getFrequencyMaterialNo(String werks, String materialNo, String beginDate, String endDate);

    /** 根据 uuid 查找工厂请购单 */
    OrderWerks getByUuid(String uuid);

    /** 获取请购单表头和行项目Excel附件 */
    ResponseResult getOrderWerksDtlExcel(JSONObject doc, String userId);

    /** 根据OA编码查询请购单 */
    OrderWerks getOrderWerksByOaCode(String oaBianhao);
}
