diff --git a/modules/i3plus-pojo-base/src/main/java/cn/estsh/i3plus/pojo/base/bean/BaseResultBean.java b/modules/i3plus-pojo-base/src/main/java/cn/estsh/i3plus/pojo/base/bean/BaseResultBean.java index 43d7a46..7a32a1c 100644 --- a/modules/i3plus-pojo-base/src/main/java/cn/estsh/i3plus/pojo/base/bean/BaseResultBean.java +++ b/modules/i3plus-pojo-base/src/main/java/cn/estsh/i3plus/pojo/base/bean/BaseResultBean.java @@ -3,6 +3,7 @@ package cn.estsh.i3plus.pojo.base.bean; import cn.estsh.i3plus.pojo.base.common.Pager; import cn.estsh.i3plus.pojo.base.enumutil.ResourceEnumUtil; import io.swagger.annotations.ApiParam; +import lombok.Data; import java.util.List; import java.util.Map; diff --git a/modules/i3plus-pojo-base/src/main/java/cn/estsh/i3plus/pojo/base/enumutil/BlockReportEnumUtil.java b/modules/i3plus-pojo-base/src/main/java/cn/estsh/i3plus/pojo/base/enumutil/BlockReportEnumUtil.java index 9d33da8..80627d7 100644 --- a/modules/i3plus-pojo-base/src/main/java/cn/estsh/i3plus/pojo/base/enumutil/BlockReportEnumUtil.java +++ b/modules/i3plus-pojo-base/src/main/java/cn/estsh/i3plus/pojo/base/enumutil/BlockReportEnumUtil.java @@ -425,16 +425,16 @@ public class BlockReportEnumUtil { GT_EQUAL(2, ">=", "大于等于"), LT(3, "<", "小于等于"), LT_EQUAL(4, "<=", "小于等于"), - LIKE(5, "like", "模糊"), - LIKE_LEFT(6, "like", "左模糊"), - LIKE_RIGHT(7, "like", "右模糊"), + LIKE(5, "LIKE", "模糊"), + LIKE_LEFT(6, "LIKE", "左模糊"), + LIKE_RIGHT(7, "LIKE", "右模糊"), EQUAL(8, "=", "等于"), EQUAL_NOT(9, "!=", "不等于"), - AND(10, "and", "AND"), - OR(11, "or", "OR"), - NOT(12, "not", "NOT"), - IS_NULL(13, "is null", "IS NULL"), - IS_NOT_NULL(14, "is not null", "IS NOT NULL"); + AND(10, "AND", "AND"), + OR(11, "OR", "OR"), + NOT(12, "NOT", "NOT"), + IS_NULL(13, "IS NULL", "IS NULL"), + IS_NOT_NULL(14, "IS NOT NULL", "IS NOT NULL"); private int value; private String name; @@ -461,14 +461,13 @@ public class BlockReportEnumUtil { return name; } - public static String valueOf(int val) { - String tmp = null; + public static HQL_WHERE valueOf(int val) { for (int i = 0; i < values().length; i++) { if (values()[i].value == val) { - tmp = values()[i].getName(); + return values()[i]; } } - return tmp; + return null; } public static int descOf(String desc) { @@ -516,14 +515,14 @@ public class BlockReportEnumUtil { return name; } - public static String valueOf(int val) { - String tmp = null; + public static HQL_REF valueOf(int val) { + HQL_REF tmp = null; for (int i = 0; i < values().length; i++) { if (values()[i].value == val) { - tmp = values()[i].getName(); + return values()[i]; } } - return tmp; + return null; } public static int descOf(String desc) { @@ -584,6 +583,84 @@ public class BlockReportEnumUtil { return tmp; } + public static HQL_AGGREGATION valueOf(Integer val) { + if(val != null){ + for (int i = 0; i < values().length; i++) { + if (values()[i].value == val.intValue()) { + return values()[i]; + } + } + } + return null; + } + + + public static int descOf(String desc) { + int tmp = 1; + for (int i = 0; i < values().length; i++) { + if (values()[i].name.equals(desc)) { + tmp = values()[i].value; + } + } + return tmp; + } + } + + @JsonFormat(shape = JsonFormat.Shape.OBJECT) + public enum HQL_ATTR_DATA_TYPE{ + + SHOW(1, "show", "显示"), + WHERE(2, "where", "查询"), + GROUP(3, "group", "分组"), + AGGREGATION(4, "聚合", "聚合"); + + private int value; + private String name; + private String description; + + HQL_ATTR_DATA_TYPE() { + } + + HQL_ATTR_DATA_TYPE(int value, String name, String description) { + this.value = value; + this.name = name; + this.description = description; + } + + public int getValue() { + return value; + } + + public String getDescription() { + return description; + } + + public String getName() { + return name; + } + + public static String valueOf(int val) { + String tmp = null; + for (int i = 0; i < values().length; i++) { + if (values()[i].value == val) { + tmp = values()[i].getName(); + } + } + return tmp; + } + + public static HQL_ATTR_DATA_TYPE valueOf(Integer val) { + if(val != null){ + for (int i = 0; i < values().length; i++) { + if (values()[i].value == val.intValue()) { + return values()[i]; + } + } + } + return null; + } + + public static int descOf(String desc) { int tmp = 1; for (int i = 0; i < values().length; i++) { diff --git a/modules/i3plus-pojo-base/src/main/java/cn/estsh/i3plus/pojo/base/enumutil/CommonEnumUtil.java b/modules/i3plus-pojo-base/src/main/java/cn/estsh/i3plus/pojo/base/enumutil/CommonEnumUtil.java index 7c21d8c..17db269 100644 --- a/modules/i3plus-pojo-base/src/main/java/cn/estsh/i3plus/pojo/base/enumutil/CommonEnumUtil.java +++ b/modules/i3plus-pojo-base/src/main/java/cn/estsh/i3plus/pojo/base/enumutil/CommonEnumUtil.java @@ -95,14 +95,13 @@ public class CommonEnumUtil { return null; } - public static String codeOfDescription(String code) { - String tmp = null; + public static SOFT_TYPE codeOfDescription(String code) { for (int i = 0; i < values().length; i++) { if (values()[i].code.equals(code)) { - tmp = values()[i].description; + return values()[i]; } } - return tmp; + return null; } } diff --git a/modules/i3plus-pojo-model/src/main/java/cn/estsh/i3plus/pojo/model/common/ClassFieldModel.java b/modules/i3plus-pojo-model/src/main/java/cn/estsh/i3plus/pojo/model/common/ClassFieldModel.java index 5b6eab2..5278ac4 100644 --- a/modules/i3plus-pojo-model/src/main/java/cn/estsh/i3plus/pojo/model/common/ClassFieldModel.java +++ b/modules/i3plus-pojo-model/src/main/java/cn/estsh/i3plus/pojo/model/common/ClassFieldModel.java @@ -1,10 +1,15 @@ package cn.estsh.i3plus.pojo.model.common; +import cn.estsh.i3plus.pojo.base.annotation.RefPojo; +import com.fasterxml.jackson.databind.annotation.JsonSerialize; +import com.fasterxml.jackson.databind.ser.std.ToStringSerializer; import io.swagger.annotations.ApiParam; +import lombok.Data; import lombok.Getter; import lombok.Setter; import lombok.ToString; +import javax.persistence.Column; import java.io.Serializable; /** @@ -14,9 +19,7 @@ import java.io.Serializable; * @CreateDate : 2018-12-29 15:17 * @Modify: **/ -@Getter -@Setter -@ToString +@Data public class ClassFieldModel implements Serializable { @ApiParam(value ="包名") @@ -31,6 +34,15 @@ public class ClassFieldModel implements Serializable { @ApiParam(value ="属性名") private String fieldName; + @ApiParam(value ="属性别名") + private String fieldNameAlias; + @ApiParam(value ="属性描述") private String fieldDesc; + + @Column(name="AGGREGATION_TYPE") + @ApiParam(value ="聚合ID") + @JsonSerialize(using = ToStringSerializer.class) + private Long aggregationId; + } diff --git a/modules/i3plus-pojo-model/src/main/java/cn/estsh/i3plus/pojo/model/common/ClassModel.java b/modules/i3plus-pojo-model/src/main/java/cn/estsh/i3plus/pojo/model/common/ClassModel.java index 1ad7bc8..73d61dd 100644 --- a/modules/i3plus-pojo-model/src/main/java/cn/estsh/i3plus/pojo/model/common/ClassModel.java +++ b/modules/i3plus-pojo-model/src/main/java/cn/estsh/i3plus/pojo/model/common/ClassModel.java @@ -1,6 +1,9 @@ package cn.estsh.i3plus.pojo.model.common; +import com.fasterxml.jackson.databind.annotation.JsonSerialize; +import com.fasterxml.jackson.databind.ser.std.ToStringSerializer; import io.swagger.annotations.ApiParam; +import lombok.Data; import lombok.Getter; import lombok.Setter; import lombok.ToString; @@ -15,9 +18,7 @@ import java.util.List; * @CreateDate : 2018-12-29 15:17 * @Modify: **/ -@Getter -@Setter -@ToString +@Data public class ClassModel implements Serializable { @ApiParam(value ="服务ID") @@ -26,6 +27,13 @@ public class ClassModel implements Serializable { @ApiParam(value ="服务ID") private String serverName; + @ApiParam(value ="服务对象ID") + @JsonSerialize(using = ToStringSerializer.class) + private Long serverPojoId; + + @ApiParam(value ="服务对象别名") + private String serverPojoNameAlias; + @ApiParam(value ="包名") private String packageName; diff --git a/modules/i3plus-pojo-model/src/main/java/cn/estsh/i3plus/pojo/model/report/TemplateModel.java b/modules/i3plus-pojo-model/src/main/java/cn/estsh/i3plus/pojo/model/report/TemplateModel.java index 7a70e01..361636c 100644 --- a/modules/i3plus-pojo-model/src/main/java/cn/estsh/i3plus/pojo/model/report/TemplateModel.java +++ b/modules/i3plus-pojo-model/src/main/java/cn/estsh/i3plus/pojo/model/report/TemplateModel.java @@ -1,8 +1,7 @@ package cn.estsh.i3plus.pojo.model.report; -import cn.estsh.i3plus.pojo.report.bean.BrTemplate; - -import java.util.List; +import io.swagger.annotations.ApiParam; +import lombok.Data; /** * @Description : @@ -11,6 +10,15 @@ import java.util.List; * @CreateDate : 2019-01-20 14:05 * @Modify: **/ +@Data public class TemplateModel { + @ApiParam("执行 HQL ") + private String hql; + + @ApiParam("执行 HQL 参数名称 ") + private String[] paramName; + + @ApiParam("执行 HQL 参数值 ") + private Object[] paramValue; } diff --git a/modules/i3plus-pojo-platform/src/main/java/cn/estsh/i3plus/pojo/platform/bean/SysRefUserRole.java b/modules/i3plus-pojo-platform/src/main/java/cn/estsh/i3plus/pojo/platform/bean/SysRefUserRole.java index f28536b..223afa8 100644 --- a/modules/i3plus-pojo-platform/src/main/java/cn/estsh/i3plus/pojo/platform/bean/SysRefUserRole.java +++ b/modules/i3plus-pojo-platform/src/main/java/cn/estsh/i3plus/pojo/platform/bean/SysRefUserRole.java @@ -30,7 +30,6 @@ import javax.persistence.Table; @Api(value="关系-用户角色",description = "关系-用户角色") public class SysRefUserRole extends BaseBean { - private static final long serialVersionUID = 1L; @Column(name="USER_ID") @ApiParam(value ="用户ID" , example = "-1") diff --git a/modules/i3plus-pojo-platform/src/main/java/cn/estsh/i3plus/pojo/platform/bean/SysUserInfo.java b/modules/i3plus-pojo-platform/src/main/java/cn/estsh/i3plus/pojo/platform/bean/SysUserInfo.java index 5719306..7ac1d95 100644 --- a/modules/i3plus-pojo-platform/src/main/java/cn/estsh/i3plus/pojo/platform/bean/SysUserInfo.java +++ b/modules/i3plus-pojo-platform/src/main/java/cn/estsh/i3plus/pojo/platform/bean/SysUserInfo.java @@ -3,9 +3,6 @@ package cn.estsh.i3plus.pojo.platform.bean; import cn.estsh.i3plus.pojo.base.annotation.AnnoOutputColumn; import cn.estsh.i3plus.pojo.base.bean.BaseBean; import cn.estsh.i3plus.pojo.base.bean.BaseConstWords; -import cn.estsh.i3plus.pojo.base.enumutil.CommonEnumUtil; -import cn.estsh.i3plus.pojo.base.enumutil.ImppEnumUtil; -import com.fasterxml.jackson.annotation.JsonIgnore; import com.fasterxml.jackson.databind.annotation.JsonSerialize; import com.fasterxml.jackson.databind.ser.std.ToStringSerializer; import io.swagger.annotations.Api; diff --git a/modules/i3plus-pojo-report/src/main/java/cn/estsh/i3plus/pojo/report/bean/BrPojoAttr.java b/modules/i3plus-pojo-report/src/main/java/cn/estsh/i3plus/pojo/report/bean/BrPojoAttr.java index 08f2865..9c0fac3 100644 --- a/modules/i3plus-pojo-report/src/main/java/cn/estsh/i3plus/pojo/report/bean/BrPojoAttr.java +++ b/modules/i3plus-pojo-report/src/main/java/cn/estsh/i3plus/pojo/report/bean/BrPojoAttr.java @@ -36,13 +36,22 @@ public class BrPojoAttr extends BaseBean { private Long templateId; @Column(name="SERVER_ID") - @ApiParam(value ="服务编号",example = "-1") + @ApiParam(value ="服务ID",example = "-1") private Integer serverId; + @Column(name="POJO_ID") + @ApiParam(value ="模板对象ID" ,example = "-1") + @JsonSerialize(using = ToStringSerializer.class) + private Long pojoId; + @Column(name="POJO_NAME") @ApiParam(value ="对象名称") private String pojoName; + @Column(name="PACKAGE_NAME_RDD") + @ApiParam(value ="主服务对象包名称" , access ="服务对象包名称") + private String packageNameRdd; + @Column(name="POJO_NAME_ALIAS") @ApiParam(value ="对象别名") private String pojoNameAlias; @@ -71,10 +80,23 @@ public class BrPojoAttr extends BaseBean { @ApiParam(value ="聚合类型",example = "-1") private Integer aggregationType; + @Column(name="AGGREGATION_ID") + @ApiParam(value ="聚合类型",example = "-1") + @JsonSerialize(using = ToStringSerializer.class) + private Long aggregationId; + @Column(name="ATTR_SORT") @ApiParam(value ="字段排序") private Integer attrSort; + @Column(name="ATTR_DATA_SORT") + @ApiParam(value ="字段排序") + private Integer attrDataSort; + + @Column(name="ATTR_STYLE") + @ApiParam(value ="字段样式") + private Integer attrStyle; + @Column(name="ATTR_DEFAULT_VALUE") @ApiParam(value ="属性默认值") private String attrDefaultValue; diff --git a/modules/i3plus-pojo-report/src/main/java/cn/estsh/i3plus/pojo/report/bean/BrRefPojo.java b/modules/i3plus-pojo-report/src/main/java/cn/estsh/i3plus/pojo/report/bean/BrRefPojo.java index 05b6a68..ae634ed 100644 --- a/modules/i3plus-pojo-report/src/main/java/cn/estsh/i3plus/pojo/report/bean/BrRefPojo.java +++ b/modules/i3plus-pojo-report/src/main/java/cn/estsh/i3plus/pojo/report/bean/BrRefPojo.java @@ -30,15 +30,19 @@ import javax.persistence.Table; @Api(value="对象关系",description = "对象关系") public class BrRefPojo extends BaseBean { - @Column(name="MASTER_TEMPLATE_ID") + @Column(name="TEMPLATE_ID") @ApiParam(value ="模板编号" ,example = "-1") @JsonSerialize(using = ToStringSerializer.class) - private Long masterTemplateId; + private Long templateId; @Column(name="REF_TYPE") @ApiParam(value ="关系类型") private Integer refType; + @Column(name="REF_SORT") + @ApiParam(value ="关系排序") + private Integer refSort; + @Column(name="MASTER_SERVER_ID") @ApiParam(value ="主服务编号" ,example = "-1") private Integer masterServerId; diff --git a/modules/i3plus-pojo-report/src/main/java/cn/estsh/i3plus/pojo/report/bean/BrRefServerPojo.java b/modules/i3plus-pojo-report/src/main/java/cn/estsh/i3plus/pojo/report/bean/BrRefServerPojo.java index 1d765cd..f6bc656 100644 --- a/modules/i3plus-pojo-report/src/main/java/cn/estsh/i3plus/pojo/report/bean/BrRefServerPojo.java +++ b/modules/i3plus-pojo-report/src/main/java/cn/estsh/i3plus/pojo/report/bean/BrRefServerPojo.java @@ -13,6 +13,8 @@ import org.hibernate.annotations.DynamicUpdate; import javax.persistence.Column; import javax.persistence.Entity; import javax.persistence.Table; +import javax.persistence.Transient; +import java.util.List; /** * @Description : @@ -71,9 +73,13 @@ public class BrRefServerPojo extends BaseBean { @ApiParam(value ="主对象别名") private String masterPojoNameAlias; + @Column(name="MASTER_POJO_NAME_DESC") + @ApiParam(value ="主对象中文名称") + private String masterPojoNameDesc; + @Column(name="MASTER_POJO_NAME_ATTR_NAME") @ApiParam(value ="主对象属性名称" ) - private String masterPojoAttName; + private String masterPojoAttrName; @Column(name="SECONDARY_SERVER_ID") @ApiParam(value ="主服务编号") @@ -81,7 +87,7 @@ public class BrRefServerPojo extends BaseBean { @Column(name="SECONDARY_SERVER_NAME") @ApiParam(value ="主服务编号") - private Integer secondaryServerName; + private String secondaryServerName; @Column(name="SECONDARY_POJO_NAME") @ApiParam(value ="副对象名称") @@ -95,8 +101,15 @@ public class BrRefServerPojo extends BaseBean { @ApiParam(value ="副对象别名" ) private String secondaryPojoNameAlias; + @Column(name="SECONDARY_POJO_NAME_DESC") + @ApiParam(value ="副对象中文名称") + private String secondaryPojoNameDesc; + @Column(name="SECONDARY_POJO_ATTR_NAME") @ApiParam(value ="副对象属性名称") private String secondaryPojoAttrName; + @Transient + @ApiParam(value ="模板服务对象属性") + private List pojoAttrList; } diff --git a/modules/i3plus-pojo-report/src/main/java/cn/estsh/i3plus/pojo/report/bean/BrTemplate.java b/modules/i3plus-pojo-report/src/main/java/cn/estsh/i3plus/pojo/report/bean/BrTemplate.java index 36fc139..07dc0f3 100644 --- a/modules/i3plus-pojo-report/src/main/java/cn/estsh/i3plus/pojo/report/bean/BrTemplate.java +++ b/modules/i3plus-pojo-report/src/main/java/cn/estsh/i3plus/pojo/report/bean/BrTemplate.java @@ -26,7 +26,7 @@ import java.util.List; @DynamicInsert @DynamicUpdate @EqualsAndHashCode(callSuper = true) -@Table(name="BR_CUSTOM_HQL") +@Table(name="BR_TEMPLATE") @Api(value="报表模板",description = "报表模板") public class BrTemplate extends BaseBean { @@ -54,6 +54,10 @@ public class BrTemplate extends BaseBean { @ApiParam(value ="对象数量" , example ="0" , access ="权限模块数量") private Integer numServer; + @Column(name="TEMPLATE_SERVER_ID_LIST",columnDefinition = "TEXT") + @ApiParam(value ="数据服务ID集合" , access ="服务名称") + private String templateServerIdList; + @Column(name="TEMPLATE_SERVER_NAMES_RDD",columnDefinition = "TEXT") @ApiParam(value ="服务名称" , access ="服务名称") private String templateServerNamesRdd; @@ -111,6 +115,11 @@ public class BrTemplate extends BaseBean { private List serverPojoRefList; @Transient + @ApiParam(value ="模板服务对象关联属性") + private List pojoAttrList; + + + @Transient @ApiParam(value ="模板服务对象查询条件") private List pojoAttrWhereList; diff --git a/modules/i3plus-pojo-report/src/main/java/cn/estsh/i3plus/pojo/report/sqlpack/ReportHqlPack.java b/modules/i3plus-pojo-report/src/main/java/cn/estsh/i3plus/pojo/report/sqlpack/ReportHqlPack.java index 5a911a5..c434e19 100644 --- a/modules/i3plus-pojo-report/src/main/java/cn/estsh/i3plus/pojo/report/sqlpack/ReportHqlPack.java +++ b/modules/i3plus-pojo-report/src/main/java/cn/estsh/i3plus/pojo/report/sqlpack/ReportHqlPack.java @@ -5,6 +5,7 @@ import cn.estsh.i3plus.pojo.base.tool.HqlPack; import cn.estsh.i3plus.pojo.report.bean.BrElement; import cn.estsh.i3plus.pojo.report.bean.BrLayout; import cn.estsh.i3plus.pojo.report.bean.BrMenu; +import cn.estsh.i3plus.pojo.report.bean.BrTemplate; import org.apache.commons.lang3.StringUtils; /** @@ -69,6 +70,25 @@ public class ReportHqlPack { } /** + * 目录查询封装 + * @param template + * @return + */ + public static String packHqlBrTemplate(BrTemplate template){ + StringBuffer result = new StringBuffer(); + + // 查询参数封装 + HqlPack.getNumEqualPack(template.getTemplateType(),"templateType",result); + HqlPack.getNumEqualPack(template.getTemplateStatus(),"templateStatus",result); + HqlPack.getStringLikerPack(template.getName(),"name",result); + + // 添加默认排序 + HqlPack.getOrderDefault(template); + + return result.toString(); + } + + /** * 报表元素查询 * @param brElement * @return diff --git a/modules/i3plus-pojo-report/src/main/java/cn/estsh/i3plus/pojo/report/sqlpack/TemplateHqlPack.java b/modules/i3plus-pojo-report/src/main/java/cn/estsh/i3plus/pojo/report/sqlpack/TemplateHqlPack.java index 1e6911b..2da95c0 100644 --- a/modules/i3plus-pojo-report/src/main/java/cn/estsh/i3plus/pojo/report/sqlpack/TemplateHqlPack.java +++ b/modules/i3plus-pojo-report/src/main/java/cn/estsh/i3plus/pojo/report/sqlpack/TemplateHqlPack.java @@ -1,5 +1,19 @@ package cn.estsh.i3plus.pojo.report.sqlpack; +import cn.estsh.i3plus.pojo.base.bean.BaseResultBean; +import cn.estsh.i3plus.pojo.base.enumutil.BlockReportEnumUtil; +import cn.estsh.i3plus.pojo.base.enumutil.ResourceEnumUtil; +import cn.estsh.i3plus.pojo.model.report.TemplateModel; +import cn.estsh.i3plus.pojo.report.bean.BrPojoAttr; +import cn.estsh.i3plus.pojo.report.bean.BrRefServerPojo; +import cn.estsh.i3plus.pojo.report.bean.BrTemplateCustomHql; +import com.alibaba.fastjson.JSON; +import org.apache.commons.lang3.StringUtils; +import org.slf4j.Logger; +import org.slf4j.LoggerFactory; + +import java.util.*; + /** * @Description : 报表对象封装 * @Reference : @@ -9,5 +23,400 @@ package cn.estsh.i3plus.pojo.report.sqlpack; **/ public class TemplateHqlPack { + private static final Logger LOGGER = LoggerFactory.getLogger(TemplateHqlPack.class); + + /** + * 拼接查询字段 + * + * @param attrs + * @return + */ + public static String getSelectHqlColumn(List attrs) { + StringBuffer result = new StringBuffer(); + BlockReportEnumUtil.HQL_AGGREGATION aggr = null; + if (attrs != null && attrs.size() > 0) { + for (BrPojoAttr attr : attrs) { + aggr = BlockReportEnumUtil.HQL_AGGREGATION.valueOf(attr.getAggregationType()); + + // 聚合函数控制 + if (aggr == null) { + result.append("," + attr.getPojoNameAlias() + "." + attr.getAttrName()); + } else { + result.append(", " + aggr.getName() + "(" + attr.getPojoNameAlias() + "." + attr.getAttrName() + ")"); + } + + // 添加别名 + if (StringUtils.isNotBlank(attr.getAttrNameAlias())) { + result.append(" AS " + attr.getAttrNameAlias()); + } else { + result.append(" AS " + attr.getPojoNameAlias() + "_" + attr.getAttrName()); + } + } + return result.substring(result.indexOf(",") + 1, result.length()); + } + return result.toString(); + } + + /** + * 拼接分组字段 + * + * @param attrs + * @return + */ + public static String getSelectHqlGroupColumn(List attrs) { + StringBuffer result = new StringBuffer(); + BlockReportEnumUtil.HQL_AGGREGATION aggr = null; + if (attrs != null && attrs.size() > 0) { + for (BrPojoAttr attr : attrs) { + result.append("," + attr.getPojoNameAlias() + "." + attr.getAttrName()); + } + } + return result.toString(); + } + + public static StringBuffer getSelectHqlJoin(List list) { + StringBuffer hqlJoin = new StringBuffer(); + if (list != null && list.size() > 0) { + BrRefServerPojo masterPojo = list.get(0); + BrRefServerPojo pojo; + BlockReportEnumUtil.HQL_REF refType; + BlockReportEnumUtil.HQL_WHERE whereType;// 对象连接封装 + hqlJoin.append(" " + masterPojo.getMasterPojoName() + " AS " + masterPojo.getMasterPojoNameAlias()); + for (int i = 1; i < list.size(); i++) { + pojo = list.get(i); + refType = BlockReportEnumUtil.HQL_REF.valueOf(pojo.getPojoRefType()); + whereType = BlockReportEnumUtil.HQL_WHERE.valueOf(pojo.getPojoWhereType()); + if (refType != null && whereType != null) { + hqlJoin.append(" " + refType.getName()); + hqlJoin.append(" " + pojo.getMasterPojoName() + " AS " + pojo.getMasterPojoNameAlias()); + hqlJoin.append(" ON " + pojo.getMasterPojoNameAlias() + "." + pojo.getMasterPojoAttrName()); + hqlJoin.append(" " + whereType.getName() + " " + pojo.getSecondaryPojoNameAlias() + "." + pojo.getSecondaryPojoAttrName()); + } else { + LOGGER.info(""); + } + } + } + return hqlJoin; + } + + public static String getSelectHqlWhere(List attrs, Map map) { + StringBuffer hqlWhere = new StringBuffer(); + if (attrs != null && attrs.size() > 0) { + BlockReportEnumUtil.HQL_WHERE whereType = null; + for (BrPojoAttr attr : attrs) { + whereType = BlockReportEnumUtil.HQL_WHERE.valueOf(attr.getAttrRefType()); + if (whereType != null) { + hqlWhere.append(" AND " + attr.getPojoNameAlias() + "." + attr.getAttrName()); + if (BlockReportEnumUtil.HQL_WHERE.LIKE.equals(whereType)) { // like %% + hqlWhere.append(" " + whereType.getName() + " :" + attr.getPojoNameAlias() + "_" + attr.getAttrName()); + map.put(attr.getPojoNameAlias() + "_" + attr.getAttrName(), "%" + attr.getAttrDefaultValue() + "%"); + } else if (BlockReportEnumUtil.HQL_WHERE.LIKE_LEFT.equals(whereType)) { + hqlWhere.append(" " + whereType.getName() + " :" + attr.getPojoNameAlias() + "_" + attr.getAttrName()); + map.put(attr.getPojoNameAlias() + "_" + attr.getAttrName(), "%" + attr.getAttrDefaultValue()); + } else if (BlockReportEnumUtil.HQL_WHERE.LIKE_RIGHT.equals(whereType)) { + hqlWhere.append(" " + whereType.getName() + " :" + attr.getPojoNameAlias() + "_" + attr.getAttrName()); + map.put(attr.getPojoNameAlias() + "_" + attr.getAttrName(), attr.getAttrDefaultValue() + "%"); + } + } else { + LOGGER.info(""); + } + } + } + return hqlWhere.toString(); + } + + public static String getSelectHqlWhereCustomHql(List customList) { + StringBuffer hqlWhere = new StringBuffer(); + if (customList != null && customList.size() > 0) { + for (BrTemplateCustomHql hql : customList) { + if(hql.getDataType().intValue() == BlockReportEnumUtil.HQL_ATTR_DATA_TYPE.WHERE.getValue()){ + hqlWhere.append(" " + hql.getCustomContent()); + } + } + } + return hqlWhere.toString(); + } + + public static String getSelectHqlWhereGroup(List customList) { + StringBuffer hql = new StringBuffer(); + if (customList != null && customList.size() > 0) { + hql.append(" GROUP BY "); + for (BrPojoAttr attr : customList) { + hql.append(" " + attr.getPojoNameAlias() + "." + attr.getAttrName()); + } + } + return hql.toString(); + } + + /** + * 拼接查询语句 + * + * @param list + * @return + */ + public static TemplateModel getTemplateModel(List list,BrTemplateCustomHql hqlList) { + if (list != null && list.size() > 0) { + TemplateModel model = new TemplateModel(); + StringBuffer result = new StringBuffer(); // 查询语句主体 + List attrShowList = new ArrayList<>(); // 查询列的属性 + List attrWhereList = new ArrayList<>(); // 查询列的属性 + List attrGroupList = new ArrayList<>(); // 查询列的属性 + Map paramMap = new HashMap<>(); + List tmpList = null; + + // list 先排序下 + list.sort(Comparator.comparing(BrRefServerPojo::getPojoSort)); + + // 对象属性封装 + for (BrRefServerPojo refServerPojo : list) { + tmpList = refServerPojo.getPojoAttrList(); + if (tmpList != null && tmpList.size() > 0) { + for (BrPojoAttr attr : tmpList) { + if (BlockReportEnumUtil.HQL_ATTR_DATA_TYPE.SHOW.getValue() == attr.getDataType().intValue() + || BlockReportEnumUtil.HQL_ATTR_DATA_TYPE.AGGREGATION.getValue() == attr.getDataType().intValue()) { + attrShowList.add(attr); + } else if (BlockReportEnumUtil.HQL_ATTR_DATA_TYPE.WHERE.getValue() == attr.getDataType().intValue()) { + attrWhereList.add(attr); + } else if (BlockReportEnumUtil.HQL_ATTR_DATA_TYPE.GROUP.getValue() == attr.getDataType().intValue()) { + attrGroupList.add(attr); + } + } + } + } + attrShowList.sort(Comparator.comparing(BrPojoAttr::getAttrSort)); + attrGroupList.sort(Comparator.comparing(BrPojoAttr::getAttrSort)); + attrWhereList.sort(Comparator.comparing(BrPojoAttr::getAttrSort)); + // HQL 拼接 + + result.append(" SELECT "); + result.append(getSelectHqlColumn(attrShowList)); + result.append(" FROM "); + result.append(getSelectHqlJoin(list)); + result.append(" WHERE 1=1 "); + result.append(getSelectHqlWhere(attrWhereList, paramMap)); + result.append(getSelectHqlWhereGroup(attrGroupList)); + if(hqlList != null){ + result.append(getSelectHqlWhereCustomHql(Arrays.asList(hqlList))); + } + + model.setHql(result.toString()); + model.setParamName(paramMap.keySet().stream().toArray(String[]::new)); + model.setParamValue(paramMap.values().stream().toArray(Object[]::new)); + + return model; + } + return null; + } + + public static List> getResultListTable(BaseResultBean bean,TemplateModel model) { + List> result = new ArrayList<>(); + Map line = null; + if (bean != null && bean.isSuccess() && model != null) { + List list = bean.getResultList(); + if (list != null && list.size() > 0) { + List columnList = getSelectHqlColumnAs(model.getHql()); + if (columnList != null && columnList.size() > 0) { + if(columnList.size() == 1){ + for (Object value : list) { + line = new HashMap<>(); + line.put(columnList.get(0), value); + result.add(line); + } + }else { + for (List rows : list) { + line = new HashMap<>(); + for (int i = 0; i < rows.size(); i++) { + line.put(columnList.get(i), rows.get(i)); + } + result.add(line); + } + } + } else { + LOGGER.info("无法解析HQL 列属性"); + } + } + } + return result; + } + + public static List getSelectHqlColumnAs(String hql) { + List result = new ArrayList<>(); + // hql 中必须包含 select 和 from + if (StringUtils.isNotBlank(hql) && + hql.indexOf("SELECT") != -1 && hql.indexOf("FROM") != -1) { + + hql = hql.substring(hql.indexOf("SELECT") + 1, hql.indexOf("FROM")); + if (StringUtils.isNotBlank(hql)) { + String[] columnArray = hql.split(","); + if (columnArray != null && columnArray.length > 0) { + for (String column : columnArray) { + result.add(column.substring(column.indexOf("AS") + 2, column.length()).trim()); + } + } + } + } + return result; + } + + public static Map getResultMap(BaseResultBean bean,TemplateModel model){ + Map result = new HashMap<>(); + if(bean != null && model != null){ + if (ResourceEnumUtil.MESSAGE.SUCCESS.getCode().equals(bean.getCode())) { + if(StringUtils.isNotBlank(model.getHql())){ // 有HQL + String hql = model.getHql().substring(0,model.getHql().indexOf("FROM")); + System.out.println(hql); + } + }else { + LOGGER.info("请求处理失败"); + } + } + return result; + } + + + public static void main(String[] args) { + List suList = new ArrayList<>(); + List suiList = new ArrayList<>(); + List surList = new ArrayList<>(); + List pojoList = new ArrayList<>(); + +// ------------------------------------ SysUser Attr ------------------------------------ + BrPojoAttr suAttr = new BrPojoAttr(); + suAttr.setAttrSort(0); + suAttr.setPojoNameAlias("su"); + suAttr.setAttrName("userInfoId"); + suAttr.setAttrNameAlias("德玛西亚"); + suAttr.setDataType(BlockReportEnumUtil.HQL_ATTR_DATA_TYPE.SHOW.getValue()); + + BrPojoAttr suAttr1 = new BrPojoAttr(); + suAttr1.setAttrSort(1); + suAttr1.setPojoNameAlias("su"); + suAttr1.setAttrName("userName"); + suAttr1.setDataType(BlockReportEnumUtil.HQL_ATTR_DATA_TYPE.SHOW.getValue()); + + BrPojoAttr suAttr2 = new BrPojoAttr(); + suAttr2.setAttrSort(2); + suAttr2.setPojoNameAlias("su"); + suAttr2.setAttrName("userLoginName"); + suAttr2.setDataType(BlockReportEnumUtil.HQL_ATTR_DATA_TYPE.SHOW.getValue()); + + BrPojoAttr suAttr3 = new BrPojoAttr(); + suAttr3.setAttrSort(3); + suAttr3.setPojoNameAlias("su"); + suAttr3.setAttrName("userEmpNo"); + suAttr3.setDataType(BlockReportEnumUtil.HQL_ATTR_DATA_TYPE.SHOW.getValue()); + + suList.add(suAttr); + suList.add(suAttr1); + suList.add(suAttr2); + suList.add(suAttr3); +// ------------------------------------ SysUserInfo Attr ------------------------------------ + + BrPojoAttr suiAttr = new BrPojoAttr(); + suiAttr.setAttrSort(0); + suiAttr.setPojoNameAlias("sui"); + suiAttr.setAttrName("name"); + suiAttr.setDataType(BlockReportEnumUtil.HQL_ATTR_DATA_TYPE.SHOW.getValue()); + + BrPojoAttr suiAttr1 = new BrPojoAttr(); + suiAttr1.setAttrSort(1); + suiAttr1.setPojoNameAlias("sui"); + suiAttr1.setAttrName("userEmployeeType"); + suiAttr1.setDataType(BlockReportEnumUtil.HQL_ATTR_DATA_TYPE.SHOW.getValue()); + + + BrPojoAttr suiAttr2 = new BrPojoAttr(); + suiAttr2.setAttrSort(2); + suiAttr2.setPojoNameAlias("sui"); + suiAttr2.setAttrName("userBornDate"); + suiAttr2.setDataType(BlockReportEnumUtil.HQL_ATTR_DATA_TYPE.SHOW.getValue()); + + + BrPojoAttr suiAttr3 = new BrPojoAttr(); + suiAttr3.setAttrSort(3); + suiAttr3.setPojoNameAlias("sui"); + suiAttr3.setAttrName("userSchool"); + suiAttr3.setDataType(BlockReportEnumUtil.HQL_ATTR_DATA_TYPE.SHOW.getValue()); + + BrPojoAttr suiAttr4 = new BrPojoAttr(); + suiAttr4.setAttrSort(4); + suiAttr4.setPojoNameAlias("sui"); + suiAttr4.setAttrName("userEmpNo"); + suiAttr4.setAttrNameAlias("userEmpNo"); + suiAttr4.setAttrDefaultValue("英雄联盟"); + suiAttr4.setAttrRefType(BlockReportEnumUtil.HQL_WHERE.LIKE.getValue()); + suiAttr4.setDataType(BlockReportEnumUtil.HQL_ATTR_DATA_TYPE.WHERE.getValue()); + + suiList.add(suiAttr); + suiList.add(suiAttr1); + suiList.add(suiAttr2); + suiList.add(suiAttr3); + suiList.add(suiAttr4); +// ------------------------------------ SysRefUserRole Attr ------------------------------------ + BrPojoAttr surAttr = new BrPojoAttr(); + surAttr.setAttrSort(1); + surAttr.setPojoNameAlias("sur"); + surAttr.setAttrName("id"); + surAttr.setAggregationType(BlockReportEnumUtil.HQL_AGGREGATION.COUNT.getValue()); + surAttr.setDataType(BlockReportEnumUtil.HQL_ATTR_DATA_TYPE.AGGREGATION.getValue()); + surAttr.setDataType(BlockReportEnumUtil.HQL_ATTR_DATA_TYPE.SHOW.getValue()); + + surList.add(surAttr); + +// ------------------------------------ Pojo SysUserInfo ------------------------------------ + + BrRefServerPojo suiPojo = new BrRefServerPojo(); + suiPojo.setMasterPojoName("SysUserInfo"); + suiPojo.setMasterPojoNameAlias("sui"); + suiPojo.setPojoSort(1); + suiPojo.setPojoAttrList(suiList); + +// ------------------------------------ Pojo SysUser ------------------------------------ + BrRefServerPojo suPojo = new BrRefServerPojo(); + suPojo.setMasterPojoName("SysUser"); + suPojo.setMasterPojoNameAlias("su"); + suPojo.setMasterPojoAttrName("userInfoId"); + + suPojo.setSecondaryPojoName("SysUserInfo"); + suPojo.setSecondaryPojoNameAlias("sui"); + suPojo.setSecondaryPojoAttrName("id"); + + suPojo.setPojoRefType(BlockReportEnumUtil.HQL_REF.LEFT_JOIN.getValue()); + suPojo.setPojoWhereType(BlockReportEnumUtil.HQL_WHERE.EQUAL.getValue()); + suPojo.setPojoSort(2); + suPojo.setPojoAttrList(suList); + +// ------------------------------------ Pojo SysRefUserRole ------------------------------------ + BrRefServerPojo surPojo = new BrRefServerPojo(); + surPojo.setMasterPojoName("SysRefUserRole"); + surPojo.setMasterPojoNameAlias("sur"); + surPojo.setMasterPojoAttrName("userId"); + + surPojo.setSecondaryPojoName("SysUser"); + surPojo.setSecondaryPojoNameAlias("su"); + surPojo.setSecondaryPojoAttrName("id"); + + surPojo.setPojoRefType(BlockReportEnumUtil.HQL_REF.LEFT_JOIN.getValue()); + surPojo.setPojoWhereType(BlockReportEnumUtil.HQL_WHERE.EQUAL.getValue()); + surPojo.setPojoSort(3); + surPojo.setPojoAttrList(surList); + + pojoList.add(suiPojo); + pojoList.add(suPojo); + pojoList.add(surPojo); + +// System.out.println(getSelectHqlColumn(suList)); +// System.out.println(JSON.toJSONString(getTemplateModel(pojoList))); + +// String json = "{\"code\":\"20001\",\"msg\":\"select sui.name as sui_name,su.userInfoId as 德玛西亚,sui.userEmployeeType as sui_userEmployeeType,su.userName as su_userName, count(sur.id) as sur_id,sui.userBornDate as sui_userBornDate,su.userLoginName as su_userLoginName,sui.userSchool as sui_userSchool,su.userEmpNo as su_userEmpNo from SysUserInfo as sui left join SysUser as su on su.userInfoId = sui.id left join SysRefUserRole as sur on sur.userId = su.id\",\"resultList\":[[\"管理员\",1077896159978196992,1,\"管理员\",2,\"1993-06-30\",\"admin\",\"复旦大学\",\"10001\"]],\"success\":true,\"totalCount\":0}"; +// BaseResultBean resultBean = JSON.parseObject(json,BaseResultBean.class); +// +// System.out.println(getSelectHqlColumnAs(resultBean.getMsg()));; +// +// System.out.println(resultBean.getMsg()); +// List> table = getResultListTable(resultBean); +// System.out.println(JSON.toJSONString(table)); + } + }