
package com.tmerclub.cloud.multishop.mapper;

import com.tmerclub.cloud.api.multishop.bo.EsShopDetailBO;
import com.tmerclub.cloud.api.multishop.bo.ShopSimpleBO;
import com.tmerclub.cloud.api.multishop.vo.ShopDetailVO;
import com.tmerclub.cloud.multishop.dto.ShopDetailDTO;
import com.tmerclub.cloud.multishop.dto.ShopSearchDTO;
import com.tmerclub.cloud.multishop.model.ShopDetail;
import com.tmerclub.cloud.multishop.vo.ShopDetailAppVO;
import com.tmerclub.cloud.multishop.vo.ShopHeadInfoVO;
import org.apache.ibatis.annotations.Param;

import java.util.Date;
import java.util.List;

/**
 * 店铺详情
 *
 * @author tmerclub
 * @date 2020-12-05 15:50:25
 */
public interface ShopDetailMapper {

    /**
     * 获取店铺详情列表
     *
     * @param shopDetailDTO 店铺搜索数据
     * @return 店铺详情列表
     */
    List<ShopDetailVO> list(@Param("shopDetail") ShopDetailDTO shopDetailDTO);

    /**
     * 根据店铺详情id获取店铺详情
     *
     * @param shopId 店铺详情id
     * @return 店铺详情
     */
    ShopDetailVO getByShopId(@Param("shopId") Long shopId);

    /**
     * 保存店铺详情
     *
     * @param shopDetail 店铺详情
     */
    void save(@Param("shopDetail") ShopDetail shopDetail);

    /**
     * 更新店铺详情
     *
     * @param shopDetail 店铺详情
     */
    void update(@Param("shopDetail") ShopDetail shopDetail);

    /**
     * 根据店铺详情id删除店铺详情
     *
     * @param shopId
     */
    void deleteById(@Param("shopId") Long shopId);

    /**
     * 根据店铺id列表，获取店铺信息
     * @param shopIds 店铺id列表
     * @return 店铺列表
     */
    List<ShopDetail> listByShopIds(@Param("shopIds") List<Long> shopIds);

    /**
     * 根据店铺id获取店铺详情
     *
     * @param shopId 店铺详情id
     * @return 店铺详情
     */
    ShopDetailVO getShopByShopId(Long shopId);

    /**
     * 店铺搜索列表
     *
     * @param shopDetailDTO
     * @return
     */
    List<ShopDetailAppVO> shopSearchList(@Param("shopDetail") ShopDetailDTO shopDetailDTO);

    /**
     * 统计该店铺名被其他用户使用的数量
     *
     * @param shopName
     * @param shopId
     * @return
     */
    int countShopName(@Param("shopName") String shopName, @Param("shopId") Long shopId);

    /**
     * 改变店铺状态
     *
     * @param shopId
     * @param shopStatus
     */
    void changeShopStatus(@Param("shopId") Long shopId, @Param("shopStatus") Integer shopStatus);

    /**
     * 获取店铺信息及扩展信息
     *
     * @param shopId
     * @return
     */
    EsShopDetailBO shopExtensionData(@Param("shopId") Long shopId);

    /**
     * 获取店铺信息及扩展信息
     * @param shopIds 店铺ids
     * @param shopName 店铺名称
     * @return 店铺信息列表
     */
    List<ShopDetailVO> getShopDetailByShopIdsShopName(@Param("shopIds") List<Long> shopIds, @Param("shopName") String shopName);

    /**
     *    根据店铺id获取店铺扩展信息
     * @param shopId 店铺id
     * @return 店铺扩展信息
     */
    ShopDetailVO getShopExtensionsByShopId(Long shopId);

    /**
     * 根据手机号获取存在店铺的数量
     * @param mobile 手机号
     * @return 数量
     */
    Integer countByMobile(String mobile);

    /**
     * 根据店铺状态查询店铺数量
     * @param shopStatus
     * @return
     */
    Long countByShopStatus(@Param("shopStatus") Integer shopStatus);

    /**
     * 根据签约时间修改店铺状态
     * @param now
     */
    void changeShopStatusByContractTime(@Param("now") Date now);

