package com.glxp.mipsdl.client;

import com.glxp.mipsdl.req.base.*;
import com.glxp.mipsdl.req.base.forthird.ForBasicProductsSearchFilter;
import com.glxp.mipsdl.req.base.forthird.ForInvOutScanCodeFilter;
import com.glxp.mipsdl.req.base.forthird.ForInvProductsFilter;
import com.glxp.mipsdl.req.ctqyy.DlThirdProjectRequest;
import com.glxp.mipsdl.req.ctqyy.FilterThrHslbRequest;
import com.glxp.mipsdl.req.ctqyy.GetSickPrescribeRequest;
import com.glxp.mipsdl.req.ctqyy.GetSickRequest;
import com.glxp.mipsdl.req.post.*;
import com.glxp.mipsdl.res.BaseResponse;
import com.glxp.mipsdl.res.udiwms.InvProductRequest;
import org.springframework.web.bind.annotation.RequestBody;

/**
 * http请求接口
 */
public interface BaseHttpClient {

    /**
     * 获取往来单位列表
     *
     * @param udiwmsUnitRequest
     * @return
     */
    BaseResponse getUnit(UdiwmsUnitRequest udiwmsUnitRequest);


    /**
     * 获取生产企业
     *
     * @param udiwmsManuRequest
     * @return
     */
    BaseResponse getManu(UdiwmsManuRequest udiwmsManuRequest);

    /**
     * 获取耗材字典列表
     *
     * @param udiwmsProductRequest
     * @return
     */
    BaseResponse getProducts(UdiwmsProductRequest udiwmsProductRequest);

    /**
     * 获取单据类型列表
     *
     * @param udiwmsBusTypeRequest
     * @return
     */
    BaseResponse getOrderTypes(UdiwmsBusTypeRequest udiwmsBusTypeRequest);

    /**
     * 获取单据列表
     *
     * @param udiwmsOrderQueryRequest
     * @return
     */
    BaseResponse getOrders(UdiwmsOrderQueryRequest udiwmsOrderQueryRequest);

    /**
     * 提交单据接口
     *
     * @param udiwmsOrderRequest
     * @return
     */
    BaseResponse submitOrders(UdiwmsOrderRequest udiwmsOrderRequest);

    /**
     * 获取库存产品列表
     *
     * @param udiwmsInvProductsRequest
     * @return
     */
    BaseResponse getInvProducts(UdiwmsInvProductsRequest udiwmsInvProductsRequest);


    /**
     * 获取库存出入库明细
     *
     * @param udiwmsInvProductsRequest
     * @return
     */
    BaseResponse getInvResult(UdiwmsInvProductsRequest udiwmsInvProductsRequest);

    /**
     * 获取库存收费出入库明细
     *
     * @param udiwmsInvProductsRequest
     * @return
     */
    BaseResponse getInvFeeResult(UdiwmsInvProductsRequest udiwmsInvProductsRequest);


    /**
     * 获取库存出入库扫码明细
     *
     * @param udiwmsInvProductsRequest
     * @return
     */
    BaseResponse getInvCodeResult(UdiwmsInvProductsRequest udiwmsInvProductsRequest);

    /**
     * 获取仓库列表
     *
     * @param udiwmsWarehouseRequest
     * @return
     */
    BaseResponse getWarehouse(UdiwmsWarehouseRequest udiwmsWarehouseRequest);


    /**
     * 测试接口连通性
     *
     * @return
     */
    BaseResponse testConnect();

    //TODO 添加 患者信息查询接口，并补全接口文档

    /**
     * 第三方系统查询UDI管理系统产品库存信息
     *
     * @param queryUdiInvProductsRequest
     * @return
     */
    BaseResponse queryUdiInvProducts(UdiwmsQueryUdiInvProductsRequest queryUdiInvProductsRequest);


    //添加产品，往来单位等字典信息到第三方系统

    /**
     * 新增产品信息
     *
     * @return
     */
    BaseResponse submitProducts(UdiwmsAddProductsRequest udiwmsAddProductsRequest);

    /**
     * 新增往来单位信息
     *
     * @return
     */
    BaseResponse submitUnit(UdiwmsAddUnitRequest udiwmsAddUnitRequest);


