package cn.iocoder.yudao.module.trade.dal.mysql.order; 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.framework.mybatis.core.query.MPJLambdaWrapperX; import cn.iocoder.yudao.module.trade.controller.admin.order.vo.TradeOrderPageReqVO; import cn.iocoder.yudao.module.trade.controller.app.order.vo.AppTradeOrderPageReqVO; import cn.iocoder.yudao.module.trade.dal.dataobject.order.TradeOrderDO; import cn.iocoder.yudao.module.trade.enums.order.TradeOrderTypeEnum; import com.baomidou.mybatisplus.core.conditions.update.LambdaUpdateWrapper; import org.apache.ibatis.annotations.Mapper; import java.time.LocalDateTime; import java.util.List; import java.util.Map; import java.util.Set; @Mapper public interface TradeOrderMapper extends BaseMapperX { default int updateByIdAndStatus(Long id, Integer status, TradeOrderDO update) { return update(update, new LambdaUpdateWrapper() .eq(TradeOrderDO::getId, id).eq(TradeOrderDO::getStatus, status)); } default TradeOrderDO selectByIdAndUserId(Long id, Long userId) { return selectOne(TradeOrderDO::getId, id, TradeOrderDO::getUserId, userId); } default PageResult selectPage(TradeOrderPageReqVO reqVO, Set userIds) { return selectPage(reqVO, new LambdaQueryWrapperX() .likeIfPresent(TradeOrderDO::getNo, reqVO.getNo()) .eqIfPresent(TradeOrderDO::getUserId, reqVO.getUserId()) .eqIfPresent(TradeOrderDO::getDeliveryType, reqVO.getDeliveryType()) .inIfPresent(TradeOrderDO::getUserId, userIds) .eqIfPresent(TradeOrderDO::getType, reqVO.getType()) .eqIfPresent(TradeOrderDO::getStatus, reqVO.getStatus()) .eqIfPresent(TradeOrderDO::getPayChannelCode, reqVO.getPayChannelCode()) .eqIfPresent(TradeOrderDO::getTerminal, reqVO.getTerminal()) .eqIfPresent(TradeOrderDO::getLogisticsId, reqVO.getLogisticsId()) .inIfPresent(TradeOrderDO::getPickUpStoreId, reqVO.getPickUpStoreIds()) .likeIfPresent(TradeOrderDO::getPickUpVerifyCode, reqVO.getPickUpVerifyCode()) .betweenIfPresent(TradeOrderDO::getCreateTime, reqVO.getCreateTime()) .orderByDesc(TradeOrderDO::getId)); } // TODO @疯狂:如果用 map 返回,要不这里直接用 TradeOrderSummaryRespVO 返回?也算合理,就当 sql 查询出这么个玩意~~ default List> selectOrderSummaryGroupByRefundStatus(TradeOrderPageReqVO reqVO, Set userIds) { return selectMaps(new MPJLambdaWrapperX() .selectAs(TradeOrderDO::getRefundStatus, TradeOrderDO::getRefundStatus) // 售后状态 .selectCount(TradeOrderDO::getId, "count") // 售后状态对应的数量 .selectSum(TradeOrderDO::getPayPrice, "price") // 售后状态对应的支付金额 .likeIfPresent(TradeOrderDO::getNo, reqVO.getNo()) .eqIfPresent(TradeOrderDO::getUserId, reqVO.getUserId()) .eqIfPresent(TradeOrderDO::getDeliveryType, reqVO.getDeliveryType()) .inIfPresent(TradeOrderDO::getUserId, userIds) .eqIfPresent(TradeOrderDO::getType, reqVO.getType()) .eqIfPresent(TradeOrderDO::getStatus, reqVO.getStatus()) .eqIfPresent(TradeOrderDO::getPayChannelCode, reqVO.getPayChannelCode()) .eqIfPresent(TradeOrderDO::getTerminal, reqVO.getTerminal()) .eqIfPresent(TradeOrderDO::getLogisticsId, reqVO.getLogisticsId()) .inIfPresent(TradeOrderDO::getPickUpStoreId, reqVO.getPickUpStoreIds()) .likeIfPresent(TradeOrderDO::getPickUpVerifyCode, reqVO.getPickUpVerifyCode()) .betweenIfPresent(TradeOrderDO::getCreateTime, reqVO.getCreateTime()) .groupBy(TradeOrderDO::getRefundStatus)); // 按售后状态分组 } default PageResult selectPage(AppTradeOrderPageReqVO reqVO, Long userId) { return selectPage(reqVO, new LambdaQueryWrapperX() .eq(TradeOrderDO::getUserId, userId) .eqIfPresent(TradeOrderDO::getStatus, reqVO.getStatus()) .eqIfPresent(TradeOrderDO::getCommentStatus, reqVO.getCommentStatus()) .orderByDesc(TradeOrderDO::getId)); // TODO 芋艿:未来不同的 status,不同的排序 } default Long selectCountByUserIdAndStatus(Long userId, Integer status, Boolean commentStatus) { return selectCount(new LambdaQueryWrapperX() .eq(TradeOrderDO::getUserId, userId) .eqIfPresent(TradeOrderDO::getStatus, status) .eqIfPresent(TradeOrderDO::getCommentStatus, commentStatus)); } default TradeOrderDO selectOrderByIdAndUserId(Long orderId, Long loginUserId) { return selectOne(new LambdaQueryWrapperX() .eq(TradeOrderDO::getId, orderId) .eq(TradeOrderDO::getUserId, loginUserId)); } default List selectListByStatusAndCreateTimeLt(Integer status, LocalDateTime createTime) { return selectList(new LambdaUpdateWrapper() .eq(TradeOrderDO::getStatus, status) .lt(TradeOrderDO::getCreateTime, createTime)); } default List selectListByStatusAndDeliveryTimeLt(Integer status, LocalDateTime deliveryTime) { return selectList(new LambdaUpdateWrapper() .eq(TradeOrderDO::getStatus, status) .lt(TradeOrderDO::getDeliveryTime, deliveryTime)); } default List selectListByStatusAndReceiveTimeLt(Integer status, LocalDateTime receive, Boolean commentStatus) { return selectList(new LambdaUpdateWrapper() .eq(TradeOrderDO::getStatus, status) .lt(TradeOrderDO::getReceiveTime, receive) .eq(TradeOrderDO::getCommentStatus, commentStatus)); } default List selectListByUserIdAndActivityId(Long userId, Long activityId, TradeOrderTypeEnum type) { LambdaQueryWrapperX queryWrapperX = new LambdaQueryWrapperX<>(); queryWrapperX.eq(TradeOrderDO::getUserId, userId); if (TradeOrderTypeEnum.isSeckill(type.getType())) { queryWrapperX.eq(TradeOrderDO::getSeckillActivityId, activityId); } if (TradeOrderTypeEnum.isBargain(type.getType())) { queryWrapperX.eq(TradeOrderDO::getBargainActivityId, activityId); } if (TradeOrderTypeEnum.isCombination(type.getType())) { queryWrapperX.eq(TradeOrderDO::getCombinationActivityId, activityId); } if (TradeOrderTypeEnum.isPoint(type.getType())) { queryWrapperX.eq(TradeOrderDO::getPointActivityId, activityId); } return selectList(queryWrapperX); } default TradeOrderDO selectOneByPickUpVerifyCode(String pickUpVerifyCode) { return selectOne(TradeOrderDO::getPickUpVerifyCode, pickUpVerifyCode); } default TradeOrderDO selectByUserIdAndCombinationActivityIdAndStatus(Long userId, Long combinationActivityId, Integer status) { return selectOne(new LambdaQueryWrapperX() .eq(TradeOrderDO::getUserId, userId) .eq(TradeOrderDO::getStatus, status) .eq(TradeOrderDO::getCombinationActivityId, combinationActivityId) ); } }