package com.fs.hisStore.mapper;

import com.fs.hisStore.domain.FsStoreScrm;
import com.fs.hisStore.dto.FsStoreProductScrmInfoDTO;
import com.fs.hisStore.vo.FsStoreDetailsScrmVo;
import com.fs.hisStore.vo.FsStoreRecommendListVO;
import com.fs.hisStore.vo.FsStoreScrmVO;
import org.apache.ibatis.annotations.Param;
import org.apache.ibatis.annotations.Select;
import org.apache.ibatis.annotations.Update;

import java.util.List;
import java.util.Map;
import java.util.Set;

/**
 * 店铺管理Mapper接口
 *
 * @author fs
 * @date 2023-06-15
 */
public interface FsStoreScrmMapper
{
    /**
     * 查询店铺管理
     *
     * @param storeId 店铺管理主键
     * @return 店铺管理
     */
    public FsStoreScrm selectFsStoreByStoreId(Long storeId);

    /**
     * 查询店铺管理列表
     *
     * @param FsStoreScrm 店铺管理
     * @return 店铺管理集合
     */
    public List<FsStoreScrm> selectFsStoreList(FsStoreScrm FsStoreScrm);

    /**
     * 新增店铺管理
     *
     * @param FsStoreScrm 店铺管理
     * @return 结果
     */
    public int insertFsStore(FsStoreScrm FsStoreScrm);

    /**
     * 修改店铺管理
     *
     * @param FsStoreScrm 店铺管理
     * @return 结果
     */
    public int updateFsStore(FsStoreScrm FsStoreScrm);

    /**
     * 删除店铺管理
     *
     * @param storeId 店铺管理主键
     * @return 结果
     */
    public int deleteFsStoreByStoreId(Long storeId);

    /**
     * 批量删除店铺管理
     *
     * @param storeIds 需要删除的数据主键集合
     * @return 结果
     */
    public int deleteFsStoreByStoreIds(Long[] storeIds);

    @Update("UPDATE fs_store_scrm SET is_audit=#{isAudit} WHERE store_id=#{storeId}")
    int updateFsStoreAudit(@Param("storeId") Long storeId, @Param("isAudit") Integer isAudit);

    @Select("select * from fs_store_scrm where account=#{username}")
    FsStoreScrm selectFsStoreByAccount(String username);

    @Select("SELECT * from fs_store_scrm WHERE   FIND_IN_SET(store_id, (SELECT store_ids FROM fs_doctor where doctor_id=#{doctorId}))")
    List<FsStoreScrm> selectFsStoreListByDoctorId(Long doctorId);

    List<FsStoreScrm> selectOverList();

    // 批量按ID更新状态
    int batchUpdateStatusByIds(@Param("ids") List<Long> ids, @Param("status") Integer status);

    List<FsStoreRecommendListVO> storeRecommendList();

    List<FsStoreScrm> selectFsStoreByStoreIds(String[] storeId);

    List<FsStoreScrm> selectFsStoreListByProduct(FsStoreScrm fsStoreScrm);

//    @Select("select store_id ,store_name,bus_no,bus_name  from fs_store_scrm ")
    @Select("select store_id ,store_name  from fs_store_scrm ")
    List<FsStoreScrmVO> selectFsAllStoreList();

    @Select("SELECT " +
            " distinct  " +
            "    COLUMN_NAME as colName,  " +
            "    COLUMN_COMMENT as colComment " +
            "FROM  " +
            "    information_schema.COLUMNS  " +
            "WHERE  " +
            "    TABLE_NAME = 'fs_store_scrm'")
    List<Map<String, String>> getStoreColumns();

    @Select("SELECT store_id,store_name from fs_store_scrm ")
    List<FsStoreScrm> selectFsStoreListOption(FsStoreScrm fsStore);

    /**
     * 获取店铺协议提示数据
     * @return list
     * **/
    List<String> queryValidStoreAgreementExpiryTips();

    /**
     * 获取店铺资质提示数据
     * @return list
     * **/
    List<String>  queryValidStoreQualifications();


    /**
     * 获取商铺信息
     * @param storeId
     * @return 对象
     * **/
    @Select("SELECT * FROM fs_store_scrm WHERE store_id=#{storeId}")
    FsStoreDetailsScrmVo selectStoreInfoByStoreId(@Param("storeId") Long storeId);

    /**
     * 获取商铺资质过期证书信息
     * @return list
     * **/
    List<Long> getStoreQualificationExpiredInfo();

    /**
     * 批量更新店偶状态
     * @param storeIds 店铺id
     * **/
    void batchUpdateStoreStatusById(@Param("storeIds") List<Long> storeIds);

    /**
     * 通过商品ID获取关联店偶
     * **/
    List<FsStoreScrm> getStoreInfoByproductId(@Param("productIds") Set<Long> productIds);



    /**
     * 查询当天已生成的店铺数量
     */
    @Select("SELECT COUNT(*) FROM fs_store_scrm WHERE store_seq LIKE CONCAT(#{date}, '%')")
    Long countByStoreSeqPrefix(@Param("date") String date);

    /**
     * 检查营业执照是否已存在
     */
    @Select(" SELECT COUNT(*) > 0 FROM fs_store_scrm WHERE business_code = #{businessCode}")
    boolean existsByBusinessCode(@Param("businessCode") String businessCode);

    /**
     * 根据营业执照编码查找商家ID
     */
    @Select("SELECT merchant_id FROM fs_store_scrm \n" +
            "    WHERE business_code = #{businessCode} \n" +
            "    LIMIT 1")
    String findMerchantIdByBusinessCode(@Param("businessCode") String businessCode);

    /**
     * 检查同一商家下店铺名称是否重复
     */
    @Select(" SELECT COUNT(*) > 0 FROM fs_store_scrm \n" +
            "    WHERE merchant_id = #{merchantId} AND store_name = #{storeName}")
    boolean existsStoreNameInMerchant(@Param("merchantId") String merchantId,
                                      @Param("storeName") String storeName);

    /**
     * 查询当天新商家的数量（基于营业执照）
     */
    Long countNewMerchantsByDate(@Param("datePrefix") String datePrefix);

    /**
     * 查询商家下的店铺数量
     */
    Integer countStoresByMerchant(@Param("merchantId") String merchantId);

    /**
     * 获取店铺资质即将到期提示数据
     * @return list
     * **/
    List<String>  queryValidStoreLastInfo(@Param("storeId") Long storeId );

    /**
     * 查询店铺管理列表
     *
     * @param FsStoreScrm 店铺管理
     * @return 店铺管理集合
     */
    public List<FsStoreScrm> selecStorePageList(FsStoreScrm FsStoreScrm);

    /**
     * @description: 店铺资质即将到期提示数据
     * @param: StoreId 店铺id
     * **/
    FsStoreScrm qualificationReminder(@Param("storeId") Long storeId);

    /**
     * 获取店铺产品信息
     * @param storeIds 店铺id
     * @return
     * **/
    List<FsStoreProductScrmInfoDTO> getStoreInfo(@Param("storeIds") Long[] storeIds);

    /**
     * 查询店铺管理
     *
     * @param storeSeq 店铺管理主键
     * @return 店铺管理
     */
    FsStoreScrm selectFsStoreByStoreSeq(@Param("storeSeq") String storeSeq);


}
