package cn.lili.modules.order.order.entity.dto; import cn.hutool.core.text.CharSequenceUtil; import cn.lili.common.security.AuthUser; import cn.lili.common.security.context.UserContext; import cn.lili.common.security.enums.UserEnums; import cn.lili.common.utils.DateUtil; import cn.lili.common.vo.PageVO; import cn.lili.modules.order.order.entity.enums.*; import com.baomidou.mybatisplus.core.conditions.query.QueryWrapper; import com.fasterxml.jackson.annotation.JsonFormat; import io.swagger.annotations.ApiModelProperty; import lombok.Data; import lombok.EqualsAndHashCode; import org.springframework.format.annotation.DateTimeFormat; import java.util.Date; /** * 订单查询参数 * * @author Chopper * @since 2020/11/17 4:33 下午 */ @EqualsAndHashCode(callSuper = true) @Data public class OrderSearchParams extends PageVO { private static final long serialVersionUID = -6380573339089959194L; @ApiModelProperty(value = "商品名称") private String goodsName; @ApiModelProperty(value = "订单编号") private String orderSn; @ApiModelProperty(value = "页面标签", example = "ALL:全部," + "WAIT_PAY:待付款," + "WAIT_ROG:待收货," + "CANCELLED:已取消," + "COMPLETE:已完成") private String tag; @ApiModelProperty(value = "商家ID") private String storeId; @ApiModelProperty(value = "会员ID") private String memberId; @ApiModelProperty(value = "收货人") private String shipName; @ApiModelProperty(value = "买家昵称") private String buyerName; @ApiModelProperty(value = "订单状态") private String orderStatus; @ApiModelProperty(value = "付款状态") private String payStatus; @ApiModelProperty(value = "关键字 商品名称/买家名称/店铺名称") private String keywords; @ApiModelProperty(value = "付款方式") private String paymentType; /** * @see OrderTypeEnum * @see cn.lili.modules.order.order.entity.enums.OrderPromotionTypeEnum */ @ApiModelProperty(value = "订单类型", allowableValues = "NORMAL,VIRTUAL,GIFT,PINTUAN,POINT") private String orderType; @ApiModelProperty(value = "支付方式") private String paymentMethod; @JsonFormat(timezone = "GMT+8", pattern = "yyyy-MM-dd HH:mm:ss") @DateTimeFormat(pattern = "yyyy-MM-dd HH:mm:ss") @ApiModelProperty(value = "支付时间") private Date paymentTime; @JsonFormat(timezone = "GMT+8", pattern = "yyyy-MM-dd HH:mm:ss") @DateTimeFormat(pattern = "yyyy-MM-dd") @ApiModelProperty(value = "下单开始时间") private Date startDate; @JsonFormat(timezone = "GMT+8", pattern = "yyyy-MM-dd HH:mm:ss") @DateTimeFormat(pattern = "yyyy-MM-dd") @ApiModelProperty(value = "下单结束时间") private Date endDate; @ApiModelProperty(value = "订单来源") private String clientType; /** * @see CommentStatusEnum */ @ApiModelProperty(value = "评论状态:未评论(UNFINISHED),待追评(WAIT_CHASE),评论完成(FINISHED),") private String commentStatus; @ApiModelProperty(value = "是否为其他订单下的订单,如果是则为依赖订单的sn,否则为空") private String parentOrderSn; @ApiModelProperty(value = "是否为某订单类型的订单,如果是则为订单类型的id,否则为空") private String promotionId; @ApiModelProperty(value = "总价格,可以为范围,如10_1000") private String flowPrice; /** * @see OrderPromotionTypeEnum */ @ApiModelProperty(value = "订单促销类型") private String orderPromotionType; public QueryWrapper queryWrapper() { AuthUser currentUser = UserContext.getCurrentUser(); QueryWrapper wrapper = new QueryWrapper<>(); //关键字查询 if (CharSequenceUtil.isNotEmpty(keywords)) { wrapper.and(keyWrapper -> keyWrapper.like("o.sn", keywords).or().like("oi.goods_name", keywords)); } if (currentUser != null) { //按卖家查询 wrapper.eq(CharSequenceUtil.equals(currentUser.getRole().name(), UserEnums.STORE.name()), "o.store_id", currentUser.getStoreId()); //店铺查询 wrapper.eq(CharSequenceUtil.equals(currentUser.getRole().name(), UserEnums.MANAGER.name()) && CharSequenceUtil.isNotEmpty(storeId), "o.store_id", storeId); //按买家查询 wrapper.eq(CharSequenceUtil.equals(currentUser.getRole().name(), UserEnums.MEMBER.name()) && memberId == null, "o.member_id", currentUser.getId()); } //按照买家查询 wrapper.like(CharSequenceUtil.isNotEmpty(memberId), "o.member_id", memberId); //按订单编号查询 wrapper.like(CharSequenceUtil.isNotEmpty(orderSn), "o.sn", orderSn); //按时间查询 wrapper.ge(startDate != null, "o.create_time", startDate); wrapper.le(endDate != null, "o.create_time", DateUtil.endOfDate(endDate)); //按购买人用户名 wrapper.like(CharSequenceUtil.isNotEmpty(buyerName), "o.member_name", buyerName); //按订单类型 wrapper.eq(CharSequenceUtil.isNotEmpty(orderType), "o.order_type", orderType); //物流查询 wrapper.like(CharSequenceUtil.isNotEmpty(shipName), "o.consignee_name", shipName); //按商品名称查询 wrapper.like(CharSequenceUtil.isNotEmpty(goodsName), "oi.goods_name", goodsName); //付款方式 wrapper.like(CharSequenceUtil.isNotEmpty(paymentType), "o.payment_type", paymentType); //按支付方式 wrapper.eq(CharSequenceUtil.isNotEmpty(paymentMethod), "o.payment_method", paymentMethod); //订单状态 wrapper.eq(CharSequenceUtil.isNotEmpty(orderStatus), "o.order_status", orderStatus); //付款状态 wrapper.eq(CharSequenceUtil.isNotEmpty(payStatus), "o.pay_status", payStatus); //订单来源 wrapper.like(CharSequenceUtil.isNotEmpty(clientType), "o.client_type", clientType); //按评价状态 wrapper.eq(CharSequenceUtil.isNotEmpty(commentStatus), "oi.comment_status", commentStatus); //按标签查询 if (CharSequenceUtil.isNotEmpty(tag)) { String orderStatusColumn = "o.order_status"; OrderTagEnum tagEnum = OrderTagEnum.valueOf(tag); switch (tagEnum) { //待付款 case WAIT_PAY: wrapper.eq(orderStatusColumn, OrderStatusEnum.UNPAID.name()); break; //待发货 case WAIT_SHIP: wrapper.eq(orderStatusColumn, OrderStatusEnum.UNDELIVERED.name()); break; //待收货 case WAIT_ROG: wrapper.eq(orderStatusColumn, OrderStatusEnum.DELIVERED.name()); break; //已取消 case CANCELLED: wrapper.eq(orderStatusColumn, OrderStatusEnum.CANCELLED.name()); break; //已完成 case COMPLETE: wrapper.eq(orderStatusColumn, OrderStatusEnum.COMPLETED.name()); break; default: break; } } // 依赖订单 wrapper.eq(parentOrderSn != null, "o.parent_order_sn", parentOrderSn); // 促销活动id wrapper.eq(CharSequenceUtil.isNotEmpty(promotionId), "o.promotion_id", promotionId); wrapper.eq(CharSequenceUtil.isNotEmpty(orderPromotionType), "o.order_promotion_type", orderPromotionType); if (CharSequenceUtil.isNotEmpty(flowPrice)) { String[] s = flowPrice.split("_"); if (s.length > 1) { wrapper.between("o.flow_price", s[0], s[1]); } else { wrapper.ge("o.flow_price", s[0]); } } wrapper.eq("o.delete_flag", false); return wrapper; } }