package thyyxxk.webserver.entity.zhuyuanyisheng.yizhuluru;

import com.baomidou.mybatisplus.core.conditions.query.QueryWrapper;
import lombok.Data;
import thyyxxk.webserver.utils.StringUtil;

import javax.validation.constraints.Min;
import javax.validation.constraints.NotNull;
import java.math.BigDecimal;

/**
 * <p>
 * 描述： 医嘱费用查询条件
 * </p>
 *
 * @author xc
 * @date 2022-01-06 15:47
 */
@Data
public class YiZhuFeiYongChaXunTiaoJian {
    @NotNull(message = "住院号不能为空")
    private String patNo;
    @NotNull(message = "住院次数不能为空")
    @Min(value = 1, message = "最小值为1")
    private Integer times;

    /**
     * 开始时间
     */
    private String startTime;
    private String endTime;

    /**
     * 医嘱号
     */
    private String actOrderNoStr;

    private String parentNoStr;

    public BigDecimal getActOrderNo() {
        if (StringUtil.notBlank(actOrderNoStr)) {
            return new BigDecimal(actOrderNoStr).abs();
        }
        return null;
    }

    public BigDecimal getParentNo() {
        if (StringUtil.notBlank(parentNoStr)) {
            return new BigDecimal(parentNoStr).abs();
        }
        return null;
    }

    public QueryWrapper<?> buildQw() {
        QueryWrapper<?> qw = new QueryWrapper<>();

        qw.eq("a.inpatient_no", patNo)
                .eq("a.admiss_times", times);

        if (StringUtil.notBlank(startTime)) {
            qw.ge("a.order_time", startTime)
                    .le("a.order_time", endTime);
        }

        if (StringUtil.notBlank(actOrderNoStr)) {
            if (StringUtil.notBlank(parentNoStr)) {
                qw.and(queryWrapper -> {
                    queryWrapper.eq("a.act_order_no", getParentNo())
                            .or()
                            .eq("a.parent_no", getParentNo());
                });
            } else {
                qw.and(queryWrapper -> {
                    queryWrapper.eq("a.act_order_no", getActOrderNo())
                            .or()
                            .eq("a.parent_no", getActOrderNo());
                });
            }
        }

        qw.orderByAsc("a.act_order_no");
        return qw;
    }
}
