package cn.com.ty.lift.ud.question.controller.query;

import cn.com.ty.lift.ud.question.mapper.entity.QuestionBankEntity;
import cn.com.ty.lift.ud.common.BasePageQuery;
import com.baomidou.mybatisplus.core.conditions.Wrapper;
import com.baomidou.mybatisplus.core.conditions.query.QueryWrapper;
import com.baomidou.mybatisplus.core.metadata.IPage;
import com.baomidou.mybatisplus.extension.plugins.pagination.Page;
import io.swagger.annotations.ApiModel;
import io.swagger.annotations.ApiModelProperty;
import lombok.Data;
import org.apache.commons.lang3.StringUtils;

import java.math.BigDecimal;
import java.util.Date;

/**
 * 题库 查询条件
 * 
 * @author Xson
 * @date 2020-04-25
 */
@Data
@ApiModel(description = "题库 查询条件")
public final class QuestionBankAppQuery extends BasePageQuery {

    /**
     * 主键
     */
    @ApiModelProperty("主键")
     private Long id;

    /**
     * 标题
     */
    @ApiModelProperty("标题")
    private String title;

    /**
     * 问题现象
     */
    @ApiModelProperty("问题现象")
    private String expression;

    /**
     * 解决方法
     */
    @ApiModelProperty("解决方法")
    private String solution;

    /**
     * 图集
     */
    @ApiModelProperty("图集")
    private String imgs;

    /**
     * 品牌
     */
    @ApiModelProperty("品牌")
     private Integer brandId;

    /**
     * 专家ID
     */
    @ApiModelProperty("专家ID")
    private Integer expert;

    /**
     * 赏金
     */
    @ApiModelProperty("赏金")
    private BigDecimal reward;

    /**
     * 付费标志 1:付费看解决方法0:不强制要求
     */
    @ApiModelProperty("付费标志 1:付费看解决方法0:不强制要求")
     private Integer lockFlag;

    /**
     * 热门推荐 0:普通1:热门推荐
     */
    @ApiModelProperty("热门推荐 0:普通1:热门推荐")
     private Integer hotFlag;

    /**
     * 状态 0:正常1:下架
     */
    @ApiModelProperty("状态 0:正常1:下架")
    private Integer statuz;

    /**
     * 收藏数量
     */
    @ApiModelProperty("收藏数量")
     private Integer favoriteNum;

    /**
     * 点赞数量
     */
    @ApiModelProperty("点赞数量")
     private Integer likeNum;

    /**
     * 浏览量
     */
    @ApiModelProperty("浏览量")
     private Integer browseNum;

    /**
     * 打赏数量
     */
    @ApiModelProperty("打赏数量")
     private Integer tipNum;

    /**
     * 创建人
     */
    @ApiModelProperty("创建人")
     private String createBy;

    /**
     * 创建时间
     */
    @ApiModelProperty("创建时间")
     private Date createTime;

    /**
     * 更新人
     */
    @ApiModelProperty("更新人")
     private String updateBy;

    /**
     * 更新时间
     */
    @ApiModelProperty("更新时间")
     private Date updateTime;

    /**
     * 是否审批通过 0 否 1 是  2 驳回
     */
    @ApiModelProperty("是否审批通过 0 否 1 是  2 驳回")
     private Integer examineFlag;

    /**
     * 驳回理由
     */
    @ApiModelProperty("驳回理由")
     private String notExamineReason;

    /**
     * 有效期，单位为 月
     */
    @ApiModelProperty("有效期，单位为 月")
     private Integer validPeriod;


    /**
     * 专家姓名，后面加的
     */
    @ApiModelProperty("专家姓名")
    private String userName;



    /**
     * 查询条件 ,LambdaQueryWrapper 和 QueryWrapper 都有
     * @return
     */
    @Override
    public Wrapper condition() {
//        LambdaQueryWrapper<QuestionBankEntity> query = new LambdaQueryWrapper<>();
//        //标题
//        if (StringUtils.isNotBlank(title)) {
//            query.like(QuestionBankEntity::getTitle, title);
//        }
//        //专家
//        if (null != expert) {
//            query.eq(QuestionBankEntity::getExpert, expert);
//        }
//        //状态，两个表都有 statuz，无法识别,如何表示这个字段是 question_bank 的 statuz
//        //  LambdaQueryWrapper lambda 表达式不能指定别名  QueryWrapper 可以
//        if (null != statuz) {
//            query.eq(QuestionBankEntity::getStatuz, statuz);
//        }
//        //题库管理只显示审批通过的，题库审批只显示还没审批的,这个值不可能为空
//        if(StringUtils.isNotBlank(examineFlag)){
//            query.like(QuestionBankEntity::getExamineFlag, examineFlag);
//        }
//        //先按置顶排序，再按浏览量
//        if (null != browseNum && null != hotFlag) {
//            query.orderByDesc(QuestionBankEntity::getHotFlag,QuestionBankEntity::getBrowseNum);
//        }
//        return query;

        QueryWrapper<QuestionBankEntity> query = new QueryWrapper<>();
        //标题
        if (StringUtils.isNotBlank(title)) {
            query.like("q.title", title);
        }
        //专家，QuestionBankQuery中要加这个字段
        if (StringUtils.isNotBlank(userName) ) {
            query.like("users.name", userName);
        }
        //品牌
        if (null != brandId) {
            query.eq("q.brand_id", brandId);
        }
        //状态
        if (null != statuz) {
            query.eq("q.statuz", statuz);
        }
        //题库管理显示所有状态的，题库审批只显示还没审批的
        if(null != examineFlag){
            query.like("q.examine_flag", examineFlag);
        }
        //是否热门
        if(null != hotFlag){
            query.eq("q.hot_flag", hotFlag);
        }
        //先按创建时间倒序，再按置顶排序，再按浏览量
        query.orderByDesc("q.hot_flag").orderByDesc("q.browse_num");
        query.eq("1",1);
        return query;
    }

    /**
     * 分页条件
     * @return
     */
    @Override
    public IPage page() {
        Page<QuestionBankEntity> page = new Page<>(getPageNum(), getPageSize());
        return page;
    }

}

