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

import com.gic.api.base.commons.Page;
import com.gic.haoban.manage.api.dto.qdto.hm.HmQrcodeListQDTO;
import com.gic.haoban.manage.api.dto.qdto.hm.HmQrcodeQDTO;
import com.gic.haoban.manage.service.pojo.bo.hm.HmQrcodeBO;
import com.gic.haoban.manage.service.pojo.bo.hm.HmQrcodeClerkBO;
import com.gic.haoban.manage.service.pojo.bo.hm.HmQrcodeGroupNumBO;

import java.util.List;

import org.apache.ibatis.annotations.Param;


/**
 * 活码(TabHaobanHmQrcode)表服务接口
 *
 * @author mozhu
 * @since 2022-07-04 15:42:20
 */
public interface HmQrcodeService {

    /**
     * 通过ID查询单条数据
     *
     * @param hmId 主键
     * @return 实例对象
     */
    HmQrcodeBO queryById(Long hmId);

    /**
     * 新增数据
     *
     * @param hmQrcodeQDTO 实例对象
     * @return 实例对象
     */
    int insert(HmQrcodeQDTO hmQrcodeQDTO);

    /**
     * 修改数据
     *
     * @param hmQrcodeQDTO 实例对象
     * @return 实例对象
     */
    int update(HmQrcodeQDTO hmQrcodeQDTO);

    /**
     * 通过主键删除数据
     *
     * @param hmId 主键
     * @return 是否成功
     */
    boolean deleteById(Long hmId);


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

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

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

    /**
     * 查询职员id活码
     *
     * @param clerkId        职员id
     * @param wxEnterpriseId wx企业标识
     * @return {@link HmQrcodeBO }
     * @author mozhu
     * @date 2022-07-07 17:19:02
     */
    HmQrcodeBO queryByClerkId(String clerkId, String wxEnterpriseId);

    /**
     * 查询职员id 有效
     *
     * @param clerkId        职员id
     * @param wxEnterpriseId wx企业标识
     * @param overFlag       在国旗
     * @param hmType         hm型
     * @return {@link HmQrcodeBO }
     * @author mozhu
     * @date 2022-07-27 14:52:40
     */
    HmQrcodeBO queryByClerkId(String clerkId, String wxEnterpriseId, Integer hmType);


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

    /**
     * 活码门店ids
     *
     * @param wxEnterpriseId wx企业标识
     * @param enterpriseId   企业标识
     * @return {@link List }<{@link HmQrcodeBO }>
     * @author mozhu
     * @date 2022-07-27 14:52:03
     */
    List<HmQrcodeBO> getHmStoreByEnterpriseId(String wxEnterpriseId, String enterpriseId);


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

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

    /**
     * 批量修改活码分组
     *
     * @param hmIds
     * @param groupId
     * @return
     */
    int batchUpdateQrcodeGroup(List<Long> hmIds, Long groupId);

    int getCanAddCount(String wxEnterpriseId, String enterpriseId, String clerkId);


    List<HmQrcodeClerkBO> listCanAddClerk(String wxEnterpriseId, String enterpriseId, String clerkId);

    List<String> getHmStoreForWxa(String wxEnterpriseId, String enterpriseId);

    List<String> listHmIdForIndex(HmQrcodeListQDTO qdto);

    List<String> listHasQrcodeClerk(String enterpriseId, List<String> clerkIdList);

    /**
     * 更新导购名称
     *
     * @param clerkId   导购id
     * @param clerkName 导购名称
     * @param clerkCode 导购代码
     * @return int
     * @author mozhu
     * @date 2022-07-28 13:53:51
     */
    void updateClerkNameByClerkId(String enterpriseId, String clerkId,String clerkName,String clerkCode);


    /**
     * 更改门店名称
     *
     * @param storeId   存储id
     * @param storeName 商店名字
     * @param storeCode 存储代码
     * @return int
     * @author mozhu
     * @date 2022-07-28 13:54:49
     */
    void updateStoreNameByStoreId(String enterpriseId,String storeId,String storeName, String storeCode);
    
    /**
     * 
    * @Title: updateClerkInfo
    * @Description: 导购门店转移,更新导购信息
    * @author xugh
    * @param hmId
    * @param newClerkId
    * @throws
     */
    void updateClerkInfo(Long hmId,String newClerkId);
    
    String getClerkQrcode( String enterpriseId, String clerkId);
}
