package com.gic.haoban.manage.service.dao.mapper.hm;

import com.gic.haoban.manage.api.dto.qdto.hm.HmQrcodeListQDTO;
import com.gic.haoban.manage.service.entity.hm.TabHaobanHmQrcode;
import com.gic.haoban.manage.service.pojo.bo.hm.HmQrcodeClerkBO;
import com.gic.haoban.manage.service.pojo.bo.hm.HmQrcodeGroupNumBO;
import org.apache.ibatis.annotations.Param;

import java.util.List;

/**
 * 活码(TabHaobanHmQrcode)表数据库访问层
 *
 * @author mozhu
 * @since 2022-07-04 15:42:20
 */
public interface TabHaobanHmQrcodeMapper {

    /**
     * 通过ID查询单条数据
     *
     * @param hmId 主键
     * @return 实例对象
     */
    TabHaobanHmQrcode queryById(@Param("hmId") Long hmId);
    
    List<TabHaobanHmQrcode> queryByIdList(@Param("hmIds") List<Long> hmIds);
    
    

    /**
     * 新增数据
     *
     * @param tabHaobanHmQrcode 实例对象
     * @return 影响行数
     */
    int insert(TabHaobanHmQrcode tabHaobanHmQrcode);

    /**
     * 批量新增数据（MyBatis原生foreach方法）
     *
     * @param entities List<TabHaobanHmQrcode> 实例对象列表
     * @return 影响行数
     */
    int insertBatch(@Param("entities") List<TabHaobanHmQrcode> entities);

    /**
     * 修改数据
     *
     * @param tabHaobanHmQrcode 实例对象
     * @return 影响行数
     */
    int update(TabHaobanHmQrcode tabHaobanHmQrcode);

    /**
     * 通过主键删除数据
     *
     * @param hmId 主键
     * @return 影响行数
     */
    int deleteById(Long hmId);


    /**
     * 更新状态通过id
     *
     * @param statusFlag 状态标志
     * @param hmId       hm id
     * @return int
     * @author mozhu
     * @date 2022-07-06 13:42:07
     */
    int updateStatusById(@Param("statusFlag") Integer statusFlag, @Param("hmId") Long hmId);


    /**
     * 根据门店id查询
     *
     * @param wxEnterpriseId wx企业标识
     * @param storeId        存储id
     * @param overFlag       在国旗
     * @return {@link List }<{@link TabHaobanHmQrcode }>
     * @author mozhu
     * @date 2022-07-07 17:19:51
     */
    List<TabHaobanHmQrcode> listByStoreId(
            @Param("wxEnterpriseId") String wxEnterpriseId,
            @Param("storeId") String storeId,
            @Param("overFlag") Integer overFlag,
            @Param("hmType") Integer hmType);

    /**
     * 通过id添加num
     *
     * @param hmId     hm id
     * @param overFlag 在国旗
     * @return int
     * @author mozhu
     * @date 2022-07-07 11:32:27
     */
    int updateAddNumById(@Param("hmId") Long hmId, @Param("overFlag") Integer overFlag);

    /**
     * 重置
     *
     * @author mozhu
     * @date 2022-07-07 13:54:43
     */
    void resetAddNumAndOverFlag();

    /**
     * 查询职员id 活码
     *
     * @param clerkId        职员id
     * @param wxEnterpriseId wx企业标识
     * @return {@link TabHaobanHmQrcode }
     * @author mozhu
     * @date 2022-07-07 15:55:12
     */
    TabHaobanHmQrcode queryByClerkId(@Param("clerkId") String clerkId, @Param("wxEnterpriseId") String wxEnterpriseId);

    /**
     * 查询职员id
     *
     * @param clerkId        职员id
     * @param wxEnterpriseId wx企业标识
     * @param overFlag       上限
     * @return {@link TabHaobanHmQrcode }
     * @author mozhu
     * @date 2022-07-07 17:26:34
     */
    TabHaobanHmQrcode queryByClerkIdAndOverFlag(@Param("clerkId") String clerkId,
                                                @Param("wxEnterpriseId") String wxEnterpriseId,
                                                @Param("hmType") Integer hmType);

