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

引擎构建结果保存调整

上级 ca9de330
...@@ -2,9 +2,16 @@ server: ...@@ -2,9 +2,16 @@ server:
port: 8087 port: 8087
spring: spring:
datasource: datasource:
dynamic:
druid: #以下是全局默认值,可以全局更改
filters: stat,log4j2
filter:
wall:
config:
multi-statement-allow: true
username: root username: root
password: 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 isSyncDBSchema: true
cloud: cloud:
nacos: nacos:
......
...@@ -6,13 +6,14 @@ import cn.ibizlab.core.rule.domain.ExecLog; ...@@ -6,13 +6,14 @@ import cn.ibizlab.core.rule.domain.ExecLog;
import cn.ibizlab.core.rule.domain.ExecResult; import cn.ibizlab.core.rule.domain.ExecResult;
import cn.ibizlab.core.rule.service.IExecLogService; import cn.ibizlab.core.rule.service.IExecLogService;
import cn.ibizlab.core.rule.service.IExecResultService; import cn.ibizlab.core.rule.service.IExecResultService;
import cn.ibizlab.util.errors.BadRequestAlertException;
import com.baomidou.mybatisplus.core.toolkit.IdWorker; import com.baomidou.mybatisplus.core.toolkit.IdWorker;
import lombok.extern.slf4j.Slf4j; import lombok.extern.slf4j.Slf4j;
import org.kie.api.KieBase; import org.kie.api.KieBase;
import org.kie.api.KieServices; import org.kie.api.KieServices;
import org.kie.api.builder.*; import org.kie.api.builder.KieBuilder;
import org.kie.api.cdi.KContainer; 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.KiePackage;
import org.kie.api.definition.rule.Rule; import org.kie.api.definition.rule.Rule;
import org.kie.api.io.Resource; import org.kie.api.io.Resource;
...@@ -28,6 +29,7 @@ import org.springframework.util.StringUtils; ...@@ -28,6 +29,7 @@ import org.springframework.util.StringUtils;
import java.math.BigDecimal; import java.math.BigDecimal;
import java.math.BigInteger; import java.math.BigInteger;
import java.sql.Timestamp; import java.sql.Timestamp;
import java.util.ArrayList;
import java.util.Collection; import java.util.Collection;
import java.util.Hashtable; import java.util.Hashtable;
import java.util.List; import java.util.List;
...@@ -96,30 +98,35 @@ public class BaseEntityServiceImpl implements BaseEntityService ...@@ -96,30 +98,35 @@ public class BaseEntityServiceImpl implements BaseEntityService
{ {
result.setDomainsField(KEYVALUEFIELD.toString()); result.setDomainsField(KEYVALUEFIELD.toString());
} }
if(DIMFIELD!=null)
{
result.setDimField(DIMFIELD.toString());
}
else
{
result.setDimField(KEYVALUEFIELD.toString());
}
if(TIMEFIELD!=null&&TIMEFIELD instanceof Timestamp) if(TIMEFIELD!=null&&TIMEFIELD instanceof Timestamp)
result.setTimeField((Timestamp)TIMEFIELD); result.setTimeField((Timestamp)TIMEFIELD);
if(EXT1FIELD!=null) if(EXT1FIELD!=null)
result.setExt1Field(EXT1FIELD.toString()); result.setExt1Field(EXT1FIELD.toString());
if(EXT2FIELD!=null) if(EXT2FIELD!=null)
result.setExt2Field(EXT2FIELD.toString()); result.setExt2Field(EXT2FIELD.toString());
result.setId(result.getDefaultKey(true).toString());
if(result.getRetValue()==1) if(DIMFIELD == null){
{ return;
ruExecResultService.save(result);
} }
else List dims = new ArrayList();
{ if(DIMFIELD instanceof List){
ruExecResultService.remove(result.getId()); 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; package cn.ibizlab.core.extensions.service;
import cn.ibizlab.core.lite.extensions.service.DbEntityService;
import cn.ibizlab.core.rule.service.impl.ExecResultServiceImpl; import cn.ibizlab.core.rule.service.impl.ExecResultServiceImpl;
import lombok.extern.slf4j.Slf4j; import lombok.extern.slf4j.Slf4j;
import cn.ibizlab.core.rule.domain.ExecResult; import cn.ibizlab.core.rule.domain.ExecResult;
import org.springframework.beans.factory.annotation.Autowired;
import org.springframework.stereotype.Service; import org.springframework.stereotype.Service;
import org.springframework.transaction.annotation.Transactional; import org.springframework.transaction.annotation.Transactional;
import org.springframework.context.annotation.Primary; import org.springframework.context.annotation.Primary;
...@@ -16,30 +18,151 @@ import java.util.*; ...@@ -16,30 +18,151 @@ import java.util.*;
@Service("ExecResultExService") @Service("ExecResultExService")
public class ExecResultExService extends ExecResultServiceImpl { 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 @Override
protected Class currentModelClass() { protected Class currentModelClass() {
return com.baomidou.mybatisplus.core.toolkit.ReflectionKit.getSuperClassGenericType(this.getClass().getSuperclass(), 1); return com.baomidou.mybatisplus.core.toolkit.ReflectionKit.getSuperClassGenericType(this.getClass().getSuperclass(), 1);
} }
/** /**
* [DeleteAsync:DeleteAsync] 行为扩展 * [SaveAsync:SaveAsync] 行为扩展
* @param et * @param et
* @return * @return
*/ */
@Override @Override
@Transactional @Transactional
public ExecResult deleteAsync(ExecResult et) { public ExecResult saveAsync(ExecResult et) {
return super.deleteAsync(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 * @param et
* @return * @return
*/ */
@Override @Override
@Transactional @Transactional
public ExecResult saveAsync(ExecResult et) { public ExecResult deleteAsync(ExecResult et) {
return super.saveAsync(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 { ...@@ -52,7 +52,7 @@ public class RuleEngineExService extends RuleEngineServiceImpl {
* @return * @return
*/ */
@Override @Override
@Transactional //@Transactional
public RuleEngine run(RuleEngine et) { public RuleEngine run(RuleEngine et) {
if(!StringUtils.isEmpty(et.getEngineId())) if(!StringUtils.isEmpty(et.getEngineId()))
...@@ -95,5 +95,26 @@ public class RuleEngineExService extends RuleEngineServiceImpl { ...@@ -95,5 +95,26 @@ public class RuleEngineExService extends RuleEngineServiceImpl {
} }
return super.run(et); 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 ...@@ -143,7 +143,7 @@ public class RuleEngineServiceImpl extends ServiceImpl<RuleEngineMapper, RuleEng
return (!ObjectUtils.isEmpty(et.getEngineId())) && (!Objects.isNull(this.getById(et.getEngineId()))); return (!ObjectUtils.isEmpty(et.getEngineId())) && (!Objects.isNull(this.getById(et.getEngineId())));
} }
@Override @Override
@Transactional //@Transactional
public RuleEngine run(RuleEngine et) { public RuleEngine run(RuleEngine et) {
//自定义代码 //自定义代码
return et; return et;
......
...@@ -12,24 +12,24 @@ ...@@ -12,24 +12,24 @@
<insert id="replaceBatch" parameterType="java.util.List" databaseId="mysql"> <insert id="replaceBatch" parameterType="java.util.List" databaseId="mysql">
<foreach collection="list" item="item" index="index" separator=";"> <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 ) (ru_execresultid,ru_execresultname, createdate, updatedate, ruleid, rulename, retvalue, keyvaluefield,dimfield, metricfield,domainsfield,timefield,ext1field,ext2field, businesscat )
VALUES VALUES
(#{item.ruexecresultid}, #{item.ruexecresultname}, now(), now(), #{item.ruleid}, #{item.rulename}, #{item.retvalue}, #{item.keyvaluefield}, #{item.dimfield}, #{item.metricfield}, (#{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} ) #{item.domainsField},#{item.timeField}, #{item.ext1Field}, #{item.ext2Field},#{item.businessCat} )
ON DUPLICATE KEY UPDATE ON DUPLICATE KEY UPDATE
ru_execresultid=#{item.ruexecresultid},ru_execresultname=#{item.ruexecresultname}, createdate=now(), updatedate=now(), ruleid=#{item.ruleid}, rulename=#{item.rulename}, 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}, 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} ext1field=#{item.ext1Field},ext2field=#{item.ext2Field}, businesscat=#{item.businessCat}
</foreach> </foreach>
</insert> </insert>
<!--t1.BUSINESSCAT, t1.CREATEDATE, t1.DIMFIELD, t1.DOMAINSFIELD, t1.EXT1FIELD, t1.EXT2FIELD, t1.KEYVALUEFIELD, t1.METRICFIELD, <!--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--> 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" > <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'> <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, 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 #{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> </foreach>
) B ON (A.ru_execresultid = B.ru_execresultid) WHEN MATCHED THEN ) 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, 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 @@ ...@@ -40,9 +40,9 @@
</insert> </insert>
<delete id="clearBatch" parameterType="java.util.List" > <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=","> <foreach collection="list" item="item" index="index" open="(" close=")" separator=",">
(#{item.ruleid},#{item.keyvaluefield}) (#{item.id})
</foreach> </foreach>
</delete> </delete>
......
Markdown 格式
0% or
您添加了 0 到此讨论。请谨慎行事。
先完成此消息的编辑!
想要评论请 注册