package com.sunda.spmsorder.service;

import com.alibaba.fastjson.JSONObject;
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.MaterialApplication;
import com.sunda.spmsorder.entity.MaterialApplicationDtl;
import com.sunda.spmsorder.entity.vo.MaterialApplicationQueryResultVo;
import com.sunda.spmsorder.entity.vo.MaterialApplicationQueryVo;
import org.springframework.web.multipart.MultipartFile;

import java.util.List;
import java.util.Map;

/**
 * <p>
 * 物料申请单表表头 服务类
 * </p>
 *
 * @author Wayne
 * @since 2021-05-21
 */
public interface IMaterialApplicationService extends IService<MaterialApplication> {

    /** 查询物料申请表头列表 */
    List<MaterialApplicationQueryResultVo> getMaterialApplicationList(MaterialApplicationQueryVo materialApplicationQueryVo);

    /** 查询物料申请表头列表 page VO 分页 */
    Page<MaterialApplicationQueryResultVo> getPageMaterialApplication(MaterialApplicationQueryVo materialApplicationQueryVo);

    /** 查询物料申请表头列表 page map 分页 */
    Page<Map<String, Object>> getPageMap(JSONObject doc);

    /** 查询物料申请行项目列表 */
    List<MaterialApplicationDtl> getMaterialApplicationDtlList(String applicationUuid);

    /** 创建物料申请单表头和行项目 */
    ResponseResult addMaAndDtl(JSONObject doc, String userId);

    /** 获取物料申请单表头和行项目Excel附件 */
    ResponseResult getMaAndDtlExcel(JSONObject doc, String userId);

    /** 更新物料申请提交OA状态 */
    ResponseResult updateMaterialApplicationSubmitOaStatus(JSONObject doc, int oaId, String userId, String oaClient);

    /** 上传物料申请图片 **/
    ResponseResult uploadMaterialApplicationPic(MultipartFile multipartFile);

    /** 获取物料申请单关联操作日志 */
    List<Map<String, Object>> getOrderLogList(String uuid);

    /** 删除物料申请单及其行项目，只能删除草稿状态下的数据 */
    ResponseResult deleteMaAndDtl(String applicationUuid);

    /** 创建物料申请单表头和行项目 Johnny*/
    ResponseResult setBom(JSONObject doc, String userId);

    /** 通过 OA 编号更新物料申请单状态 */
    int updateMaterialApplicationStatus(String userId, String oaBianhao, String oaStatus)throws Exception ;

    /** 通过 OA 编号查询物料申请单状态 */
    MaterialApplication getMaterialApplicationByOaCode(String oaBianhao);
}
