package com.hzya.frame.basedao.entity;

import java.util.List;

/**
 * @ClassName RequestEntity
 * @Description 请求对象
 * @Author llg
 * Date 2022/12/3 1:55 下午
 */
public class RequestDisposeEntity {

    //查询返回字段
    private List<ReturnCriterion> returnCriterions;
    //表名
    private String tablename;
    //查询条件
    private List<WhereCriterion> wheres;

    //添加/修改 对象
    private List<ModifyCriterion> modifys;
    //批量修改的字段
    private List<String> batchFileds;
    //批量添加/修改 字段
    private List<List<ModifyCriterion>> batchModifys;


    //排序 利用pageHelper
    private List<OrderCriterion> order;
    //页数 利用pageHelper
    private Integer pageNum;
    //数量 利用pageHelper
    private Integer pageSize;


    //数据源类型--暂时没用
    private DataSourceType dataBaseType;
    //数据源标识--暂时没用
    private String dataSourceCode;


    //判断是否有返回字段
    public boolean isReturnValid() {
        return this.returnCriterions != null && this.returnCriterions.size() > 0;
    }
    //判断是否有判断条件
    public boolean isOpinionWheres() {
        return this.wheres != null && this.wheres.size() > 0;
    }
    //判断是否有排序
    public boolean isHavenOrder() {
        return this.order != null && this.order.size() > 0;
    }
    //返回排序string
    public String getOrderString() {
        StringBuffer stringBuffer = new StringBuffer();
        if (this.order != null && this.order.size() > 0) {
            for (int i = 0; i < this.order.size(); i++) {
                if (i == 0) {
                    stringBuffer.append(this.order.get(i).getOrderCriterionString());
                } else {
                    stringBuffer.append(" , ").append(this.order.get(i).getOrderCriterionString());
                }
            }
        }
        return stringBuffer.toString();
    }