    /**
     * 根据当前时间获取状态需要改变为停业状态的店铺id列表
     * @param now
     * @return
     */
    List<Long> listShopIdsOfStatusChangeToStopByContractTime(@Param("now") Date now);

    /**
     * 根据当前时间获取状态需要改变为营业状态的店铺id列表
     * @param now
     * @return
     */
    List<Long> listShopIdsOfStatusChangeToOpenByContractTime(@Param("now") Date now);


    /**
     * 根据参数获取店铺id列表
     * @param shopSimpleBO
     * @return
     */
    List<ShopSimpleBO> listSimple(@Param("shopSimpleBO") ShopSimpleBO shopSimpleBO);

    /**
     * 根据店铺状态获取店铺id列表
     * @param shopStatus
     * @return
     */
    List<Long> getShopIdsByShopStatus(@Param("shopStatus") Integer shopStatus);

    /**
     * 根据店铺名称模糊查询id
     * @param name
     * @return
     */
    List<Long> selectShopIdsLikeName(@Param("name") String name);

    /**
     * 平台分页获取装修的店铺信息
     * @param shopSearchDTO
     * @return
     */
    List<ShopHeadInfoVO> searchShops(@Param("shopSearchDTO") ShopSearchDTO shopSearchDTO);

    /**
     * 用户分页获取装修的店铺信息
     * @param shopSearchDTO
     * @return
     */
    List<ShopHeadInfoVO> apiSearchShops(@Param("shopSearchDTO") ShopSearchDTO shopSearchDTO);

    /**
     * 店铺列表（营业、停业状态）
     *
     * @param shopSearchDTO
     * @return
     */
    List<ShopHeadInfoVO> listRenovationShop(@Param("shopSearchDTO") ShopSearchDTO shopSearchDTO);

    /**
     * 获取还没创建会员的商家id列表
     * @return
     */
    List<Long> listUnCreateMemberShopIds();

    /**
     * 更新商家为停业状态,并且更新为已经创建会员
     * @param shopIds
     */
    void updateShopToStop(@Param("shopIds") List<Long> shopIds);

    /**
     * 更新商家为开店申请中，并且更新为已经创建会员
     * @param shopIds
     */
    void updateShopToApplying(@Param("shopIds") List<Long> shopIds);

    /**
     * 更新商家已经创建通联会员账号
     * @param shopIds
     */
    void updateShopIsCreate(@Param("shopIds") List<Long> shopIds);

    /**
     * 更新通联店铺状态
     * @param shopId
     * @param status
     */
    void updateAllinpayShopStatus(@Param("shopId") Long shopId, @Param("status") Integer status);

    /**
     * 更新店铺为通联审核通过
     * @param shopId
     */
    void updateShopAuditSuccess(@Param("shopId") Long shopId);

    /**
     * 更新店铺为通联审核失败
     * @param shopId
     */
    void updateShopAuditFail(@Param("shopId") Long shopId);

    /**
     * 更新商家影印件采集状态
     * @param shopId
     * @param status
     */
    void updateAllinpayIdCardStatus(@Param("shopId") Long shopId, @Param("status") Integer status);

    /**
     * 更新店铺为通联开业
     * @param shopId
     */
    void updateShopToOpen(@Param("shopId") Long shopId);

    /**
     * 更新店铺为通联上线待审核
     * @param shopId
     */
    void updateShopToWaitAudit(@Param("shopId") Long shopId);

    /**
     * 更新店铺绑定通联手机号码状态
     * @param shopId
     * @param status 0否1是
     */
    void updateShopBindPhone(@Param("shopId") Long shopId, @Param("status") Integer status);

    /**
     * 保存编号
     * @param shopId
     * @param signAcctType
     * @param acctProtocolNo
     */
    void updateAcctProtocolNoByType(@Param("shopId") Long shopId, @Param("type") Integer signAcctType, @Param("acctProtocolNo") String acctProtocolNo);

    /**
     * 获取所有未删除的店铺id
     * @return
     */
    List<ShopDetailVO> listShopIds();
}
