From 741193be822bab3f5dcc9d696635a6b51a232aab Mon Sep 17 00:00:00 2001 From: link Date: Wed, 19 Jan 2022 10:13:00 +0800 Subject: [PATCH] =?UTF-8?q?=E5=81=A5=E5=BA=B7=E5=BA=A6=E6=8C=87=E6=A0=87DP?= =?UTF-8?q?=E4=BF=AE=E6=94=B9?= MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit --- .../i3plus/pojo/wms/bean/WmsHealthIndicator.java | 3 +- .../i3plus/pojo/wms/bean/WmsHealthVariable.java | 6 ++ .../pojo/wms/bean/WmsHealthVariableResult.java | 2 +- .../pojo/wms/bean/health/IWmsHealthIndexCron.java | 7 ++ .../wms/bean/health/WmsHealthIndexCalcWay.java | 13 +++ .../pojo/wms/bean/health/WmsHealthIndexEntity.java | 19 ++-- .../wms/bean/health/WmsHealthIndexFormula.java | 32 ++++-- .../pojo/wms/bean/health/WmsHealthIndexId.java | 8 +- .../pojo/wms/bean/health/WmsHealthIndexValue.java | 3 + .../wms/bean/health/WmsHealthIndexVariable.java | 117 ++++++++++++++++++--- .../wms/bean/health/WmsHealthIndexVariableId.java | 21 +++- .../bean/health/WmsHealthIndexVariableValue.java | 17 ++- .../wms/repository/IWmsHealthIndexRepository.java | 4 +- 13 files changed, 206 insertions(+), 46 deletions(-) diff --git a/modules/i3plus-pojo-wms/src/main/java/cn/estsh/i3plus/pojo/wms/bean/WmsHealthIndicator.java b/modules/i3plus-pojo-wms/src/main/java/cn/estsh/i3plus/pojo/wms/bean/WmsHealthIndicator.java index d163189..6e5cbe7 100644 --- a/modules/i3plus-pojo-wms/src/main/java/cn/estsh/i3plus/pojo/wms/bean/WmsHealthIndicator.java +++ b/modules/i3plus-pojo-wms/src/main/java/cn/estsh/i3plus/pojo/wms/bean/WmsHealthIndicator.java @@ -66,7 +66,8 @@ public class WmsHealthIndicator extends BaseBean { @DynamicField(webFieldType = CommonEnumUtil.FIELD_TYPE.TEXT) private String indicatorColor; - @Transient +// @Transient + @Column(name = "INDICATOR_VALUE") @ApiParam(value = "指标测算值") @DynamicField(webFieldType = CommonEnumUtil.FIELD_TYPE.NUMBER) private Double indicatorCalcValue; diff --git a/modules/i3plus-pojo-wms/src/main/java/cn/estsh/i3plus/pojo/wms/bean/WmsHealthVariable.java b/modules/i3plus-pojo-wms/src/main/java/cn/estsh/i3plus/pojo/wms/bean/WmsHealthVariable.java index 348b704..6954b5d 100644 --- a/modules/i3plus-pojo-wms/src/main/java/cn/estsh/i3plus/pojo/wms/bean/WmsHealthVariable.java +++ b/modules/i3plus-pojo-wms/src/main/java/cn/estsh/i3plus/pojo/wms/bean/WmsHealthVariable.java @@ -107,4 +107,10 @@ public class WmsHealthVariable extends BaseBean { @ApiParam(value = "测算方式") @DynamicField(webFieldType = CommonEnumUtil.FIELD_TYPE.TEXT) private String calcWays; + + @Column(name = "VARIABLE_VALUE") + @ApiParam(value = "上次计算的值") + @DynamicField(webFieldType = CommonEnumUtil.FIELD_TYPE.TEXT) + private Double varibleValue; + } diff --git a/modules/i3plus-pojo-wms/src/main/java/cn/estsh/i3plus/pojo/wms/bean/WmsHealthVariableResult.java b/modules/i3plus-pojo-wms/src/main/java/cn/estsh/i3plus/pojo/wms/bean/WmsHealthVariableResult.java index aba0dee..d5ebb85 100644 --- a/modules/i3plus-pojo-wms/src/main/java/cn/estsh/i3plus/pojo/wms/bean/WmsHealthVariableResult.java +++ b/modules/i3plus-pojo-wms/src/main/java/cn/estsh/i3plus/pojo/wms/bean/WmsHealthVariableResult.java @@ -49,7 +49,7 @@ public class WmsHealthVariableResult extends BaseBean { @Column(name = "VARIABLE_VALUE") @ApiParam(value = "变量测算值") @DynamicField(webFieldType = CommonEnumUtil.FIELD_TYPE.NUMBER) - private Integer variableValue; + private Double variableValue; @Lob @Column(name = "VARIABLE_DETAILS") diff --git a/modules/i3plus-pojo-wms/src/main/java/cn/estsh/i3plus/pojo/wms/bean/health/IWmsHealthIndexCron.java b/modules/i3plus-pojo-wms/src/main/java/cn/estsh/i3plus/pojo/wms/bean/health/IWmsHealthIndexCron.java index daed272..40d1e4d 100644 --- a/modules/i3plus-pojo-wms/src/main/java/cn/estsh/i3plus/pojo/wms/bean/health/IWmsHealthIndexCron.java +++ b/modules/i3plus-pojo-wms/src/main/java/cn/estsh/i3plus/pojo/wms/bean/health/IWmsHealthIndexCron.java @@ -26,4 +26,11 @@ public interface IWmsHealthIndexCron { * 获取下一个计算周期 */ Date getNextDate(); + + + /** + * 获取周期间隔,即两个连续的计算时间的差值 + * 根据CRON表达式,计算出每个执行周期的毫秒数,如每5分钟执行一次,就是300000毫秒 + */ + public long getDifference(); } diff --git a/modules/i3plus-pojo-wms/src/main/java/cn/estsh/i3plus/pojo/wms/bean/health/WmsHealthIndexCalcWay.java b/modules/i3plus-pojo-wms/src/main/java/cn/estsh/i3plus/pojo/wms/bean/health/WmsHealthIndexCalcWay.java index ab2507e..f00453d 100644 --- a/modules/i3plus-pojo-wms/src/main/java/cn/estsh/i3plus/pojo/wms/bean/health/WmsHealthIndexCalcWay.java +++ b/modules/i3plus-pojo-wms/src/main/java/cn/estsh/i3plus/pojo/wms/bean/health/WmsHealthIndexCalcWay.java @@ -1,5 +1,7 @@ package cn.estsh.i3plus.pojo.wms.bean.health; +import lombok.Getter; + /** * 测算方式 * @author link @@ -18,9 +20,20 @@ public enum WmsHealthIndexCalcWay { */ SCRIPT("30"); + @Getter private String value; private WmsHealthIndexCalcWay(String value){ this.value = value; } + + public static WmsHealthIndexCalcWay value(String value) { + WmsHealthIndexCalcWay[] values = WmsHealthIndexCalcWay.values(); + for(WmsHealthIndexCalcWay target:values) { + if(target.getValue().equals(value)) { + return target; + } + } + return null; + } } diff --git a/modules/i3plus-pojo-wms/src/main/java/cn/estsh/i3plus/pojo/wms/bean/health/WmsHealthIndexEntity.java b/modules/i3plus-pojo-wms/src/main/java/cn/estsh/i3plus/pojo/wms/bean/health/WmsHealthIndexEntity.java index 30c691c..7148932 100644 --- a/modules/i3plus-pojo-wms/src/main/java/cn/estsh/i3plus/pojo/wms/bean/health/WmsHealthIndexEntity.java +++ b/modules/i3plus-pojo-wms/src/main/java/cn/estsh/i3plus/pojo/wms/bean/health/WmsHealthIndexEntity.java @@ -1,13 +1,7 @@ package cn.estsh.i3plus.pojo.wms.bean.health; -import cn.estsh.i3plus.pojo.wms.bean.WmsHealthVariableResult; import lombok.Getter; import lombok.Setter; -import org.springframework.expression.ExpressionParser; -import org.springframework.expression.spel.standard.SpelExpressionParser; -import org.springframework.expression.spel.support.StandardEvaluationContext; - -import java.util.Set; /** * 指标代码业务对象 @@ -36,12 +30,15 @@ public class WmsHealthIndexEntity { */ private WmsHealthIndexValue value; /** - * 是否刷新数据 + * 是否刷新数据(更新数据) */ private Boolean refresh; public WmsHealthIndexEntity(final WmsHealthIndexId id, final WmsHealthIndexFormula formula){ + if(null==id){ + throw new IllegalArgumentException("WmsHealthIndexId can't be null"); + } this.id = id; this.formula = formula; }; @@ -50,7 +47,7 @@ public class WmsHealthIndexEntity { final String indicatorCode, final String calcFormula){ return new WmsHealthIndexEntity(WmsHealthIndexId.of(organizeCode,indicatorCode), - WmsHealthIndexFormula.of(organizeCode,indicatorCode)); + WmsHealthIndexFormula.of(organizeCode,calcFormula)); } @@ -67,13 +64,17 @@ public class WmsHealthIndexEntity { } } + public boolean hashValue(){ + return null != this.value; + } private WmsHealthIndexValue generateWmsHealthIndexValue(){ - if(!formula.isEmpty()){ + if(!formula.isResultEmpty()){ String result = null; int size = formula.getResults().size(); if(size==1){ WmsHealthIndexVariableValue varValue = formula.getSingleValue(); + if(null!=varValue) result = String.valueOf(varValue.getDetail()); }else{ result = String.valueOf(formula.getSpelResult()); diff --git a/modules/i3plus-pojo-wms/src/main/java/cn/estsh/i3plus/pojo/wms/bean/health/WmsHealthIndexFormula.java b/modules/i3plus-pojo-wms/src/main/java/cn/estsh/i3plus/pojo/wms/bean/health/WmsHealthIndexFormula.java index 4c2ecb9..6e49fb1 100644 --- a/modules/i3plus-pojo-wms/src/main/java/cn/estsh/i3plus/pojo/wms/bean/health/WmsHealthIndexFormula.java +++ b/modules/i3plus-pojo-wms/src/main/java/cn/estsh/i3plus/pojo/wms/bean/health/WmsHealthIndexFormula.java @@ -9,6 +9,7 @@ import java.util.*; /** * 健康度测算公式 + * (#VAR202201070002/#VAR456)/(#VAR123/#VAR456)*100 */ @Getter public class WmsHealthIndexFormula { @@ -17,7 +18,7 @@ public class WmsHealthIndexFormula { */ private final String organizeCode; /** - * 健康度指标测算代码 (#VAR202201070002/#VAR456)/(#VAR123/#VAR456)*100% + * 健康度指标测算代码 (#VAR202201070002/#VAR456)/(#VAR123/#VAR456) * 100 */ private final String calcFormula; /** @@ -32,6 +33,12 @@ public class WmsHealthIndexFormula { public WmsHealthIndexFormula(final String organizeCode,final String calcFormula){ + if(null==organizeCode){ + throw new IllegalArgumentException("organizeCode can't be null"); + } + if(null==calcFormula){ + throw new IllegalArgumentException("calcFormula can't be null"); + } this.calcFormula = calcFormula; this.organizeCode = organizeCode; checkCode(); @@ -62,12 +69,15 @@ public class WmsHealthIndexFormula { } public void addResult(WmsHealthIndexVariable key, WmsHealthIndexVariableValue result){ - if(null!=result) { - this.results.put(key, result); + if(null!=result && null!=key) { + if(key.isRefresh()) { + key.changeValue(result); + } + results.put(key, result); } } - public boolean isEmpty(){ + public boolean isResultEmpty(){ return results.isEmpty(); } @@ -83,7 +93,7 @@ public class WmsHealthIndexFormula { * 获取单个值对象 */ public WmsHealthIndexVariableValue getSingleValue(){ - if(!isEmpty()) { + if(!isResultEmpty()) { WmsHealthIndexVariableValue variableValue = com.google.common.collect.Lists .newArrayList(results.values()).get(0); return variableValue; @@ -95,11 +105,11 @@ public class WmsHealthIndexFormula { * 根据健康度指标calcFormula,计算SPEL表达式的值 * @return */ - public Integer getSpelResult(){ + public Double getSpelResult(){ if(results.isEmpty()) { - return -1; + return -1.0; } - Integer calcResult = 0; + Double calcResult = 0.0; int resultSize = results.size(); StandardEvaluationContext ctx = new StandardEvaluationContext(); ExpressionParser parser = new SpelExpressionParser(); @@ -111,15 +121,15 @@ public class WmsHealthIndexFormula { for (WmsHealthIndexVariable varKey : varKeys) { // 取出该变量名称对应的计算结果 WmsHealthIndexVariableValue variableValue = results.get(varKey); - Integer value = variableValue.getValue(); + Double value = variableValue.getValue(); ctx.setVariable(varKey.getId().getVariable(), value); } // 存在多个变量,则按照SPEL进行运算最后取值 try { - calcResult = (Integer) parser.parseExpression(calcFormula) + calcResult = (Double) parser.parseExpression(calcFormula) .getValue(ctx); } catch (Exception e) { - calcResult = -1; + calcResult = -1.0; } } return calcResult; diff --git a/modules/i3plus-pojo-wms/src/main/java/cn/estsh/i3plus/pojo/wms/bean/health/WmsHealthIndexId.java b/modules/i3plus-pojo-wms/src/main/java/cn/estsh/i3plus/pojo/wms/bean/health/WmsHealthIndexId.java index a47a5b4..4e327dd 100644 --- a/modules/i3plus-pojo-wms/src/main/java/cn/estsh/i3plus/pojo/wms/bean/health/WmsHealthIndexId.java +++ b/modules/i3plus-pojo-wms/src/main/java/cn/estsh/i3plus/pojo/wms/bean/health/WmsHealthIndexId.java @@ -1,6 +1,7 @@ package cn.estsh.i3plus.pojo.wms.bean.health; import lombok.Getter; +import lombok.Setter; /** * 健康度指标标识 @@ -16,6 +17,11 @@ public class WmsHealthIndexId{ * 指标代码 */ private final String indicatorCode; + /** + * 持久化层的标识ID(OPTION)可无 + */ + @Setter + private Long pk; public WmsHealthIndexId(final String organizeCode,final String indicatorCode){ if(null==indicatorCode){ @@ -25,7 +31,7 @@ public class WmsHealthIndexId{ throw new IllegalArgumentException("organizeCode can't be null"); } this.indicatorCode = indicatorCode; - this.organizeCode = indicatorCode; + this.organizeCode = organizeCode; } public static WmsHealthIndexId of(String organizeCode,String indicatorCode){ diff --git a/modules/i3plus-pojo-wms/src/main/java/cn/estsh/i3plus/pojo/wms/bean/health/WmsHealthIndexValue.java b/modules/i3plus-pojo-wms/src/main/java/cn/estsh/i3plus/pojo/wms/bean/health/WmsHealthIndexValue.java index 735de28..ba36cd3 100644 --- a/modules/i3plus-pojo-wms/src/main/java/cn/estsh/i3plus/pojo/wms/bean/health/WmsHealthIndexValue.java +++ b/modules/i3plus-pojo-wms/src/main/java/cn/estsh/i3plus/pojo/wms/bean/health/WmsHealthIndexValue.java @@ -13,6 +13,9 @@ public class WmsHealthIndexValue{ * 测算结果 */ private final String result; + /** + * 测算时间 + */ @Setter private Long time; diff --git a/modules/i3plus-pojo-wms/src/main/java/cn/estsh/i3plus/pojo/wms/bean/health/WmsHealthIndexVariable.java b/modules/i3plus-pojo-wms/src/main/java/cn/estsh/i3plus/pojo/wms/bean/health/WmsHealthIndexVariable.java index cf1fe1a..9fd974b 100644 --- a/modules/i3plus-pojo-wms/src/main/java/cn/estsh/i3plus/pojo/wms/bean/health/WmsHealthIndexVariable.java +++ b/modules/i3plus-pojo-wms/src/main/java/cn/estsh/i3plus/pojo/wms/bean/health/WmsHealthIndexVariable.java @@ -2,6 +2,11 @@ package cn.estsh.i3plus.pojo.wms.bean.health; import lombok.Getter; import lombok.Setter; +import org.apache.commons.lang3.time.DateUtils; + +import java.text.SimpleDateFormat; +import java.time.Instant; +import java.util.Date; /** @@ -9,23 +14,20 @@ import lombok.Setter; */ @Getter public class WmsHealthIndexVariable { - /** * 指标变量代码 */ private final WmsHealthIndexVariableId id; - /** * 指标变量名称 */ @Setter private String name; - /** - * 计算周期 - */ - @Setter - private IWmsHealthIndexCron cycleRange; - +// /** +// * 计算周期 +// */ +// @Setter +// private IWmsHealthIndexCron cycleRange; /** * 计算频次 */ @@ -50,34 +52,59 @@ public class WmsHealthIndexVariable { @Setter private String applyPartGroup; + /** + * 数据库脚本语句 + */ @Setter private String sqlStatement; + /** + * 本地对象名(类名称,spring管理的对象别名) + */ @Setter private String className; + /** + * 函数名称 + */ @Setter private String functionName; + /** + * 脚本编号 + */ @Setter private String scriptNo; /** * 计算值 */ @Setter - private Object value; - + private WmsHealthIndexVariableValue value; /** * 修改CRON,计算周期、频次需要刷新数据 */ @Setter private boolean refresh; + /** + * 上次计算时间 + */ + @Setter + private Instant lastCalcTime; + /** + * 下一次计算时间 + */ + @Setter + private Instant nextCalcTime; - public WmsHealthIndexVariable(String organizeCode,String variable){ - this(new WmsHealthIndexVariableId(organizeCode,variable)); + + public WmsHealthIndexVariable(final String organizeCode,final String variable){ + this(new WmsHealthIndexVariableId(organizeCode, variable)); } public WmsHealthIndexVariable(WmsHealthIndexVariableId id){ + if(null==id){ + throw new IllegalArgumentException("WmsHealthIndexVariableId can't be null"); + } this.id = id; } @@ -92,17 +119,75 @@ public class WmsHealthIndexVariable { return flag; } - public boolean checked(){ + + /** + * 是否有值 + * @return + */ + public boolean hasValue(){ return null!=value; } + /** + * 修改CRON表达式 + * @param cron + */ public void changeCalcFrequency(IWmsHealthIndexCron cron){ setCalcFrequency(cron); setRefresh(true); } - public void changeCycleRange(IWmsHealthIndexCron cron){ - setCycleRange(cron); - setRefresh(true); + + /** + *设置上次执行时间 + * @param formartTime 格式化日期 yyyy-MM-dd HH:mm:ss 入参如 2022-01-13 10:45:43 + */ + public boolean setLastCalcTimeFormat(String formartTime){ + if(null==formartTime||formartTime.trim().isEmpty()){ + return false; + } + try{ + SimpleDateFormat sdf = new SimpleDateFormat("yyyy-MM-dd HH:mm:ss"); + long time = sdf.parse(formartTime).getTime(); + this.lastCalcTime = (Instant.ofEpochMilli(time)); + }catch (Exception e){ + return false; + } + return null!=lastCalcTime; + } + + + public String formatToDateTime(Long time) { + SimpleDateFormat sdf = new SimpleDateFormat("yyyy-MM-dd HH:mm:ss"); + return sdf.format(new Date(time)); + } + + /** + * 获取上次计算时间,并且格式化输出 + * @return + */ + public String getLastCalcTimeFormat() { + return null!=this.lastCalcTime ? formatToDateTime(this.lastCalcTime.toEpochMilli()):""; + } + + /** + * 获取下一次计算时间,并且格式化输出 + * @return + */ + public String getNextCalcTimeFormat() { + return formatToDateTime(calcFrequency.getNextDate().getTime()); + } + + + /** + * + * @param value + */ + public void changeValue(WmsHealthIndexVariableValue value){ + if(null!=value) { + this.setValue(value); + this.setRefresh(true); + this.setLastCalcTime(Instant.now()); + } } } diff --git a/modules/i3plus-pojo-wms/src/main/java/cn/estsh/i3plus/pojo/wms/bean/health/WmsHealthIndexVariableId.java b/modules/i3plus-pojo-wms/src/main/java/cn/estsh/i3plus/pojo/wms/bean/health/WmsHealthIndexVariableId.java index d238caa..04971c5 100644 --- a/modules/i3plus-pojo-wms/src/main/java/cn/estsh/i3plus/pojo/wms/bean/health/WmsHealthIndexVariableId.java +++ b/modules/i3plus-pojo-wms/src/main/java/cn/estsh/i3plus/pojo/wms/bean/health/WmsHealthIndexVariableId.java @@ -1,15 +1,20 @@ package cn.estsh.i3plus.pojo.wms.bean.health; import lombok.Getter; -import lombok.Value; +import lombok.Setter; /** * 健康度指标变量 */ @Getter -@Value public class WmsHealthIndexVariableId { + /** + * 持久层标识ID + */ + @Getter + @Setter + private Long pk; /** * 工厂代码 */ @@ -20,4 +25,16 @@ public class WmsHealthIndexVariableId { private final String variable; + public WmsHealthIndexVariableId(final String organizeCode,final String variable){ + if(null == organizeCode){ + throw new IllegalArgumentException("organizeCode can't be null"); + } + if(null == variable){ + throw new IllegalArgumentException("variable can't be null"); + } + this.organizeCode = organizeCode; + this.variable = variable; + } + + } diff --git a/modules/i3plus-pojo-wms/src/main/java/cn/estsh/i3plus/pojo/wms/bean/health/WmsHealthIndexVariableValue.java b/modules/i3plus-pojo-wms/src/main/java/cn/estsh/i3plus/pojo/wms/bean/health/WmsHealthIndexVariableValue.java index 52290e8..953e1b6 100644 --- a/modules/i3plus-pojo-wms/src/main/java/cn/estsh/i3plus/pojo/wms/bean/health/WmsHealthIndexVariableValue.java +++ b/modules/i3plus-pojo-wms/src/main/java/cn/estsh/i3plus/pojo/wms/bean/health/WmsHealthIndexVariableValue.java @@ -7,13 +7,12 @@ import lombok.Value; * 健康度变量计算结果 */ @Getter -@Value public class WmsHealthIndexVariableValue { /** * 指标变量代码值 */ - private final Integer value; + private final Double value; /** * 详细信息 @@ -21,7 +20,19 @@ public class WmsHealthIndexVariableValue { private final Object detail; + public WmsHealthIndexVariableValue(final Double value,final Object detail){ + if(null==value){ + throw new IllegalArgumentException("value can't be null"); + } + if(null==detail){ + throw new IllegalArgumentException("detail can't be null"); + } + this.value = value; + this.detail = detail; + } + + public static WmsHealthIndexVariableValue empty(){ - return new WmsHealthIndexVariableValue(-1,""); + return new WmsHealthIndexVariableValue(-1.0,""); } } diff --git a/modules/i3plus-pojo-wms/src/main/java/cn/estsh/i3plus/pojo/wms/repository/IWmsHealthIndexRepository.java b/modules/i3plus-pojo-wms/src/main/java/cn/estsh/i3plus/pojo/wms/repository/IWmsHealthIndexRepository.java index ffeae04..ab5290e 100644 --- a/modules/i3plus-pojo-wms/src/main/java/cn/estsh/i3plus/pojo/wms/repository/IWmsHealthIndexRepository.java +++ b/modules/i3plus-pojo-wms/src/main/java/cn/estsh/i3plus/pojo/wms/repository/IWmsHealthIndexRepository.java @@ -17,7 +17,7 @@ public interface IWmsHealthIndexRepository { * @param id * @return */ - WmsHealthIndexEntity findAndInit(WmsHealthIndexId id); + WmsHealthIndexEntity findAndInit(final WmsHealthIndexId id); /** * 获取上一次记录的健康度指标值 @@ -31,7 +31,7 @@ public interface IWmsHealthIndexRepository { * @param wmsHealthIndexEntity * @param source 统计渠道 */ - void save(final WmsHealthIndexEntity wmsHealthIndexEntity,String source); + void save(final WmsHealthIndexEntity wmsHealthIndexEntity,final String source); /**