    //判断是否有修改
    public boolean isHaveModifys() {
        return this.modifys != null && this.modifys.size() > 0;
    }
    //判断是否有批量修改字段
    public boolean isHaveBatchFileds() {
        return this.batchFileds != null && this.batchFileds.size() > 0;
    }
    //判断是否有批量修改字段
    public boolean isHaveBatchModifys() {
        return this.batchModifys != null && this.batchModifys.size() > 0
                && this.batchModifys.get(0) != null && this.batchModifys.get(0).size() > 0;
    }
    //public class WheresCriteria {
    //    //左括号
    //    private String leftBracket;
    //    //字段
    //    private String field;
    //    //条件
    //    private String condition;
    //    //值
    //    private Object value;
    //    //第二个值
    //    private Object secondValue;
    //    //右括号
    //    private String rightBracket;
    //    //类型
    //    private String type;
    //    //连接
    //    private String connect;
    //
    //    public String getField() {
    //        return field;
    //    }
    //
    //    public void setField(String field) {
    //        this.field = field;
    //    }
    //
    //    public String getCondition() {
    //        return condition;
    //    }
    //
    //    public void setCondition(String condition) {
    //        this.condition = condition;
    //    }
    //
    //
    //    public String getType() {
    //        return type;
    //    }
    //
    //    public void setType(String type) {
    //        this.type = type;
    //    }
    //
    //    public Object getValue() {
    //        return value;
    //    }
    //
    //    public void setValue(Object value) {
    //        this.value = value;
    //    }
    //
    //    public Object getSecondValue() {
    //        return secondValue;
    //    }
    //
    //    public void setSecondValue(Object secondValue) {
    //        this.secondValue = secondValue;
    //    }
    //
    //    public String getLeftBracket() {
    //        return leftBracket;
    //    }
    //
    //    public void setLeftBracket(String leftBracket) {
    //        this.leftBracket = leftBracket;
    //    }
    //
    //    public String getRightBracket() {
    //        return rightBracket;
    //    }
    //
    //    public void setRightBracket(String rightBracket) {
    //        this.rightBracket = rightBracket;
    //    }
    //
    //    public String getConnect() {
    //        return connect;
    //    }
    //
    //    public void setConnect(String connect) {
    //        this.connect = connect;
    //    }
    //}
    //
    //public class ModifyCriteria {
    //    //字段
    //    private String field;
    //    //值
    //    private Object value;
    //    //类型
    //    private String type;
    //
    //    public String getField() {
    //        return field;
    //    }
    //
    //    public void setField(String field) {
    //        this.field = field;
    //    }
    //
    //    public String getType() {
    //        return type;
    //    }
    //
    //    public void setType(String type) {
    //        this.type = type;
    //    }
    //
    //    public Object getValue() {
    //        return value;
    //    }
    //
    //    public void setValue(Object value) {
    //        this.value = value;
    //    }
    //
    //}
    //
    //public List<List<ModifyCriteria>> getBatchModify() {
    //    return batchModify;
    //}
    //
    //public void setBatchModify(List<List<ModifyCriteria>> batchModify) {
    //    this.batchModify = batchModify;
    //}
    //
    //public List<String> getBatchFiled() {
    //    return batchFiled;
    //}
    //
    //public void setBatchFiled(List<String> batchFiled) {
    //    this.batchFiled = batchFiled;
    //}
    //
    //public List<OrderSort> getOrder() {
    //    return order;
    //}
    //
    //public void setOrder(List<OrderSort> order) {
    //    this.order = order;
    //}
    //
    //public Integer getPageNum() {
    //    return pageNum;
    //}
    //
    //public void setPageNum(Integer pageNum) {
    //    this.pageNum = pageNum;
    //}
    //
    //public Integer getPageSize() {
    //    return pageSize;
    //}
    //
    //public void setPageSize(Integer pageSize) {
    //    this.pageSize = pageSize;
    //}
    //
    //public List<ReturnCriterion> getFileds() {
    //    return this.fileds;
    //}
    //
    //public void setFileds(List<ReturnCriterion> fileds) {
    //    this.fileds = fileds;
    //}
    //
    //public List<WheresCriteria> getWheres() {
    //    return this.wheres;
    //}
    //
    //public void setWheres(List<WheresCriteria> wheres) {
    //    this.wheres = wheres;
    //}
    //
    //public List<ModifyCriteria> getModify() {
    //    return this.modify;
    //}
    //
    //public void setModify(List<ModifyCriteria> modify) {
    //    this.modify = modify;
    //}
    //
    //
    ///**
    // * @return java.lang.String
    // * @Author lvleigang
    // * @Description
    // * @Date 3:41 下午 2022/12/7
    // **/
    //public String getOrderString() {
    //    StringBuffer stringBuffer = new StringBuffer();
    //    if (this.order != null && this.order.size() > 0) {
    //        for (int i = 0; i < this.order.size(); i++) {
    //            if (i == 0) {
    //                stringBuffer.append(this.order.get(i).getOrderSort());
    //            } else {
    //                stringBuffer.append(" , ").append(this.order.get(i).getOrderSort());
    //            }
    //        }
    //    }
    //    return stringBuffer.toString();
    //}
    //
    ///**
    // * @return java.lang.String
    // * @Author lvleigang
    // * @Description
    // * @Date 3:41 下午 2022/12/7
    // **/
    //public List<ModifyExample> getInsterModify() throws ParseException {
    //    SimpleDateFormat simpleDateFormat = new SimpleDateFormat("yyyy-MM-dd HH:mm:ss");
    //    List<ModifyExample> modifyExamples = new ArrayList<>();
    //    if (this.modify != null && this.modify.size() > 0) {
    //        for (int i = 0; i < this.modify.size(); i++) {
    //            switch (this.modify.get(i).getType()) {
    //                case "int":
    //                    modifyExamples.add(new ModifyExample(this.modify.get(i).getField(),(Integer) this.modify.get(i).getValue()));
    //                    break;
    //                case "decimal":
    //                    modifyExamples.add(new ModifyExample(this.modify.get(i).getField(),new BigDecimal(this.modify.get(i).getValue().toString())));
    //                    break;
    //                case "string":
    //                    modifyExamples.add(new ModifyExample(this.modify.get(i).getField(),this.modify.get(i).getValue().toString()));
    //                    break;
    //                case "date":
    //                    modifyExamples.add(new ModifyExample(this.modify.get(i).getField(),simpleDateFormat.parse(this.modify.get(i).getValue().toString())));
    //                    break;
    //                default:
    //                    throw new BaseSystemException("type：undefined");
    //            }
    //        }
    //    }
    //    return modifyExamples;
    //}
    //public List<List<ModifyExample>> getBatchInsterModify() throws ParseException {
    //    List<List<ModifyExample>> modifyExamples = new ArrayList<>();
    //    if (this.batchModify != null && this.batchModify.size() > 0) {
    //        for (int i = 0; i < this.batchModify.size(); i++) {
    //            modifyExamples.add(getInsterModifyS(this.batchModify.get(i)));
    //        }
    //    }
    //    return modifyExamples;
    //}
    //private List<ModifyExample> getInsterModifyS(List<ModifyCriteria> modify) throws ParseException {
    //    SimpleDateFormat simpleDateFormat = new SimpleDateFormat("yyyy-MM-dd HH:mm:ss");
    //    List<ModifyExample> modifyExamples = new ArrayList<>();
    //    if (modify != null && modify.size() > 0) {
    //        for (int i = 0; i < modify.size(); i++) {
    //            switch (modify.get(i).getType()) {
    //                case "int":
    //                    modifyExamples.add(new ModifyExample(modify.get(i).getField(),(Integer) modify.get(i).getValue()));
    //                    break;
    //                case "decimal":
    //                    modifyExamples.add(new ModifyExample(modify.get(i).getField(),new BigDecimal(modify.get(i).getValue().toString())));
    //                    break;
    //                case "string":
    //                    modifyExamples.add(new ModifyExample(modify.get(i).getField(),modify.get(i).getValue().toString()));
    //                    break;
    //                case "date":
    //                    modifyExamples.add(new ModifyExample(this.modify.get(i).getField(),simpleDateFormat.parse(modify.get(i).getValue().toString())));
    //                    break;
    //                default:
    //                    throw new BaseSystemException("type：undefined");
    //            }
    //        }
    //    }
    //    return modifyExamples;
    //}
    ///**
    // * @param
    // * @return java.util.List<com.hzya.frame.jdbcUtil.entity.Criterion>
    // * @Author lvleigang
    // * @Description 设置where条件
    // * @Date 3:58 下午 2022/12/7
    // **/
    //public List<Criterion> getWhereListds() {
    //    List<Criterion> criterionList = new ArrayList<>();
    //    if (this.wheres != null && this.wheres.size() > 0) {
    //        for (int i = 0; i < this.wheres.size(); i++) {
    //            switch (this.wheres.get(i).getCondition()) {
    //                case "=":
    //                    criterionList.add(andFieldEqualTo(this.wheres.get(i).getLeftBracket(), this.wheres.get(i).getField(), this.wheres.get(i).getValue(), this.wheres.get(i).rightBracket, i < (this.wheres.size()-1)? this.wheres.get(i).getConnect():""));
    //                    break;
    //                case "!=":
    //                    criterionList.add(andFieldNotEqualTo(this.wheres.get(i).getLeftBracket(), this.wheres.get(i).getField(), this.wheres.get(i).getValue(), this.wheres.get(i).rightBracket, i < (this.wheres.size()-1)? this.wheres.get(i).getConnect():""));
    //                    break;
    //                case "<":
    //                    criterionList.add(andFieldLessThan(this.wheres.get(i).getLeftBracket(), this.wheres.get(i).getField(), this.wheres.get(i).getValue(), this.wheres.get(i).rightBracket, i < (this.wheres.size()-1)? this.wheres.get(i).getConnect():""));
    //                    break;
    //                case "<=":
    //                    criterionList.add(andFieldLessThanOrEqualTo(this.wheres.get(i).getLeftBracket(), this.wheres.get(i).getField(), this.wheres.get(i).getValue(), this.wheres.get(i).rightBracket, i < (this.wheres.size()-1)? this.wheres.get(i).getConnect():""));
    //                    break;
    //                case ">":
    //                    criterionList.add(andFieldGreaterThan(this.wheres.get(i).getLeftBracket(), this.wheres.get(i).getField(), this.wheres.get(i).getValue(), this.wheres.get(i).rightBracket,  i < (this.wheres.size()-1)? this.wheres.get(i).getConnect():""));
    //                    break;
    //                case ">=":
    //                    criterionList.add(andFieldGreaterThanOrEqualTo(this.wheres.get(i).getLeftBracket(), this.wheres.get(i).getField(), this.wheres.get(i).getValue(), this.wheres.get(i).rightBracket,  i < (this.wheres.size()-1)? this.wheres.get(i).getConnect():""));
    //                    break;
    //                case "包含":
    //                    criterionList.add(andFieldLike(this.wheres.get(i).getLeftBracket(), this.wheres.get(i).getField(), "%" + this.wheres.get(i).getValue() + "%", this.wheres.get(i).rightBracket, i < (this.wheres.size()-1)? this.wheres.get(i).getConnect():""));
    //                    break;
    //                case "不包含":
    //                    criterionList.add(andFieldNotLike(this.wheres.get(i).getLeftBracket(), this.wheres.get(i).getField(), "%" + this.wheres.get(i).getValue() + "%", this.wheres.get(i).rightBracket,  i < (this.wheres.size()-1)? this.wheres.get(i).getConnect():""));
    //                    break;
    //                case "开始以":
    //                    criterionList.add( andFieldLike(this.wheres.get(i).getLeftBracket(), this.wheres.get(i).getField(), this.wheres.get(i).getValue() + "%", this.wheres.get(i).rightBracket, i < (this.wheres.size()-1)? this.wheres.get(i).getConnect():""));
    //                    break;
    //                case "开始不是以":
    //                    criterionList.add(andFieldNotLike(this.wheres.get(i).getLeftBracket(), this.wheres.get(i).getField(), this.wheres.get(i).getValue() + "%", this.wheres.get(i).rightBracket,  i < (this.wheres.size()-1)? this.wheres.get(i).getConnect():""));
    //                    break;
    //                case "结束以":
    //                    criterionList.add(andFieldLike(this.wheres.get(i).getLeftBracket(), this.wheres.get(i).getField(), "%" + this.wheres.get(i).getValue(), this.wheres.get(i).rightBracket,  i < (this.wheres.size()-1)? this.wheres.get(i).getConnect():""));
    //                    break;
    //                case "结束不是以":
    //                    criterionList.add(andFieldNotLike(this.wheres.get(i).getLeftBracket(), this.wheres.get(i).getField(), "%" + this.wheres.get(i).getValue(), this.wheres.get(i).rightBracket,  i < (this.wheres.size()-1)? this.wheres.get(i).getConnect():""));
    //                    break;
    //                case "是null":
    //                    criterionList.add(andFieldIsNull(this.wheres.get(i).getLeftBracket(), this.wheres.get(i).getField(), this.wheres.get(i).rightBracket, i < (this.wheres.size()-1)? this.wheres.get(i).getConnect():""));
    //                    break;
    //                case "不是 null":
    //                    criterionList.add(andFieldIsNotNull(this.wheres.get(i).getLeftBracket(), this.wheres.get(i).getField(), this.wheres.get(i).rightBracket, i < (this.wheres.size()-1)? this.wheres.get(i).getConnect():""));
    //                    break;
    //                case "是空的":
    //                    criterionList.add(andFieldEqualTo(this.wheres.get(i).getLeftBracket(), this.wheres.get(i).getField(), "''", this.wheres.get(i).rightBracket, i < (this.wheres.size()-1)? this.wheres.get(i).getConnect():""));
    //                    break;
    //                case "不是空的":
    //                    criterionList.add(andFieldNotEqualTo(this.wheres.get(i).getLeftBracket(), this.wheres.get(i).getField(), "''", this.wheres.get(i).rightBracket,  i < (this.wheres.size()-1)? this.wheres.get(i).getConnect():""));
    //                    break;
    //                case "介于":
    //                    criterionList.add(andFieldBetween(this.wheres.get(i).getLeftBracket(), this.wheres.get(i).getField(), this.wheres.get(i).getValue(), this.wheres.get(i).getSecondValue(), this.wheres.get(i).rightBracket,  i < (this.wheres.size()-1)? this.wheres.get(i).getConnect():""));
    //                    break;
    //                case "不介于":
    //                    criterionList.add(andFieldNotBetween(this.wheres.get(i).getLeftBracket(), this.wheres.get(i).getField(), this.wheres.get(i).getValue(), this.wheres.get(i).getSecondValue(), this.wheres.get(i).rightBracket,  i < (this.wheres.size()-1)? this.wheres.get(i).getConnect():""));
    //                    break;
    //                case "在列表":
    //                    criterionList.add(andFieldIn(this.wheres.get(i).getLeftBracket(), this.wheres.get(i).getField(), this.wheres.get(i).getValue(), this.wheres.get(i).rightBracket,  i < (this.wheres.size()-1)? this.wheres.get(i).getConnect():""));
    //                    break;
    //                case "不在列表":
    //                    criterionList.add(andFieldNotIn(this.wheres.get(i).getLeftBracket(), this.wheres.get(i).getField(), this.wheres.get(i).getValue(), this.wheres.get(i).rightBracket,  i < (this.wheres.size()-1)? this.wheres.get(i).getConnect():""));
    //                    break;
    //                default:
    //                    throw new BaseSystemException("condition：undefined");
    //            }
    //        }
    //    }
    //    return criterionList;
    //}
    //
    //public void checkNull(String field) {
    //    if (field == null || "".equals(field)) {
    //        throw new RuntimeException("field cannot be null");
    //    }
    //}
    //
    ////拼接sql
    //
    //public Criterion andFieldIsNull(String leftBracket, String field, String rightBracket, String connect) {
    //    checkNull(field);
    //    return new Criterion(leftBracket, field + " is null", rightBracket, connect);
    //}
    //
    //public Criterion andFieldIsNotNull(String leftBracket, String field, String rightBracket, String connect) {
    //    checkNull(field);
    //    return new Criterion(leftBracket, field + " is not null", rightBracket, connect);
    //
    //}
    //
    //public Criterion andFieldEqualTo(String leftBracket, String field, Object value, String rightBracket, String connect) {
    //    checkNull(field);
    //    return new Criterion(leftBracket, field + " =", value, rightBracket, connect, field);
    //}
    //
    //public Criterion andFieldNotEqualTo(String leftBracket, String field, Object value, String rightBracket, String connect) {
    //    checkNull(field);
    //    return new Criterion(leftBracket, field + " <>", value, rightBracket, connect, field);
    //}
    //
    //public Criterion andFieldGreaterThan(String leftBracket, String field, Object value, String rightBracket, String connect) {
    //    checkNull(field);
    //    return new Criterion(leftBracket, field + " >", value, rightBracket, connect, field);
    //}
    //
    //public Criterion andFieldGreaterThanOrEqualTo(String leftBracket, String field, Object value, String rightBracket, String connect) {
    //    checkNull(field);
    //    return new Criterion(leftBracket, field + " >=", value, rightBracket, connect, field);
    //}
    //
    //public Criterion andFieldLessThan(String leftBracket, String field, Object value, String rightBracket, String connect) {
    //    checkNull(field);
    //    return new Criterion(leftBracket, field + " <", value, rightBracket, connect, field);
    //}
    //
    //public Criterion andFieldLessThanOrEqualTo(String leftBracket, String field, Object value, String rightBracket, String connect) {
    //    checkNull(field);
    //    return new Criterion(leftBracket, field + " <=", value, rightBracket, connect, field);
    //}
    //
    //public Criterion andFieldLike(String leftBracket, String field, Object value, String rightBracket, String connect) {
    //    checkNull(field);
    //    return new Criterion(leftBracket, field + " like", value, rightBracket, connect, field);
    //}
    //
    //public Criterion andFieldNotLike(String leftBracket, String field, Object value, String rightBracket, String connect) {
    //    checkNull(field);
    //    return new Criterion(leftBracket, field + " not like", value, rightBracket, connect, field);
    //}
    //
    //public Criterion andFieldIn(String leftBracket, String field, Object values, String rightBracket, String connect) {
    //    checkNull(field);
    //    return new Criterion(leftBracket, field + " in", values, rightBracket, connect, field);
    //}
    //
    //public Criterion andFieldOr(String leftBracket, String field, List<String> values, String rightBracket, String connect) {
    //    checkNull(field);
    //    if (values == null || values.size() == 0) {
    //        throw new RuntimeException("Value for " + field + " cannot be null");
    //    }
    //    StringBuffer stringBuffer = new StringBuffer();
    //    stringBuffer.append("( ");
    //    for (int i = 0; i < values.size(); i++) {
    //        if (i != 0) {
    //            stringBuffer.append(" or ");
    //        }
    //        stringBuffer.append(field + " = '" + values.get(i) + "' ");
    //    }
    //    stringBuffer.append(" )");
    //    return new Criterion(leftBracket, stringBuffer.toString(), rightBracket, connect);
    //}
    //
    //public Criterion andFieldNotIn(String leftBracket, String field, Object values, String rightBracket, String connect) {
    //    checkNull(field);
    //    return new Criterion(leftBracket, field + " not in", values, rightBracket, connect, field);
    //}
    //
    //public Criterion andFieldBetween(String leftBracket, String field, Object value1, Object value2, String rightBracket, String connect) {
    //    checkNull(field);
    //    return new Criterion(leftBracket, field + " between", value1, value2, rightBracket, connect, field);
    //}
    //
    //public Criterion andFieldNotBetween(String leftBracket, String field, Object value1, Object value2, String rightBracket, String connect) {
    //    checkNull(field);
    //    return new Criterion(leftBracket, field + " not between", value1, value2, rightBracket, connect, field);
    //}


