/*
 * Copyright ©2023 CJB-CNIT Team. All rights reserved
 */
package com.openhis.web.common.appservice;

import java.util.List;

import com.core.common.core.domain.R;
import com.openhis.administration.domain.Organization;
import com.openhis.web.common.dto.InventoryItemParam;
import com.openhis.web.common.dto.LocationDto;
import com.openhis.web.common.dto.SearchTraceNoParam;

/**
 * app常用接口
 *
 * @author zwh
 * @date 2025-04-01
 */
public interface ICommonService {

    /**
     * 药房列表
     *
     * @return 药房列表
     */
    List<LocationDto> getPharmacyList();

    /**
     * 药房列表(库房用)
     *
     * @return 药房列表1
     */
    List<LocationDto> getInventoryPharmacyList();

    /**
     * 药库列表
     *
     * @return 药库列表
     */
    List<LocationDto> getCabinetList();

    /**
     * 仓库列表
     *
     * @return 仓库列表
     */
    List<LocationDto> getWarehouseList();

    /**
     * 药库列表(库房用)
     *
     * @return 药库列表
     */
    List<LocationDto> getInventoryCabinetList();

    /**
     * 药房药库列表
     *
     * @return 药房药库列表
     */
    List<LocationDto> getPharmacyCabinetList();

    /**
     * 获取病区列表
     *
     * @param orgId 科室id
     * @return 病区列表
     */
    List<LocationDto> getWardList(Long orgId);

    /**
     * 库存项目下拉列表（药库业务使用）
     *
     * @param inventoryItemParam 查询条件
     * @param searchKey 模糊查询关键字
     * @param pageNo 当前页
     * @param pageSize 每页多少条
     * @return 库存项目信息
     */
    R<?> getInventoryItemList(InventoryItemParam inventoryItemParam, String searchKey, Integer pageNo,
        Integer pageSize);

    /**
     * 根据项目相关信息查询项目库存相关信息
     *
     * @param inventoryItemParam 项目id
     * @return 项目库存相关信息
     */
    R<?> getInventoryItemInfo(InventoryItemParam inventoryItemParam);

    /**
     * 科室列表
     *
     * @return 科室列表
     */
    R<?> getDepartmentList();

    /**
     * 科室列表
     *
     * @return 科室列表
     */
    List<Organization> departmentList();

    /**
     * 根据追溯码获取药品/耗材信息
     *
     * @param traceNoList 追溯码列表
     * @return 项目信息
     */
    R<?> getItemInfoByTraceNo(List<String> traceNoList);

    /**
     * 追溯码查询
     *
     * @param searchTraceNoParam 查询条件
     * @return 项目信息
     */
    R<?> searchTraceNo(SearchTraceNoParam searchTraceNoParam);

    /**
     * 查询费用性质
     *
     * @return 费用性质
     */
    R<?> getContractMetadata();

    /**
     * 根据科室查询护士
     *
     * @param orgId 科室id
     * @return 护士列表
     */
    R<?> getNurseListByOrg(Long orgId);

    /**
     * 根据父级位置id查询他所有的子集
     *
     * @param locationId 位置id
     * @param locationForm 位置类型
     * @return 位置列表
     */
    List<LocationDto> getChildLocation(Long locationId, Integer locationForm);

    /**
     * 查询登录者管理的病区
     *
     * @return 病区列表
     */
    List<LocationDto> getPractitionerWard();

    /**
     * 查询参与者下拉列表
     *
     * @param searchKey 模糊查询关键字
     * @return 参与者下拉列表
     */
    R<?> getPractitionerList(String searchKey);

    /**
     * 查询医嘱打印信息
     *
     * @param requestIds 请求ids
     * @param isPrescription 是否为处方
     * @return 医嘱打印单
     */
    R<?> getAdvicePrintInfo(List<Long> requestIds, String isPrescription);

    /**
     * 查询参与者签名
     *
     * @param practitionerId 参与者id
     * @return 参与者签名
     */
    R<?> getPractitionerSignature(Long practitionerId);

    /**
     * 查询所有供应商
     *
     * @return 供应商
     */
    R<?> getSupplierList();

    /**
     * 查询所有诊疗项目
     *
     * @return 诊疗项目
     */
    R<?> getActivityDefinition();
}
