package cn.iocoder.yudao.module.promotion.dal.mysql.coupon; import cn.hutool.core.map.MapUtil; import cn.iocoder.yudao.framework.common.pojo.PageResult; import cn.iocoder.yudao.framework.mybatis.core.mapper.BaseMapperX; import cn.iocoder.yudao.framework.mybatis.core.query.LambdaQueryWrapperX; import cn.iocoder.yudao.module.promotion.controller.admin.coupon.vo.coupon.CouponPageReqVO; import cn.iocoder.yudao.module.promotion.dal.dataobject.coupon.CouponDO; import com.baomidou.mybatisplus.core.conditions.update.LambdaUpdateWrapper; import com.github.yulichang.toolkit.MPJWrappers; import org.apache.ibatis.annotations.Mapper; import java.time.LocalDateTime; import java.util.Collection; import java.util.List; import java.util.Map; import static cn.iocoder.yudao.framework.common.util.collection.CollectionUtils.convertMap; /** * 优惠劵 Mapper * * @author 芋道源码 */ @Mapper public interface CouponMapper extends BaseMapperX { default PageResult selectPage(CouponPageReqVO reqVO) { return selectPage(reqVO, new LambdaQueryWrapperX() .eqIfPresent(CouponDO::getTemplateId, reqVO.getTemplateId()) .eqIfPresent(CouponDO::getStatus, reqVO.getStatus()) .inIfPresent(CouponDO::getUserId, reqVO.getUserIds()) .betweenIfPresent(CouponDO::getCreateTime, reqVO.getCreateTime()) .orderByDesc(CouponDO::getId)); } default List selectListByUserIdAndStatus(Long userId, Integer status) { return selectList(new LambdaQueryWrapperX() .eq(CouponDO::getUserId, userId).eq(CouponDO::getStatus, status)); } default CouponDO selectByIdAndUserId(Long id, Long userId) { return selectOne(new LambdaQueryWrapperX() .eq(CouponDO::getId, id).eq(CouponDO::getUserId, userId)); } default int delete(Long id, Collection whereStatuses) { return update(null, new LambdaUpdateWrapper() .eq(CouponDO::getId, id).in(CouponDO::getStatus, whereStatuses) .set(CouponDO::getDeleted, 1)); } default int updateByIdAndStatus(Long id, Integer status, CouponDO updateObj) { return update(updateObj, new LambdaUpdateWrapper() .eq(CouponDO::getId, id).eq(CouponDO::getStatus, status)); } default Long selectCountByUserIdAndStatus(Long userId, Integer status) { return selectCount(new LambdaQueryWrapperX() .eq(CouponDO::getUserId, userId) .eq(CouponDO::getStatus, status)); } default List selectListByTemplateIdAndUserId(Long templateId, Collection userIds) { return selectList(new LambdaQueryWrapperX() .eq(CouponDO::getTemplateId, templateId) .in(CouponDO::getUserId, userIds) ); } default Map selectCountByUserIdAndTemplateIdIn(Long userId, Collection templateIds) { String templateIdAlias = "templateId"; String countAlias = "count"; List> list = selectMaps(MPJWrappers.lambdaJoin(CouponDO.class) .selectAs(CouponDO::getTemplateId, templateIdAlias) .selectCount(CouponDO::getId, countAlias) .eq(CouponDO::getUserId, userId) .in(CouponDO::getTemplateId, templateIds) .groupBy(CouponDO::getTemplateId)); return convertMap(list, map -> MapUtil.getLong(map, templateIdAlias), map -> MapUtil.getInt(map, countAlias)); } default List selectListByStatusAndValidEndTimeLe(Integer status, LocalDateTime validEndTime) { return selectList(new LambdaQueryWrapperX() .eq(CouponDO::getStatus, status) .le(CouponDO::getValidEndTime, validEndTime) ); } }