    private RequestDisposeEntity() {
    }

    public RequestDisposeEntity(String tablename) {
        this.tablename = tablename;
    }

    public List<ReturnCriterion> getReturnCriterions() {
        return returnCriterions;
    }

    public void setReturnCriterions(List<ReturnCriterion> returnCriterions) {
        this.returnCriterions = returnCriterions;
    }

    public String getTablename() {
        return tablename;
    }

    public void setTablename(String tablename) {
        this.tablename = tablename;
    }

    public List<WhereCriterion> getWheres() {
        return wheres;
    }

    public void setWheres(List<WhereCriterion> wheres) {
        this.wheres = wheres;
    }

    public List<ModifyCriterion> getModifys() {
        return modifys;
    }

    public void setModifys(List<ModifyCriterion> modifys) {
        this.modifys = modifys;
    }

    public List<String> getBatchFileds() {
        return batchFileds;
    }

    public void setBatchFileds(List<String> batchFileds) {
        this.batchFileds = batchFileds;
    }

    public List<List<ModifyCriterion>> getBatchModifys() {
        return batchModifys;
    }

    public void setBatchModifys(List<List<ModifyCriterion>> batchModifys) {
        this.batchModifys = batchModifys;
    }

    public List<OrderCriterion> getOrder() {
        return order;
    }

