diff --git a/modules/i3plus-pojo-base/src/main/java/cn/estsh/i3plus/pojo/base/enumutil/BlockFormEnumUtil.java b/modules/i3plus-pojo-base/src/main/java/cn/estsh/i3plus/pojo/base/enumutil/BlockFormEnumUtil.java index b53e93c..f664549 100644 --- a/modules/i3plus-pojo-base/src/main/java/cn/estsh/i3plus/pojo/base/enumutil/BlockFormEnumUtil.java +++ b/modules/i3plus-pojo-base/src/main/java/cn/estsh/i3plus/pojo/base/enumutil/BlockFormEnumUtil.java @@ -2548,4 +2548,155 @@ public class BlockFormEnumUtil { return result; } } + + + /** + * 脚本语言类型 + * 10=Groovy, 20=Jython, 30=JavaScript, 40=Scala, 50=JRuby + */ + public enum LANGUAGE_TYPE { + GROOVY(1, "Groovy", 10), + PYTHON(2, "jython", 20), // "jython" string can not change + JS(3, "JavaScript", 30); + // 下面这2种语言没人会写,暂不支持 + //SCALA(40,"scala"), + //JRUBY(50,"jruby"); + + private int index; + private String description; + private int value; + + LANGUAGE_TYPE(int index, String description, int value) { + this.index = index; + this.description = description; + this.value = value; + } + + public String getDescription() { + return description; + } + + public int getIndex() { + return this.index; + } + + public int getValue() { + return value; + } + + // 根据枚举编号获取语言代码 + public static String getCodeByIndex(Integer index) { + for (BlockFormEnumUtil.LANGUAGE_TYPE languageType : BlockFormEnumUtil.LANGUAGE_TYPE.values()) { + if (languageType.getValue() == index) { + return languageType.getDescription(); + } + } + + return null; + } + } + + /** + * 系统参数类型 + * 1.SYSTEM:系统参数 + * 2.BUSI:业务参数 + */ + @JsonFormat(shape = JsonFormat.Shape.OBJECT) + public enum BLOCK_FORM_CONFIG_TYPE { + + SYSTEM(10, "系统参数", "系统参数"), + BUSI(20, "业务参数", "业务参数"); + + private int value; + private String name; + private String description; + + BLOCK_FORM_CONFIG_TYPE(int value, String name, String description) { + this.value = value; + this.name = name; + this.description = description; + } + + public int getValue() { + return value; + } + + public String getName() { + return name; + } + + public String getDescription() { + return description; + } + + public static String valueOfCode(int val) { + String tmp = null; + for (int i = 0; i < values().length; i++) { + if (values()[i].value == val) { + tmp = values()[i].name; + } + } + return tmp; + } + + public static String valueOfDescription(int val) { + String tmp = null; + for (int i = 0; i < values().length; i++) { + if (values()[i].value == val) { + tmp = values()[i].description; + } + } + return tmp; + } + + public static String codeOfDescription(String code) { + String tmp = null; + for (int i = 0; i < values().length; i++) { + if (values()[i].name.equals(code)) { + tmp = values()[i].description; + } + } + return tmp; + } + } + + /** + * 脚本类型 + * 10=组件脚本,20=表单脚本,30=报表脚本,40=JOB脚本,50=其他脚本 + */ + public enum SCRIPT_TYPE { + MODUAL(10, "Modual", "组件脚本"), + FORM(20, "Form", "表单脚本"), + REPORT(30, "Report", "报表脚本"), + JOB(40, "Job", "JOB脚本"), + OTHER(50, "Other", "其他脚本"); + + private String description; + private int value; + private String code; + + SCRIPT_TYPE(int value, String code, String description) { + this.description = description; + this.value = value; + this.code = code; + } + + public String getCode() { + return this.code; + } + + public int getIndex() { + return this.value; + } + + public int getValue() { + return value; + } + + public String getDescription() { + return description; + } + } + + } diff --git a/modules/i3plus-pojo-form/src/main/java/cn/estsh/i3plus/pojo/form/bean/EngineRulePersistence.java b/modules/i3plus-pojo-form/src/main/java/cn/estsh/i3plus/pojo/form/bean/EngineRulePersistence.java new file mode 100644 index 0000000..2f6eae8 --- /dev/null +++ b/modules/i3plus-pojo-form/src/main/java/cn/estsh/i3plus/pojo/form/bean/EngineRulePersistence.java @@ -0,0 +1,54 @@ +package cn.estsh.i3plus.pojo.form.bean; + +import cn.estsh.i3plus.pojo.base.bean.BaseBean; +import io.swagger.annotations.Api; +import lombok.AllArgsConstructor; +import lombok.Data; +import lombok.EqualsAndHashCode; +import lombok.NoArgsConstructor; +import org.hibernate.annotations.DynamicInsert; +import org.hibernate.annotations.DynamicUpdate; +import org.springframework.data.annotation.Transient; + +import javax.persistence.Column; +import javax.persistence.Entity; +import javax.persistence.Lob; +import javax.persistence.Table; + +/** + * 业务规则持久化实体类 + * + * @author Rock.Yu + * @since 2019-04-16 09:27 + */ +@Data +@Entity +@DynamicInsert +@DynamicUpdate +@AllArgsConstructor +@NoArgsConstructor +@EqualsAndHashCode(callSuper = true) +@Table(name = "DROOLS_RULE_PERSISTENCE") +@Api("系统动态业务规则") +public class EngineRulePersistence extends BaseBean { + private static final long serialVersionUID = 5119552483383770556L; + // 规则调用的唯一编号,例如:WMS_RECEIVE_0001 + @Column(name = "RULE_NO", length = 50) + private String ruleNo; + // 规则的中文名称 + @Column(name = "RULE_NAME", length = 50) + private String ruleName; + // 规则的具体内容 + @Lob + @Column(name = "RULE_CONTENT", columnDefinition = "TEXT") + private String ruleContent; + // 规则的描述,包含规则的用法,参数说明等 + @Column(name = "RULE_REMARK", length = 2000) + private String ruleRemark; + // 加载好的规则引擎对象(有状态) + @Transient + private transient Object kieSession; + // 加载好的规则引擎对象(无状态) + @Transient + private transient Object statelessKieSession; +} diff --git a/modules/i3plus-pojo-form/src/main/java/cn/estsh/i3plus/pojo/form/bean/EngineScriptPersistence.java b/modules/i3plus-pojo-form/src/main/java/cn/estsh/i3plus/pojo/form/bean/EngineScriptPersistence.java new file mode 100644 index 0000000..b4b3589 --- /dev/null +++ b/modules/i3plus-pojo-form/src/main/java/cn/estsh/i3plus/pojo/form/bean/EngineScriptPersistence.java @@ -0,0 +1,80 @@ +package cn.estsh.i3plus.pojo.form.bean; + +import cn.estsh.i3plus.pojo.base.annotation.AnnoOutputColumn; +import cn.estsh.i3plus.pojo.base.bean.BaseBean; +import io.swagger.annotations.Api; +import lombok.Data; +import lombok.EqualsAndHashCode; +import lombok.NoArgsConstructor; +import org.hibernate.annotations.DynamicInsert; +import org.hibernate.annotations.DynamicUpdate; + +import javax.persistence.*; + +/** + * 脚本持久化实体类 + * + * @author Rock.Yu + * @since 2019-03-18 14:22 + */ +@Data +@Entity +@DynamicInsert +@DynamicUpdate +@NoArgsConstructor +@EqualsAndHashCode(callSuper = true) +@Inheritance(strategy = InheritanceType.JOINED) +@Table(name = "SCRIPT_PERSISTENCE", uniqueConstraints = { + @UniqueConstraint(columnNames = {"ORGANIZE_CODE", "SCRIPT_NO"}) +}) +@Api("系统动态脚本") +public class EngineScriptPersistence extends BaseBean { + private static final long serialVersionUID = 7893111140559759490L; + // 脚本调用的唯一编号,例如:WMS_PDA_0001 + @Column(name = "SCRIPT_NO", length = 50) + @AnnoOutputColumn(name = "脚本编码") + private String scriptNo; + + // 脚本的中文名称 + @Column(name = "SCRIPT_NAME", length = 50) + @AnnoOutputColumn(name = "脚本名称") + private String scriptName; + + // 10=组件脚本,20=表单脚本,30=报表脚本,40=JOB脚本,50=其他脚本 + @Column(name = "SCRIPT_TYPE") + @AnnoOutputColumn(name = "脚本类型") + private Integer scriptType; + + // 脚本编写的语言 + // 10=Groovy, 20=Jython, 30=JavaScript, 40=Scala, 50=JRuby + @Column(name = "LANGUAGE_TYPE") + @AnnoOutputColumn(name = "脚本语言") + private Integer languageType; + + // 脚本的具体内容 + @Lob + @Column(name = "SCRIPT_CONTENT", columnDefinition = "TEXT") + @AnnoOutputColumn(name = "脚本内容") + private String scriptContent; + + // 脚本的描述,包含脚本的用法,参数说明等 + @Column(name = "SCRIPT_REMARK", length = 2000) + @AnnoOutputColumn(name = "脚本描述",required = false) + private String scriptRemark; + + // 编译后的脚本内容,通过预编译加快脚本的运行速度 + @Transient + private Object compiledScript; + + // 构造方法,便于批量创建数据 + public EngineScriptPersistence(Long id, String scriptNo, String scriptName, Integer scriptType, Integer languageType, + String scriptContent, String scriptRemark) { + this.id = id; + this.scriptNo = scriptNo; + this.scriptName = scriptName; + this.scriptType = scriptType; + this.languageType = languageType; + this.scriptContent = scriptContent; + this.scriptRemark = scriptRemark; + } +} diff --git a/modules/i3plus-pojo-form/src/main/java/cn/estsh/i3plus/pojo/form/bean/EngineScriptPersistenceHistory.java b/modules/i3plus-pojo-form/src/main/java/cn/estsh/i3plus/pojo/form/bean/EngineScriptPersistenceHistory.java new file mode 100644 index 0000000..08afe58 --- /dev/null +++ b/modules/i3plus-pojo-form/src/main/java/cn/estsh/i3plus/pojo/form/bean/EngineScriptPersistenceHistory.java @@ -0,0 +1,61 @@ +package cn.estsh.i3plus.pojo.form.bean; + +import cn.estsh.i3plus.pojo.base.bean.BaseBean; +import io.swagger.annotations.Api; +import lombok.Data; +import lombok.EqualsAndHashCode; +import lombok.NoArgsConstructor; +import org.hibernate.annotations.DynamicInsert; +import org.hibernate.annotations.DynamicUpdate; + +import javax.persistence.*; + +/** + * 脚本持久化历史记录 + * + * @author jason.niu + * @since 2020-04-29 + */ +@Data +@Entity +@DynamicInsert +@DynamicUpdate +@NoArgsConstructor +@EqualsAndHashCode(callSuper = true) +@Inheritance(strategy = InheritanceType.JOINED) +@Table(name = "SCRIPT_PERSISTENCE_HISTORY") +@Api("系统动态脚本") +public class EngineScriptPersistenceHistory extends BaseBean { + + private static final long serialVersionUID = 7201021903118622899L; + // 脚本调用的唯一编号,例如:WMS_PDA_0001 + @Column(name = "SCRIPT_NO", length = 50) + private String scriptNo; + + // 脚本的中文名称 + @Column(name = "SCRIPT_NAME", length = 50) + private String scriptName; + + // 10=组件脚本,20=表单脚本,30=报表脚本,40=JOB脚本,50=其他脚本 + @Column(name = "SCRIPT_TYPE") + private Integer scriptType; + + // 脚本编写的语言 + // 10=Groovy, 20=Jython, 30=JavaScript, 40=Scala, 50=JRuby + @Column(name = "LANGUAGE_TYPE") + private Integer languageType; + + // 脚本的具体内容 + @Lob + @Column(name = "SCRIPT_CONTENT", columnDefinition = "TEXT") + private String scriptContent; + + // 脚本的描述,包含脚本的用法,参数说明等 + @Column(name = "SCRIPT_REMARK", length = 2000) + private String scriptRemark; + + // 编译后的脚本内容,通过预编译加快脚本的运行速度 + @Transient + private Object compiledScript; + +} diff --git a/modules/i3plus-pojo-form/src/main/java/cn/estsh/i3plus/pojo/form/repository/EngineScriptPersistenceHistoryRepository.java b/modules/i3plus-pojo-form/src/main/java/cn/estsh/i3plus/pojo/form/repository/EngineScriptPersistenceHistoryRepository.java new file mode 100644 index 0000000..5b7fd77 --- /dev/null +++ b/modules/i3plus-pojo-form/src/main/java/cn/estsh/i3plus/pojo/form/repository/EngineScriptPersistenceHistoryRepository.java @@ -0,0 +1,9 @@ +package cn.estsh.i3plus.pojo.form.repository; + +import cn.estsh.i3plus.pojo.base.jpa.dao.BaseRepository; +import cn.estsh.i3plus.pojo.form.bean.EngineScriptPersistenceHistory; +import org.springframework.stereotype.Repository; + +@Repository +public interface EngineScriptPersistenceHistoryRepository extends BaseRepository { +} diff --git a/modules/i3plus-pojo-form/src/main/java/cn/estsh/i3plus/pojo/form/repository/IEngineRulePersistenceRepository.java b/modules/i3plus-pojo-form/src/main/java/cn/estsh/i3plus/pojo/form/repository/IEngineRulePersistenceRepository.java new file mode 100644 index 0000000..e8788e0 --- /dev/null +++ b/modules/i3plus-pojo-form/src/main/java/cn/estsh/i3plus/pojo/form/repository/IEngineRulePersistenceRepository.java @@ -0,0 +1,23 @@ +package cn.estsh.i3plus.pojo.form.repository; + +import cn.estsh.i3plus.pojo.base.jpa.dao.BaseRepository; +import cn.estsh.i3plus.pojo.form.bean.EngineRulePersistence; +import org.springframework.stereotype.Repository; + +/** + * @Description : 规则引擎持久化类 + * @Reference : + * @Author : Rock.Yu + * @CreateDate : 2019-04-16 09:53 + * @Modify: + **/ +@Repository +public interface IEngineRulePersistenceRepository extends BaseRepository { + /** + * 按照规则编号查询规则实体 + * @param organizeCode 工厂代码 + * @param ruleNo 规则编号 + * @return 规则实体 + */ + EngineRulePersistence findByOrganizeCodeAndRuleNo(String organizeCode, String ruleNo); +} diff --git a/modules/i3plus-pojo-form/src/main/java/cn/estsh/i3plus/pojo/form/repository/IEngineScriptPersistenceRepository.java b/modules/i3plus-pojo-form/src/main/java/cn/estsh/i3plus/pojo/form/repository/IEngineScriptPersistenceRepository.java new file mode 100644 index 0000000..a66820c --- /dev/null +++ b/modules/i3plus-pojo-form/src/main/java/cn/estsh/i3plus/pojo/form/repository/IEngineScriptPersistenceRepository.java @@ -0,0 +1,40 @@ +package cn.estsh.i3plus.pojo.form.repository; + +import cn.estsh.i3plus.pojo.base.jpa.dao.BaseRepository; +import cn.estsh.i3plus.pojo.form.bean.EngineScriptPersistence; +import org.springframework.data.jpa.repository.Query; +import org.springframework.stereotype.Repository; + +import java.util.List; + +/** + * @Description : 脚本引擎持久化类 + * @Reference : + * @Author : Rock.Yu + * @CreateDate : 2019-04-16 09:53 + * @Modify: + **/ +@Repository +public interface IEngineScriptPersistenceRepository extends BaseRepository { + /** + * 按照工厂代码和脚本编号查询脚本实体对象 + * @param organizeCode 工厂代码 + * @param scriptNo 脚本编号 + * @return 脚本实体对象 + */ + EngineScriptPersistence findByOrganizeCodeAndScriptNo(String organizeCode, String scriptNo); + + /** + * 按照脚本编号查询脚本实体对象 + * @param scriptNo 脚本编号 + * @return 脚本实体对象 + */ + EngineScriptPersistence findByScriptNo(String scriptNo); + + /** + * 查找所有的脚本语言类型 + * @return 数据库中已经存在的脚本语言类型 + */ + @Query("select t.languageType from EngineScriptPersistence t group by t.organizeCode, t.languageType") + List findGroupByLanguageType(); +} diff --git a/modules/i3plus-pojo-form/src/main/java/cn/estsh/i3plus/pojo/form/sqlpack/FormHqlPack.java b/modules/i3plus-pojo-form/src/main/java/cn/estsh/i3plus/pojo/form/sqlpack/FormHqlPack.java index d913912..e22a95e 100644 --- a/modules/i3plus-pojo-form/src/main/java/cn/estsh/i3plus/pojo/form/sqlpack/FormHqlPack.java +++ b/modules/i3plus-pojo-form/src/main/java/cn/estsh/i3plus/pojo/form/sqlpack/FormHqlPack.java @@ -1,9 +1,11 @@ package cn.estsh.i3plus.pojo.form.sqlpack; +import cn.estsh.i3plus.pojo.base.bean.BaseBean; import cn.estsh.i3plus.pojo.base.bean.DdlPackBean; import cn.estsh.i3plus.pojo.base.enumutil.CommonEnumUtil; import cn.estsh.i3plus.pojo.base.tool.DdlPreparedPack; import cn.estsh.i3plus.pojo.base.tool.HqlPack; +import cn.estsh.i3plus.pojo.base.util.StringUtil; import cn.estsh.i3plus.pojo.form.bean.*; import org.apache.commons.lang3.StringUtils; @@ -421,4 +423,58 @@ public final class FormHqlPack { return ddlPackBean; } + /** + * 查询脚本持久化 查询条件封装 + * + * @return + */ + public static DdlPackBean packEngineScriptPersistence(EngineScriptPersistence scriptPersistence) { + DdlPackBean packBean = new DdlPackBean(); + DdlPreparedPack.getStringLikerPack(scriptPersistence.getScriptNo(), "scriptNo", packBean); + DdlPreparedPack.getStringRightLikerPack(scriptPersistence.getScriptName(), "scriptName", packBean); + DdlPreparedPack.getNumEqualPack(scriptPersistence.getScriptType(), "scriptType", packBean); + DdlPreparedPack.getNumEqualPack(scriptPersistence.getLanguageType(), "languageType", packBean); + + getStringBuilderPack(scriptPersistence, packBean); + + DdlPreparedPack.getOrderByPack(new Object[]{2}, new String[]{"createDatetime"}, packBean); + return packBean; + } + + /** + * 封装公用查询参数 + * + * @param bean 实体对象 + * @param hqlStr 查询语句 + * @return 封装完成的查询语句 + */ + public static DdlPackBean getStringBuilderPack(BaseBean bean, DdlPackBean hqlStr) { + + // 判断工厂代码是否为空 + if (StringUtils.isNotBlank(bean.getOrganizeCode())) { + DdlPreparedPack.getStringEqualPack(bean.getOrganizeCode(), "organizeCode", hqlStr); + } + + DdlPreparedPack.getStringEqualPack(bean.getCreateUser(), "createUser", hqlStr); + if (StringUtils.isNotBlank(bean.getCreateDateTimeStart()) && StringUtils.isNotBlank(bean.getCreateDateTimeEnd())) { + DdlPreparedPack.timeBuilder(bean.getCreateDateTimeStart(), bean.getCreateDateTimeEnd(), "createDatetime", hqlStr, true); + } + // 封装有效状态、删除状态、创建人和创建时间 + if (StringUtil.isEmpty(bean.getIsValid())) { + DdlPreparedPack.getNumEqualPack(CommonEnumUtil.TRUE_OR_FALSE.TRUE.getValue(), "isValid", hqlStr); + } else { + DdlPreparedPack.getNumEqualPack(bean.getIsValid(), "isValid", hqlStr); + } + DdlPreparedPack.getNumEqualPack(CommonEnumUtil.TRUE_OR_FALSE.FALSE.getValue(), "isDeleted", hqlStr); + + return hqlStr; + } + + public static DdlPackBean packHqlScriptHistory(EngineScriptPersistenceHistory history) { + DdlPackBean packBean = new DdlPackBean(); + DdlPreparedPack.getStringEqualPack(history.getScriptNo(), "scriptNo", packBean); + getStringBuilderPack(history, packBean); + + return packBean; + } }