package jnpf.store.service;

import com.github.pagehelper.PageInfo;
import jnpf.base.service.SuperService;
import jnpf.entity.StoreEntity;
import jnpf.exception.HandleException;
import jnpf.model.store.Store;
import jnpf.model.store.StorePositionInfoVo;
import jnpf.model.store.StoreUserNumVo;
import jnpf.model.store.dto.BatchSaveStoreDto;
import jnpf.model.store.dto.StoreUserDto;
import jnpf.model.store.vo.StoreBaseListVO;
import jnpf.model.store.vo.StoreLocationVO;
import jnpf.model.store.vo.StoreUsersVo;
import jnpf.model.store.vo.UserStoreListVo;
import jnpf.model.vo.StoreExecutionVo;

import java.util.List;

/**
 * 门店管理
 * 版本： V3.1.0
 * 版权： 引迈信息技术有限公司（https://www.jnpfsoft.com）
 * 作者： JNPF开发平台组
 * 日期： 2023-07-11
 */
public interface StoreService extends SuperService<StoreEntity> {


    List<Store> getStoreByOrganizeId(String organizeId);

    PageInfo<Store> getStoreByKeyword(String keyword, int currentPage, int pageSize, Integer searchStatus);

    List<Store> getStoreEnabled();

    List<Store> getStoreByRange(String organizeId, String longitude, String latitude);

    Store getInfo(String id);

    StoreEntity getStoreInfoDutyQuery(String id);

    @Deprecated
    void create(Store store) throws Exception;

    @Deprecated
    void update(String id, Store store) throws Exception;

    //验证表单
    String checkForm(Store form, int i);

    /**
     * 查询组织下的门店
     *
     * @param organizeId 组织id
     * @return java.util.List<jnpf.model.store.Store>
     */
    List<Store> getStoreList(String organizeId, String storeName);

    /**
     * 获取登录用户的门店信息
     *
     * @return 返回值
     */
    List<Store> getUserStoreList();

    /**
     * 获取登录用户的门店信息
     *
     * @return 返回值
     */
    List<Store> getUserStoreListDuty();


    /**
     * 检查哪些用户不能被选择
     *
     * @param currentChoose 当前被选中的人
     * @param exceptChoose  需要排除的人
     * @return java.util.List<java.lang.String>
     */
    List<String> checkUserCantChoose(String currentChoose, String exceptChoose);

    List<Store> getStoreListByUser(String userId);

    List<Store> getStoreListByUserNodata(String userId, String tenantId);

    /**
     * 根据门店ids查询门店信息
     *
     * @param storeIds 门店ids
     * @return java.util.List<jnpf.model.store.Store>
     */
    List<Store> getListByIds(List<String> storeIds);

    /**
     * 查询门店下岗位的成员数量
     *
     * @param storeId      门店id
     * @param positionList 岗位id集合
     * @return java.util.List<jnpf.model.store.StorePositionInfoVo>
     */
    List<StorePositionInfoVo> getStorePositionInfoList(String storeId, List<String> positionList);

    List<StorePositionInfoVo> getStorePositionInfoListNodata(String storeId, List<String> positionList, String tenantId);

    /**
     * 获取门店下成员数
     *
     * @param storeIds 门店id
     * @return java.lang.Integer
     * @author hlp
     */
    List<StoreUserNumVo> getUserNum(List<String> storeIds);

    //==================================2023-12-15新增方法=====================

    /**
     * 批量新增门店
     *
     * @param batchSaveStoreDto
     */
    void batchSaveStore(BatchSaveStoreDto batchSaveStoreDto) throws HandleException;

    /**
     * 获取所有用户的门店集合
     *
     * @return java.util.List<jnpf.model.store.vo.UserStoreListVo>
     * @author hlp
     */
    List<UserStoreListVo> getAllUserStores();

    Boolean checkStore(String id);

    /**
     * 改变门店状态
     *
     * @param disabled 是否禁用 1.是 0.否
     */
    void updateStatus(String id, Boolean disabled);

    /**
     * 根据组织id获取所有门店
     *
     * @param organizeId 组织id
     * @return List<Store>
     */
    List<Store> getAllStoreByOrganizeId(String organizeId);

    PageInfo<StoreUsersVo> getUsersByStore(String keyword, int currentPage, int pageSize);

    void updateStoreUsers(StoreUserDto storeUserDto);

    /**
     * 根据门店ids分页查询门店记录
     *
     * @param storeIds    门店ids
     * @param storeName   门店名称
     * @param currentPage 当前页码
     * @param pageSize    每页条数
     * @return com.github.pagehelper.PageInfo<jnpf.model.vo.StoreExecutionVo>
     */
    PageInfo<StoreExecutionVo> getStorePageByIds(String storeIds, String storeName, Integer currentPage, Integer pageSize, Integer sortNum);

    /**
     * 查询异常的门店
     *
     * @param storeIds 门店ids
     * @return java.util.List<java.lang.String>
     */
    List<String> getAbnormalStoreIds(List<String> storeIds);

    /**
     * 根据组织ids查询门店列表
     *
     * @param organizeIdList 组织ids
     * @return java.util.List<jnpf.model.store.Store>
     */
    List<Store> getStoreListByOrganizeList(List<String> organizeIdList);

    List<Store> getOrgStoreList(String organizeId, List<String> queryStoreIds);

    PageInfo<StoreExecutionVo> getStorePageByIds(String storeIds, Integer currentPage, Integer pageSize);

    /**
     * 校验是否是值班人
     *
     * @param userId 用户Id
     */
    boolean checkStoreUser(String userId);

    List<StoreBaseListVO> getStoreListByOrganizeIdAndChildOrganize(String organizeId, Boolean disabled);

    /**
     * 获取门店位置信息
     * @param storeId 门店id
     * @return jnpf.model.store.vo.StoreLocationVO
     */
    StoreLocationVO getStoreLocation(String storeId);
}