    /**
     * 新增生产企业信息
     *
     * @return
     */
    BaseResponse submitManu(UdiwmsAddManuRequest udiwmsAddManuRequest);

    /**
     * 提交预入库单据
     *
     * @param udiwmsPreInOrderRequest
     * @return
     */
    BaseResponse submitPreInOrders(@RequestBody UdiwmsPreInOrderRequest udiwmsPreInOrderRequest);


    //文件导入数据到UDI管理系统接口

    /**
     * 文件方式新增产品信息到UDI管理系统
     *
     * @param postThrProductsRequest
     * @return
     */
    BaseResponse postProducts(PostThrProductsRequest postThrProductsRequest);

    /**
     * 新增往来单位信息到UDI管理系统
     *
     * @param postThrCorpRequest
     * @return
     */
    BaseResponse postCorps(PostThrCorpRequest postThrCorpRequest);

    /**
     * 文件方式添加单据到UDI管理系统
     *
     * @param postFileThrOrderRequest
     * @return
     */
    BaseResponse postOrderDetail(PostFileThrOrderRequest postFileThrOrderRequest);

    /**
     * 文件方式添加产品库存到UDI管理系统
     *
     * @param postThrInvProductsRequest
     * @return
     */
    BaseResponse postInvProducts(PostThrInvProductsRequest postThrInvProductsRequest);

    /**
     * 提交关联产品到第三方系统接口
     *
     * @param postThrInvProductsRequest
     * @return
     */
    BaseResponse postRelProduct(PostRelProductRequest postThrInvProductsRequest);

    /**
     * 获取患者信息
     *
     * @param getSickRequest
     * @return
     */
    BaseResponse getSickInfo(GetSickRequest getSickRequest);


    /**
     * 获取患者处方信息
     *
     * @param getSickPrescribeRequest
     * @return
     */
    BaseResponse getSickPescribe(GetSickPrescribeRequest getSickPrescribeRequest);


    /**
     * 获取项目组套字典
     */
    BaseResponse getBasicProject(DlThirdProjectRequest dlThirdProjectRequest);


    /**
     * 获取核算分类（物价类别）；
     */
    BaseResponse getHsfl(FilterThrHslbRequest hslbRequest);


    /**
     * B001 查询指定科室高值库存
     *
     * @param forInvProductsFilter
     * @return
     */
    BaseResponse queryUdiHighInvProductsFilter(ForInvProductsFilter forInvProductsFilter);


    /**
     * B001 查询指定普耗库存
     *
     * @param forInvProductsFilter
     * @return
     */
    BaseResponse queryUdiInvProductsFilter(ForInvProductsFilter forInvProductsFilter);

    /**
     * B002 查询耗材字典
     *
     * @param forBasicProductsSearchFilter
     * @return
     */
    BaseResponse queryUdiBasicProductsSearch(ForBasicProductsSearchFilter forBasicProductsSearchFilter);

    /**
     * B003 高值耗材实时出库/退库
     *
     * @param forInvOutScanCodeFilter
     * @return
     */
    BaseResponse queryUdiInvOutScanCode(ForInvOutScanCodeFilter forInvOutScanCodeFilter);

    /**
     * 处方
     * @param udiwmsBasicSkPrescribeRequest
     * @return
     */
    BaseResponse getPrescribes(UdiwmsBasicSkPrescribeRequest udiwmsBasicSkPrescribeRequest);

    /**
     * 采购计划
     * @param udiwmsThrOrderRequest
     * @return
     */
    BaseResponse getThrOrders(UdiwmsThrOrderRequest udiwmsThrOrderRequest);


    /**
     * 业务单据上传医保
     * @param postCollectOrderRequest
     * @return
     */
    BaseResponse uploadCollectOrder(PostCollectOrderRequest postCollectOrderRequest);

    /**
     * 获取器械处方单
     * @param udiwmsBasicSkPrescribeRequest
     * @return
     */
    BaseResponse getPrescribesQx(UdiwmsBasicSkPrescribeRequest udiwmsBasicSkPrescribeRequest);
}
