脚本引擎移植到动态表单

yun-zuoyi
castle.zang 3 years ago
parent 4f6f6878fe
commit 15e0f1c3f5

@ -2548,4 +2548,155 @@ public class BlockFormEnumUtil {
return result; 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=JOB50=
*/
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;
}
}
} }

@ -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;
}

@ -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;
}
}

@ -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;
}

@ -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<EngineScriptPersistenceHistory, Long> {
}

@ -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<EngineRulePersistence, Long> {
/**
*
* @param organizeCode
* @param ruleNo
* @return
*/
EngineRulePersistence findByOrganizeCodeAndRuleNo(String organizeCode, String ruleNo);
}

@ -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<EngineScriptPersistence, Long> {
/**
*
* @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();
}

@ -1,9 +1,11 @@
package cn.estsh.i3plus.pojo.form.sqlpack; 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.bean.DdlPackBean;
import cn.estsh.i3plus.pojo.base.enumutil.CommonEnumUtil; import cn.estsh.i3plus.pojo.base.enumutil.CommonEnumUtil;
import cn.estsh.i3plus.pojo.base.tool.DdlPreparedPack; import cn.estsh.i3plus.pojo.base.tool.DdlPreparedPack;
import cn.estsh.i3plus.pojo.base.tool.HqlPack; import cn.estsh.i3plus.pojo.base.tool.HqlPack;
import cn.estsh.i3plus.pojo.base.util.StringUtil;
import cn.estsh.i3plus.pojo.form.bean.*; import cn.estsh.i3plus.pojo.form.bean.*;
import org.apache.commons.lang3.StringUtils; import org.apache.commons.lang3.StringUtils;
@ -421,4 +423,58 @@ public final class FormHqlPack {
return ddlPackBean; 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;
}
} }

Loading…
Cancel
Save