    /**
     *
     * @param staffId
     * @param wxEnterpriseId
     * @param hmType
     * @return
     */
    List<Long> queryByStaffIdAndOverFlag(@Param("staffId") String staffId,
                                           @Param("wxEnterpriseId") String wxEnterpriseId,
                                           @Param("hmType") Integer hmType);

    /**
     * 活码门店ids
     *
     * @param enterpriseId 企业标识
     * @return {@link List }<{@link TabHaobanHmQrcode }>
     * @author mozhu
     * @date 2022-07-08 15:10:57
     */
    List<TabHaobanHmQrcode> getHmStoreByEnterpriseId(@Param("wxEnterpriseId") String wxEnterpriseId, @Param("enterpriseId") String enterpriseId);

    /**
     * 根据分组id获取活码数量
     *
     * @param enterpriseId 企业标识
     * @param groupIds     组id
     * @return {@link List }<{@link HmQrcodeGroupNumBO }>
     * @author mozhu
     * @date 2022-07-12 17:39:12
     */
    List<HmQrcodeGroupNumBO> getGroupIdNumByEnterpriseId(@Param("wxEnterpriseId") String wxEnterpriseId, @Param("enterpriseId") String enterpriseId, @Param("groupIds") List<Long> groupIds, @Param("hmIds") List<String> hmIds);

    /**
     * 获取总数
     *
     * @param enterpriseId 企业标识
     * @return int
     * @author mozhu
     * @date 2022-07-12 15:10:09
     */
    int getTotalByEnterpriseId(@Param("wxEnterpriseId") String wxEnterpriseId, @Param("enterpriseId") String enterpriseId, @Param("hmIds") List<String> hmIds);

    /**
     * 批量修改 活码所属分组
     *
     * @param ids
     * @param groupId
     * @return
     */
    int batchUpdateQrCodeGroup(@Param("ids") List<Long> ids, @Param("groupId") Long groupId);

    /**
     * @param wxEnterpriseId
     * @param enterprsieId
     * @param storeIdList
     * @return
     * @throws
     * @Title: getCanAddCount
     * @Description: 获取能创建活码的导购列表
     * @author xugh
     */
    int getCanAddCount(@Param("wxEnterpriseId") String wxEnterpriseId, @Param("enterpriseId") String enterpriseId, @Param("storeIdList") List<String> storeIdList);

    List<HmQrcodeClerkBO> listCanAddClerk(@Param("wxEnterpriseId") String wxEnterpriseId, @Param("enterpriseId") String enterpriseId, @Param("storeIdList") List<String> storeIdList);

    List<String> getHmStoreForWxa(@Param("wxEnterpriseId") String wxEnterpriseId, @Param("enterpriseId") String enterpriseId);

    List<String> listHmIdForIndex(HmQrcodeListQDTO qdto);

    /**
     * 返回已有单人活码的clerkId
     */
    List<String> listHasQrcodeClerk(@Param("enterpriseId") String enterpriseId, @Param("clerkIdList") List<String> clerkIdList);
    
    /**
     * 获取导购单人活码
     */
    String getClerkQrcode(@Param("enterpriseId") String enterpriseId, @Param("clerkId")String clerkId);

    /**
     * 更新导购名称
     *
     * @param enterpriseId 企业标识
     * @param clerkId      导购id
     * @param clerkName    导购名称
     * @param clerkCode    职员代码
     * @return int
     * @author mozhu
     * @date 2022-07-28 14:03:48
     */
    int updateClerkNameByClerkId(@Param("enterpriseId") String enterpriseId,
                                 @Param("clerkId") String clerkId,
                                 @Param("clerkName") String clerkName,
                                 @Param("clerkCode") String clerkCode);

    /**
     * 更改门店名称
     *
     * @param enterpriseId 企业标识
     * @param storeId      门店id
     * @param storeName    门店名称
     * @param storeCode    门店code
     * @return int
     * @author mozhu
     * @date 2022-07-28 14:03:46
     */
    int updateStoreNameByStoreId(@Param("enterpriseId") String enterpriseId,
                                 @Param("storeId") String storeId,
                                 @Param("storeName") String storeName,
                                 @Param("storeCode") String storeCode);
}

