提交 37de354e 编写于 作者: hebao@lab.ibiz5.com's avatar hebao@lab.ibiz5.com

引擎构建结果保存调整

上级 ca9de330
......@@ -2,9 +2,16 @@ server:
port: 8087
spring:
datasource:
dynamic:
druid: #以下是全局默认值,可以全局更改
filters: stat,log4j2
filter:
wall:
config:
multi-statement-allow: true
username: root
password: root
url: jdbc:mysql://172.16.100.77:3306/a_A_5d9d78509?useUnicode=true&characterEncoding=utf8&useSSL=false&nullCatalogMeansCurrent=true
url: jdbc:mysql://172.16.100.77:3306/a_A_5d9d78509?autoReconnect=true&useUnicode=true&characterEncoding=UTF-8&useOldAliasMetadataBehavior=true&allowMultiQueries=true
isSyncDBSchema: true
cloud:
nacos:
......
......@@ -6,13 +6,14 @@ import cn.ibizlab.core.rule.domain.ExecLog;
import cn.ibizlab.core.rule.domain.ExecResult;
import cn.ibizlab.core.rule.service.IExecLogService;
import cn.ibizlab.core.rule.service.IExecResultService;
import cn.ibizlab.util.errors.BadRequestAlertException;
import com.baomidou.mybatisplus.core.toolkit.IdWorker;
import lombok.extern.slf4j.Slf4j;
import org.kie.api.KieBase;
import org.kie.api.KieServices;
import org.kie.api.builder.*;
import org.kie.api.cdi.KContainer;
import org.kie.api.builder.KieBuilder;
import org.kie.api.builder.KieFileSystem;
import org.kie.api.builder.KieRepository;
import org.kie.api.builder.Message;
import org.kie.api.definition.KiePackage;
import org.kie.api.definition.rule.Rule;
import org.kie.api.io.Resource;
......@@ -28,6 +29,7 @@ import org.springframework.util.StringUtils;
import java.math.BigDecimal;
import java.math.BigInteger;
import java.sql.Timestamp;
import java.util.ArrayList;
import java.util.Collection;
import java.util.Hashtable;
import java.util.List;
......@@ -96,30 +98,35 @@ public class BaseEntityServiceImpl implements BaseEntityService
{
result.setDomainsField(KEYVALUEFIELD.toString());
}
if(DIMFIELD!=null)
{
result.setDimField(DIMFIELD.toString());
}
else
{
result.setDimField(KEYVALUEFIELD.toString());
}
if(TIMEFIELD!=null&&TIMEFIELD instanceof Timestamp)
result.setTimeField((Timestamp)TIMEFIELD);
if(EXT1FIELD!=null)
result.setExt1Field(EXT1FIELD.toString());
if(EXT2FIELD!=null)
result.setExt2Field(EXT2FIELD.toString());
result.setId(result.getDefaultKey(true).toString());
if(result.getRetValue()==1)
{
ruExecResultService.save(result);
if(DIMFIELD == null){
return;
}
else
{
ruExecResultService.remove(result.getId());
List dims = new ArrayList();
if(DIMFIELD instanceof List){
dims = (List)DIMFIELD;
}else if(DIMFIELD instanceof String){
dims.add(DIMFIELD);
}
for(Object obj : dims){
if(StringUtils.isEmpty(obj))
continue;
result.setDimField(String.valueOf(obj));
result.setId(result.getDefaultKey(true).toString());
if(result.getRetValue()==1)
{
ruExecResultService.saveAsync(result);
}
else
{
ruExecResultService.deleteAsync(result);
}
}
}
......
package cn.ibizlab.core.extensions.service;
import cn.ibizlab.core.lite.extensions.service.DbEntityService;
import cn.ibizlab.core.rule.service.impl.ExecResultServiceImpl;
import lombok.extern.slf4j.Slf4j;
import cn.ibizlab.core.rule.domain.ExecResult;
import org.springframework.beans.factory.annotation.Autowired;
import org.springframework.stereotype.Service;
import org.springframework.transaction.annotation.Transactional;
import org.springframework.context.annotation.Primary;
......@@ -16,30 +18,151 @@ import java.util.*;
@Service("ExecResultExService")
public class ExecResultExService extends ExecResultServiceImpl {
@Autowired
private DbEntityService dbEntityService;
private ArrayList<ExecResult> resultsSaveAsync=new ArrayList<ExecResult>();
private Object objResultSaveAsyncLock=new Object();
private Timer timerSaveAsync=null;
private ArrayList<ExecResult> resultsDeleteAsync=new ArrayList<ExecResult>();
private Object objResultDeleteAsyncLock=new Object();
private Timer timerDeleteAsync=null;
@Override
protected Class currentModelClass() {
return com.baomidou.mybatisplus.core.toolkit.ReflectionKit.getSuperClassGenericType(this.getClass().getSuperclass(), 1);
}
/**
* [DeleteAsync:DeleteAsync] 行为扩展
* [SaveAsync:SaveAsync] 行为扩展
* @param et
* @return
*/
@Override
@Transactional
public ExecResult deleteAsync(ExecResult et) {
return super.deleteAsync(et);
public ExecResult saveAsync(ExecResult et) {
synchronized(objResultSaveAsyncLock)
{
this.resultsSaveAsync.add(et);
}
//创建一个定时器
if(timerSaveAsync==null)
{
timerSaveAsync = new Timer();
//schedule方法是执行时间定时任务的方法
timerSaveAsync.schedule(new TimerTask() {
//run方法就是具体需要定时执行的任务
@Override
public void run() {
try
{
synchronized(objResultSaveAsyncLock)
{
if(resultsSaveAsync.size()>0)
{
List<ExecResult> args=new ArrayList<>();
for(ExecResult arg:resultsSaveAsync)
{
args.add(arg);
if(args.size()>=500)
{
// TreatEarlyWarningThread task = new TreatEarlyWarningThread(args);
// task.start();
dbEntityService.saveResultBatch(args);
args.clear();
}
}
if(args.size()>0)
{
// TreatEarlyWarningThread task = new TreatEarlyWarningThread(args);
// task.start();
dbEntityService.saveResultBatch(args);
args.clear();
}
resultsSaveAsync.clear();
}
}
}
catch (Exception ex)
{
log.error(ex.getMessage());
}
}
}, 1000, 10000);
}
return et;
}
/**
* [SaveAsync:SaveAsync] 行为扩展
* [DeleteAsync:DeleteAsync] 行为扩展
* @param et
* @return
*/
@Override
@Transactional
public ExecResult saveAsync(ExecResult et) {
return super.saveAsync(et);
public ExecResult deleteAsync(ExecResult et) {
synchronized(objResultDeleteAsyncLock)
{
this.resultsDeleteAsync.add(et);
}
if(timerDeleteAsync==null)
{
timerDeleteAsync = new Timer();
//schedule方法是执行时间定时任务的方法
timerDeleteAsync.schedule(new TimerTask() {
//run方法就是具体需要定时执行的任务
@Override
public void run() {
try
{
synchronized(objResultDeleteAsyncLock)
{
if(resultsDeleteAsync.size()>0)
{
List<ExecResult> args=new ArrayList<>();
for(ExecResult arg:resultsDeleteAsync)
{
args.add(arg);
if(args.size()>=500)
{
// UpdateTreatEarlyWarningThread updateTreatEarlyWarningThread = new UpdateTreatEarlyWarningThread(args);
// updateTreatEarlyWarningThread.start();
dbEntityService.clearResultBatch(args);
args.clear();
}
}
if(args.size()>=0)
{
// UpdateTreatEarlyWarningThread updateTreatEarlyWarningThread = new UpdateTreatEarlyWarningThread(args);
// updateTreatEarlyWarningThread.start();
dbEntityService.clearResultBatch(args);
args.clear();
}
resultsDeleteAsync.clear();
}
}
}
catch (Exception ex)
{
log.error(ex.getMessage());
}
}
}, 1000, 10000);
}
return et;
}
}
......@@ -52,7 +52,7 @@ public class RuleEngineExService extends RuleEngineServiceImpl {
* @return
*/
@Override
@Transactional
//@Transactional
public RuleEngine run(RuleEngine et) {
if(!StringUtils.isEmpty(et.getEngineId()))
......@@ -95,5 +95,26 @@ public class RuleEngineExService extends RuleEngineServiceImpl {
}
return super.run(et);
}
/**
* [Check:校验] 行为扩展
* @param et
* @return
*/
@Override
@Transactional
public RuleEngine check(RuleEngine et) {
if(!StringUtils.isEmpty(et.getEngineId())) {
CachedBeanCopier.copy(get(et.getEngineId()), et);
ruleItemService.list(Wrappers.<RuleItem>lambdaQuery()
.eq(RuleItem::getModelId,et.getModelId()).ne(RuleItem::getGroup,"REP").like(RuleItem::getGroup,et.getGroup()))
.forEach(ruleItem -> {
ruleItemService.buildRuleFile(ruleItem);
});
}
return super.run(et);
}
}
......@@ -143,7 +143,7 @@ public class RuleEngineServiceImpl extends ServiceImpl<RuleEngineMapper, RuleEng
return (!ObjectUtils.isEmpty(et.getEngineId())) && (!Objects.isNull(this.getById(et.getEngineId())));
}
@Override
@Transactional
//@Transactional
public RuleEngine run(RuleEngine et) {
//自定义代码
return et;
......
......@@ -12,24 +12,24 @@
<insert id="replaceBatch" parameterType="java.util.List" databaseId="mysql">
<foreach collection="list" item="item" index="index" separator=";">
INSERT INTO RU_EXECRESULT
INSERT INTO IBZRULERESULT
(ru_execresultid,ru_execresultname, createdate, updatedate, ruleid, rulename, retvalue, keyvaluefield,dimfield, metricfield,domainsfield,timefield,ext1field,ext2field, businesscat )
VALUES
(#{item.ruexecresultid}, #{item.ruexecresultname}, now(), now(), #{item.ruleid}, #{item.rulename}, #{item.retvalue}, #{item.keyvaluefield}, #{item.dimfield}, #{item.metricfield},
#{item.domainsfield},#{item.timefield}, #{item.ext1field}, #{item.ext2field},#{item.businesscat} )
(#{item.id}, #{item.name}, now(), now(), #{item.ruleId}, #{item.ruleName}, #{item.retValue}, #{item.keyValueField}, #{item.dimField}, #{item.metricField},
#{item.domainsField},#{item.timeField}, #{item.ext1Field}, #{item.ext2Field},#{item.businessCat} )
ON DUPLICATE KEY UPDATE
ru_execresultid=#{item.ruexecresultid},ru_execresultname=#{item.ruexecresultname}, createdate=now(), updatedate=now(), ruleid=#{item.ruleid}, rulename=#{item.rulename},
retvalue=#{item.retvalue}, keyvaluefield=#{item.keyvaluefield}, dimfield=#{item.dimfield}, metricfield=#{item.metricfield},domainsfield=#{item.domainsfield},timefield=#{item.timefield},
ext1field=#{item.ext1field},ext2field=#{item.ext2field}, businesscat=#{item.businesscat}
ru_execresultname=#{item.name}, createdate=now(), updatedate=now(), ruleid=#{item.ruleId}, rulename=#{item.ruleName},
retvalue=#{item.retValue}, keyvaluefield=#{item.keyValueField}, dimfield=#{item.dimField}, metricfield=#{item.metricField},domainsfield=#{item.domainsField},timefield=#{item.timeField},
ext1field=#{item.ext1Field},ext2field=#{item.ext2Field}, businesscat=#{item.businessCat}
</foreach>
</insert>
<!--t1.BUSINESSCAT, t1.CREATEDATE, t1.DIMFIELD, t1.DOMAINSFIELD, t1.EXT1FIELD, t1.EXT2FIELD, t1.KEYVALUEFIELD, t1.METRICFIELD,
t1.RETVALUE, t1.RULEID, t1.RULENAME, t1.RU_EXECRESULTID, t1.RU_EXECRESULTNAME, t1.SYSTEMID, t1.TIMEFIELD, t1.UPDATEDATE-->
<insert id="replaceBatch" parameterType="java.util.List" databaseId="oracle" >
MERGE INTO RU_EXECRkSULT A USING (
MERGE INTO IBZRULERESULT A USING (
<foreach collection='list' item='item' index='index' separator='UNION ALL'>
select #{item.ruexecresultid} as ru_execresultid, #{item.ruexecresultname} as ru_execresultname, sysdate as createdate, sysdate as updatedate, #{item.ruleid} as ruleid, #{item.rulename} as rulename,#{item.retvalue} as retvalue, #{item.keyvaluefield} as keyvaluefield, #{item.dimfield} as dimfield,
#{item.metricfield} as metricfield,#{item.domainsfield} as domainsfield,#{item.timefield} as timefield, #{item.ext1field} as ext1field,#{item.ext2field} as ext2field,#{item.businesscat} as businesscat from dual
select #{item.id} as ru_execresultid, #{item.name} as ru_execresultname, sysdate as createdate, sysdate as updatedate, #{item.ruleId} as ruleid, #{item.ruleName} as rulename,#{item.retValue} as retvalue, #{item.keyValueField} as keyvaluefield, #{item.dimField} as dimfield,
#{item.metricField} as metricfield,#{item.domainsField} as domainsfield,#{item.timeField} as timefield, #{item.ext1Field} as ext1field,#{item.ext2Field} as ext2field,#{item.businessCat} as businesscat from dual
</foreach>
) B ON (A.ru_execresultid = B.ru_execresultid) WHEN MATCHED THEN
UPDATE SET A.ru_execresultname=B.ru_execresultname, A.updatedate=B.updatedate, A.ruleid=B.ruleid, A.rulename=B.rulename, A.retvalue=B.retvalue, A.keyvaluefield=B.keyvaluefield,
......@@ -40,9 +40,9 @@
</insert>
<delete id="clearBatch" parameterType="java.util.List" >
delete from RU_EXECRESULT where (ruleid,keyvaluefield) in
delete from IBZRULERESULT where (ru_execresultid) in
<foreach collection="list" item="item" index="index" open="(" close=")" separator=",">
(#{item.ruleid},#{item.keyvaluefield})
(#{item.id})
</foreach>
</delete>
......
Markdown 格式
0% or
您添加了 0 到此讨论。请谨慎行事。
先完成此消息的编辑!
想要评论请 注册