    public void setOrder(List<OrderCriterion> order) {
        this.order = order;
    }

    public Integer getPageNum() {
        return pageNum;
    }

    public void setPageNum(Integer pageNum) {
        this.pageNum = pageNum;
    }

    public Integer getPageSize() {
        return pageSize;
    }

    public void setPageSize(Integer pageSize) {
        this.pageSize = pageSize;
    }

    public DataSourceType getDataBaseType() {
        return dataBaseType;
    }

    public void setDataBaseType(DataSourceType dataBaseType) {
        this.dataBaseType = dataBaseType;
    }

    public String getDataSourceCode() {
        return dataSourceCode;
    }

    public void setDataSourceCode(String dataSourceCode) {
        this.dataSourceCode = dataSourceCode;
    }


    @Override
    public String toString() {
        return "RequestDisposeEntity{" +
                "returnCriterions=" + returnCriterions +
                ", tablename='" + tablename + '\'' +
                ", wheres=" + wheres +
                ", modifys=" + modifys +
                ", batchFileds=" + batchFileds +
                ", batchModifys=" + batchModifys +
                ", order=" + order +
                ", pageNum=" + pageNum +
                ", pageSize=" + pageSize +
                ", dataBaseType=" + dataBaseType +
                ", dataSourceCode='" + dataSourceCode + '\'' +
                '}';
    }
}
