Skip to content
Projects
Groups
Snippets
Help
This project
Loading...
Sign in / Register
Toggle navigation
I
indicators
Overview
Overview
Details
Activity
Cycle Analytics
Repository
Repository
Files
Commits
Branches
Tags
Contributors
Graph
Compare
Charts
Issues
0
Issues
0
List
Board
Labels
Milestones
Merge Requests
0
Merge Requests
0
CI / CD
CI / CD
Pipelines
Jobs
Schedules
Charts
Wiki
Wiki
Snippets
Snippets
Members
Members
Collapse sidebar
Close sidebar
Activity
Graph
Charts
Create a new issue
Jobs
Commits
Issue Boards
Open sidebar
zhangkb
indicators
Commits
798be07b
Commit
798be07b
authored
Jun 24, 2020
by
zhangkb
Browse files
Options
Browse Files
Download
Email Patches
Plain Diff
优化对标单元计算算法
parent
c74bebd2
Show whitespace changes
Inline
Side-by-side
Showing
17 changed files
with
984 additions
and
12 deletions
+984
-12
CompareUnitCalActor.java
...indicators/akka/actor/indicators/CompareUnitCalActor.java
+70
-0
DriveIndIdCalActor.java
.../indicators/akka/actor/indicators/DriveIndIdCalActor.java
+151
-0
DriveIndIdObjCalActor.java
...dicators/akka/actor/indicators/DriveIndIdObjCalActor.java
+191
-0
GetBaseIndValueActor.java
...ndicators/akka/actor/indicators/GetBaseIndValueActor.java
+38
-0
StartCompareUnitCalActor.java
...ators/akka/actor/indicators/StartCompareUnitCalActor.java
+75
-0
BaseIndValueMsg.java
...e/indicators/akka/message/indicators/BaseIndValueMsg.java
+58
-0
CalIndAverageAndRankMsg.java
...tors/akka/message/indicators/CalIndAverageAndRankMsg.java
+96
-0
CompareUnitCalMsg.java
...indicators/akka/message/indicators/CompareUnitCalMsg.java
+26
-0
DriveIndIdCalMsg.java
.../indicators/akka/message/indicators/DriveIndIdCalMsg.java
+67
-0
DriveIndIdObjCalMsg.java
...dicators/akka/message/indicators/DriveIndIdObjCalMsg.java
+60
-0
FirstExeConfirmMsg.java
...ndicators/akka/message/indicators/FirstExeConfirmMsg.java
+33
-0
GetBaseIndValueMsg.java
...ndicators/akka/message/indicators/GetBaseIndValueMsg.java
+39
-0
StartCompareUnitCalMsg.java
...ators/akka/message/indicators/StartCompareUnitCalMsg.java
+28
-0
IndicatorsDefCtrl.java
...keymobile/indicators/api/hytobacco/IndicatorsDefCtrl.java
+7
-0
CompareUnitDef.java
...le/indicators/model/entity/indicators/CompareUnitDef.java
+17
-0
DriveIndCalResultService.java
...ndicators/service/hytobacco/DriveIndCalResultService.java
+16
-0
CalculateUtils.java
...n/java/com/keymobile/indicators/utils/CalculateUtils.java
+12
-12
No files found.
src/main/java/com/keymobile/indicators/akka/actor/indicators/CompareUnitCalActor.java
0 → 100644
View file @
798be07b
package
com
.
keymobile
.
indicators
.
akka
.
actor
.
indicators
;
import
java.util.Arrays
;
import
java.util.List
;
import
org.apache.commons.lang.StringUtils
;
import
com.keymobile.indicators.akka.message.indicators.CompareUnitCalMsg
;
import
com.keymobile.indicators.akka.message.indicators.DriveIndIdCalMsg
;
import
com.keymobile.indicators.akka.message.indicators.FirstExeConfirmMsg
;
import
com.keymobile.indicators.model.entity.indicators.CompareUnitDef
;
import
akka.actor.AbstractActor
;
import
akka.actor.ActorRef
;
import
akka.actor.Props
;
public
class
CompareUnitCalActor
extends
AbstractActor
{
private
int
numberOfConfirm
=
0
;
//定义返回确认消息的子actor
private
int
indIdSize
=
0
;
//对标指标个数
private
final
ActorRef
startCompareUnitCalActor
;
//定义父actor
static
public
Props
props
(
ActorRef
startCompareUnitCalActor
)
{
return
Props
.
create
(
CompareUnitCalActor
.
class
,()->
new
CompareUnitCalActor
(
startCompareUnitCalActor
));
}
public
CompareUnitCalActor
(
ActorRef
startCompareUnitCalActor
)
{
this
.
startCompareUnitCalActor
=
startCompareUnitCalActor
;
}
@Override
public
Receive
createReceive
()
{
return
receiveBuilder
()
.
match
(
CompareUnitCalMsg
.
class
,
compareUnitCalMsg
->
{
CompareUnitDef
compareUnitDef
=
compareUnitCalMsg
.
getCompareUnitDef
();
//获取对标对象
String
compareObjsString
=
compareUnitDef
.
getCompareObjs
();
//获取对标指标
String
indIdsString
=
compareUnitDef
.
getIndIds
();
if
(
StringUtils
.
isNotBlank
(
indIdsString
)
&&
StringUtils
.
isNotBlank
(
compareObjsString
))
{
//获取考核指标id list
List
<
String
>
indIdsList
=
Arrays
.
asList
(
indIdsString
.
split
(
","
));
//获取考核对象list
List
<
String
>
compareObjsList
=
Arrays
.
asList
(
compareObjsString
.
split
(
","
));
indIdSize
=
indIdsList
.
size
();
for
(
String
indId
:
indIdsList
)
{
DriveIndIdCalMsg
driveIndIdCalMsg
=
new
DriveIndIdCalMsg
(
compareUnitDef
.
getCompareId
(),
indId
,
compareObjsList
,
compareUnitDef
.
getDate
(),
compareUnitDef
.
getFirstExe
(),
compareUnitDef
.
getAverageObj
());
//start akka
ActorRef
driveIndIdCalActor
=
this
.
getContext
()
.
actorOf
(
Props
.
create
(
DriveIndIdCalActor
.
class
,
()->
new
DriveIndIdCalActor
(
getSelf
())));
driveIndIdCalActor
.
tell
(
driveIndIdCalMsg
,
getSelf
());
}
}
})
.
match
(
FirstExeConfirmMsg
.
class
,
firstExeConfirmMsg
->
{
if
(++
numberOfConfirm
>=
indIdSize
)
{
//子actor全部返回
//发送确认信息给父actor
FirstExeConfirmMsg
confirmMsg
=
new
FirstExeConfirmMsg
(
1
,
""
);
startCompareUnitCalActor
.
tell
(
confirmMsg
,
ActorRef
.
noSender
());
}
})
.
build
();
}
}
src/main/java/com/keymobile/indicators/akka/actor/indicators/DriveIndIdCalActor.java
0 → 100644
View file @
798be07b
package
com
.
keymobile
.
indicators
.
akka
.
actor
.
indicators
;
import
java.util.ArrayList
;
import
java.util.HashMap
;
import
java.util.List
;
import
java.util.Map
;
import
java.util.Map.Entry
;
import
org.apache.commons.lang.StringUtils
;
import
com.keymobile.indicators.akka.message.indicators.CalIndAverageAndRankMsg
;
import
com.keymobile.indicators.akka.message.indicators.DriveIndIdCalMsg
;
import
com.keymobile.indicators.akka.message.indicators.DriveIndIdObjCalMsg
;
import
com.keymobile.indicators.akka.message.indicators.FirstExeConfirmMsg
;
import
com.keymobile.indicators.model.entity.DimValue
;
import
com.keymobile.indicators.model.entity.indicators.DriveIndCalResultDef
;
import
com.keymobile.indicators.service.hytobacco.DriveIndCalResultService
;
import
com.keymobile.indicators.service.hytobacco.DriveIndDefService
;
import
com.keymobile.indicators.service.hytobacco.IndScorecardService
;
import
com.keymobile.indicators.utils.CalculateUtils
;
import
com.keymobile.indicators.utils.SpringUtil
;
import
akka.actor.AbstractActor
;
import
akka.actor.ActorRef
;
import
akka.actor.Props
;
public
class
DriveIndIdCalActor
extends
AbstractActor
{
private
DriveIndCalResultService
driveIndCalResultService
=
SpringUtil
.
getBean
(
DriveIndCalResultService
.
class
);
private
IndScorecardService
indScorecardService
=
SpringUtil
.
getBean
(
IndScorecardService
.
class
);
private
DriveIndDefService
driveIndDefService
=
SpringUtil
.
getBean
(
DriveIndDefService
.
class
);
private
int
numberOfConfirm
=
0
;
//定义返回确认消息的子actor
private
int
compareObjSize
=
0
;
//对标对象个数
private
Map
<
String
,
String
>
valueMap
=
new
HashMap
<>();
private
List
<
String
>
compareObjs
=
new
ArrayList
<>();
private
String
firstExe
;
//是否先执行 0:否 1:是
private
String
averageObj
;
//平均分参考对象
private
final
ActorRef
compareUnitCalActor
;
//定义父actor
static
public
Props
props
(
ActorRef
compareUnitCalActor
)
{
return
Props
.
create
(
DriveIndIdCalActor
.
class
,()->
new
DriveIndIdCalActor
(
compareUnitCalActor
));
}
public
DriveIndIdCalActor
(
ActorRef
compareUnitCalActor
)
{
this
.
compareUnitCalActor
=
compareUnitCalActor
;
}
@Override
public
Receive
createReceive
()
{
return
receiveBuilder
()
.
match
(
DriveIndIdCalMsg
.
class
,
driveIndIdCalMsg
->
{
String
compareId
=
driveIndIdCalMsg
.
getCompareId
();
String
indId
=
driveIndIdCalMsg
.
getIndId
();
List
<
String
>
compareObjs
=
driveIndIdCalMsg
.
getCompareObj
();
Integer
date
=
driveIndIdCalMsg
.
getDate
();
firstExe
=
driveIndIdCalMsg
.
getFirstExe
();
averageObj
=
driveIndIdCalMsg
.
getAverageObj
();
compareObjSize
=
compareObjs
.
size
();
for
(
String
compareObj
:
compareObjs
)
{
List
<
DimValue
>
dimValueList
=
new
ArrayList
<>();
DimValue
dimCompareObj
=
new
DimValue
(
"dim1"
,
compareObj
,
"varchar"
);
DimValue
dimDateObj
=
new
DimValue
(
"dim2"
,
date
,
"number"
);
dimValueList
.
add
(
dimCompareObj
);
dimValueList
.
add
(
dimDateObj
);
DriveIndIdObjCalMsg
driveIndIdObjCalMsg
=
new
DriveIndIdObjCalMsg
(
compareId
,
indId
,
compareObj
,
date
,
dimValueList
);
ActorRef
driveIndIdObjCalActor
=
this
.
getContext
()
.
actorOf
(
Props
.
create
(
DriveIndIdObjCalActor
.
class
,
()->
new
DriveIndIdObjCalActor
(
getSelf
())));
driveIndIdObjCalActor
.
tell
(
driveIndIdObjCalMsg
,
getSelf
());
}
})
.
match
(
CalIndAverageAndRankMsg
.
class
,
calIndAverageAndRankMsg
->
{
String
value
=
calIndAverageAndRankMsg
.
getDriveIndValue
();
String
id
=
String
.
valueOf
(
calIndAverageAndRankMsg
.
getId
());
String
indType
=
calIndAverageAndRankMsg
.
getIndType
();
//指标类型:正向 反向
Integer
scoreCardId
=
calIndAverageAndRankMsg
.
getScoreCardId
();
//评分卡id
if
(!
"-1"
.
equals
(
id
))
{
valueMap
.
put
(
id
,
value
);
compareObjs
.
add
(
calIndAverageAndRankMsg
.
getCompareObj
());
}
if
(++
numberOfConfirm
>=
compareObjSize
)
{
//子actor全部返回
if
(!
valueMap
.
isEmpty
()
&&
!
compareObjs
.
isEmpty
())
{
//如果是先执行且没有平均分参考对象的,则不进行平均分和排名计算
if
(
"1"
.
equals
(
firstExe
)
&&
StringUtils
.
isBlank
(
averageObj
))
{
//发送确认信息给父actor
FirstExeConfirmMsg
firstExeConfirmMsg
=
new
FirstExeConfirmMsg
(
1
,
""
);
compareUnitCalActor
.
tell
(
firstExeConfirmMsg
,
ActorRef
.
noSender
());
}
else
{
DriveIndCalResultDef
provinceDriveIndCalResult
=
null
;
String
actualAverage
=
"0.0"
;
//实际平均分
if
(
StringUtils
.
isNotBlank
(
averageObj
))
{
provinceDriveIndCalResult
=
driveIndCalResultService
.
findCompareObjInfo
(
calIndAverageAndRankMsg
.
getDriveIndId
(),
calIndAverageAndRankMsg
.
getDate
(),
averageObj
);
}
if
(
provinceDriveIndCalResult
!=
null
)
{
//获取实际平均分
actualAverage
=
provinceDriveIndCalResult
.
getValue
();
}
//算组内平均数
String
average
=
driveIndDefService
.
calGroupAverage
(
calIndAverageAndRankMsg
.
getIndFormula
(),
compareObjs
,
calIndAverageAndRankMsg
.
getDate
());
//算组内排名
Map
<
String
,
Integer
>
rankValue
=
CalculateUtils
.
rankValue
(
valueMap
,
indType
);
//填充平均数和排名到考核结果中
for
(
Entry
<
String
,
Integer
>
entry
:
rankValue
.
entrySet
())
{
//根据id获取指标值结果
DriveIndCalResultDef
driveIndCalResult
=
driveIndCalResultService
.
findById
(
Integer
.
parseInt
(
entry
.
getKey
()));
if
(
driveIndCalResult
!=
null
)
{
driveIndCalResult
.
setAverage
(
average
);
driveIndCalResult
.
setRank
(
entry
.
getValue
());
driveIndCalResult
.
setActualAverage
(
actualAverage
);
driveIndCalResultService
.
saveOrUpdate
(
driveIndCalResult
);
}
}
//根据评分卡算指标分数
for
(
Entry
<
String
,
Integer
>
entry
:
rankValue
.
entrySet
())
{
//根据id获取指标值结果
DriveIndCalResultDef
driveIndCalResult
=
driveIndCalResultService
.
findById
(
Integer
.
parseInt
(
entry
.
getKey
()));
if
(
driveIndCalResult
!=
null
)
{
//计算分数
Map
<
String
,
String
>
scoreMap
=
indScorecardService
.
calculateIndiScore
(
driveIndCalResult
.
getIndId
(),
driveIndCalResult
.
getDate
(),
driveIndCalResult
.
getCompareObj
(),
scoreCardId
,
driveIndCalResult
.
getCompareId
(),
compareObjs
);
driveIndCalResult
.
setScore
(
scoreMap
.
get
(
"score"
));
driveIndCalResult
.
setImproveScore
(
scoreMap
.
get
(
"improveScore"
));
driveIndCalResultService
.
saveOrUpdate
(
driveIndCalResult
);
}
}
}
}
}
})
.
build
();
}
}
src/main/java/com/keymobile/indicators/akka/actor/indicators/DriveIndIdObjCalActor.java
0 → 100644
View file @
798be07b
package
com
.
keymobile
.
indicators
.
akka
.
actor
.
indicators
;
import
java.math.BigDecimal
;
import
java.util.ArrayList
;
import
java.util.List
;
import
java.util.Map
;
import
java.util.concurrent.CopyOnWriteArrayList
;
import
java.util.regex.Matcher
;
import
java.util.regex.Pattern
;
import
org.apache.commons.lang.StringUtils
;
import
org.slf4j.Logger
;
import
org.slf4j.LoggerFactory
;
import
com.google.common.collect.Maps
;
import
com.googlecode.aviator.AviatorEvaluator
;
import
com.keymobile.indicators.akka.message.indicators.BaseIndValueMsg
;
import
com.keymobile.indicators.akka.message.indicators.CalIndAverageAndRankMsg
;
import
com.keymobile.indicators.akka.message.indicators.DriveIndIdObjCalMsg
;
import
com.keymobile.indicators.akka.message.indicators.GetBaseIndValueMsg
;
import
com.keymobile.indicators.model.entity.indicators.DriveIndCalResultDef
;
import
com.keymobile.indicators.model.entity.indicators.DriveIndDef
;
import
com.keymobile.indicators.service.hytobacco.DriveIndCalResultService
;
import
com.keymobile.indicators.service.hytobacco.DriveIndDefService
;
import
com.keymobile.indicators.utils.SpringUtil
;
import
akka.actor.AbstractActor
;
import
akka.actor.ActorRef
;
import
akka.actor.Props
;
public
class
DriveIndIdObjCalActor
extends
AbstractActor
{
private
Logger
logger
=
LoggerFactory
.
getLogger
(
DriveIndIdObjCalActor
.
class
);
private
DriveIndDefService
driveIndDefService
=
SpringUtil
.
getBean
(
DriveIndDefService
.
class
);
private
DriveIndCalResultService
driveIndCalResultService
=
SpringUtil
.
getBean
(
DriveIndCalResultService
.
class
);
private
String
compareId
;
private
String
compareObj
;
private
int
date
;
private
String
driveIndId
;
private
String
unit
;
private
String
indType
;
private
Integer
scoreCardId
;
private
String
driveIndFormula
;
//考核指标公式
private
String
averageDriveIndFormula
;
//需要传递回去算平均值的考核指标公式
private
int
numberOfConfirm
=
0
;
//定义返回确认消息的子actor
private
int
indIdSize
=
0
;
//考核指标内包含的基础指标id的个数
private
Map
<
String
,
Object
>
env
=
Maps
.
newHashMap
();
//定义线程安全的收集反馈确认消息list
private
List
<
Integer
>
confirmList
=
new
CopyOnWriteArrayList
<>();
private
final
ActorRef
driveIndIdCalActor
;
//定义父actor
static
public
Props
props
(
ActorRef
driveIndIdCalActor
)
{
return
Props
.
create
(
DriveIndIdObjCalActor
.
class
,()->
new
DriveIndIdObjCalActor
(
driveIndIdCalActor
));
}
public
DriveIndIdObjCalActor
(
ActorRef
driveIndIdCalActor
)
{
this
.
driveIndIdCalActor
=
driveIndIdCalActor
;
}
@Override
public
Receive
createReceive
()
{
return
receiveBuilder
()
.
match
(
DriveIndIdObjCalMsg
.
class
,
driveIndIdObjCalMsg
->
{
compareId
=
driveIndIdObjCalMsg
.
getCompareId
();
compareObj
=
driveIndIdObjCalMsg
.
getCompareObj
();
date
=
driveIndIdObjCalMsg
.
getDate
();
driveIndId
=
driveIndIdObjCalMsg
.
getIndId
();
List
<
String
>
indIdList
=
new
ArrayList
<>();
//定义存储从考核指标公式解析出来的基础指标id
DriveIndDef
driveIndDef
=
driveIndDefService
.
getById
(
driveIndId
);
unit
=
driveIndDef
.
getIndUnit
();
//指标单位
indType
=
driveIndDef
.
getIndType
();
//指标类型:正向 反向
scoreCardId
=
driveIndDef
.
getIndCalScoreRule
();
//指标评分规则
//获取考核指标的公式
driveIndFormula
=
driveIndDef
.
getIndFormat
();
averageDriveIndFormula
=
driveIndDef
.
getIndFormat
();
//定义用于返回父actor算平均分用的公式
Pattern
p
=
Pattern
.
compile
(
"(\\[[^\\]]*\\])"
);
Matcher
m
=
p
.
matcher
(
driveIndFormula
);
while
(
m
.
find
()){
indIdList
.
add
(
m
.
group
().
substring
(
1
,
m
.
group
().
length
()-
1
));
}
//获取公式中的基础指标id
indIdSize
=
indIdList
.
size
();
if
(!
indIdList
.
isEmpty
())
{
for
(
String
indId
:
indIdList
)
{
GetBaseIndValueMsg
getBaseIndValueMsg
=
new
GetBaseIndValueMsg
(
indId
,
driveIndIdObjCalMsg
.
getDimValues
());
ActorRef
getBaseIndValueActor
=
this
.
getContext
()
.
actorOf
(
Props
.
create
(
GetBaseIndValueActor
.
class
,
()->
new
GetBaseIndValueActor
()));
getBaseIndValueActor
.
tell
(
getBaseIndValueMsg
,
getSelf
());
}
}
})
.
match
(
BaseIndValueMsg
.
class
,
baseIndValueMsg
->{
if
(
baseIndValueMsg
.
getIsFinish
()==
0
)
{
logger
.
info
(
baseIndValueMsg
.
getConfirmMessage
());
}
else
{
String
indValue
=
baseIndValueMsg
.
getValue
();
if
(
StringUtils
.
isBlank
(
indValue
))
{
indValue
=
"0.0"
;
}
try
{
driveIndFormula
=
driveIndFormula
.
replace
(
"["
+
baseIndValueMsg
.
getIndId
()+
"]"
,
baseIndValueMsg
.
getIndId
());
//替换公式中的基础指标id为确定指标值
env
.
put
(
baseIndValueMsg
.
getIndId
(),
Double
.
valueOf
(
indValue
));
}
catch
(
Exception
e
)
{
e
.
printStackTrace
();
logger
.
error
(
driveIndFormula
+
";"
+
env
);
}
confirmList
.
add
(
baseIndValueMsg
.
getIsFinish
());
if
(++
numberOfConfirm
>=
indIdSize
)
{
//子actor全部返回
if
(!
confirmList
.
contains
(
0
))
{
//取所有基础指标值没错
//进行考核指标值计算
try
{
String
driveIndValue
=
AviatorEvaluator
.
execute
(
driveIndFormula
,
env
).
toString
();
//保留四位小数
if
(!
driveIndValue
.
equals
(
"NaN"
)
&&
!
driveIndValue
.
equals
(
"Infinite"
))
{
driveIndValue
=
String
.
format
(
"%.4f"
,
new
BigDecimal
(
Double
.
valueOf
(
driveIndValue
)));
}
//判断结果表中是否已存在该结果数据,存在则覆盖
DriveIndCalResultDef
driveIndCalResult
=
driveIndCalResultService
.
findCalResultDataIsExist
(
compareId
,
compareObj
,
driveIndId
,
date
);
if
(
driveIndCalResult
==
null
)
{
driveIndCalResult
=
new
DriveIndCalResultDef
(
compareId
,
driveIndId
,
compareObj
,
date
,
driveIndValue
,
unit
,
"1"
,
"1"
,
"admin"
);
}
else
{
driveIndCalResult
.
setUnit
(
unit
);
driveIndCalResult
.
setValue
(
driveIndValue
);
}
//保存进考核指标结果表中
driveIndCalResultService
.
saveOrUpdate
(
driveIndCalResult
);
//返回指标值回去算平均值和排名
CalIndAverageAndRankMsg
driveIndAverageAndRankMsg
=
new
CalIndAverageAndRankMsg
(
driveIndCalResult
.
getId
(),
compareId
,
driveIndId
,
compareObj
,
date
,
driveIndValue
,
unit
,
indType
,
scoreCardId
,
averageDriveIndFormula
);
driveIndIdCalActor
.
tell
(
driveIndAverageAndRankMsg
,
ActorRef
.
noSender
());
}
catch
(
Exception
e
)
{
//判断结果表中是否已存在该结果数据,存在则覆盖
DriveIndCalResultDef
driveIndCalResult
=
driveIndCalResultService
.
findCalResultDataIsExist
(
compareId
,
compareObj
,
driveIndId
,
date
);
if
(
driveIndCalResult
==
null
)
{
driveIndCalResult
=
new
DriveIndCalResultDef
(
compareId
,
driveIndId
,
compareObj
,
date
,
"NaN"
,
unit
,
"1"
,
"0"
,
"admin"
);
}
else
{
driveIndCalResult
.
setValue
(
"NaN"
);
}
driveIndCalResultService
.
saveOrUpdate
(
driveIndCalResult
);
CalIndAverageAndRankMsg
driveIndAverageAndRankMsg
=
new
CalIndAverageAndRankMsg
(
driveIndCalResult
.
getId
(),
compareId
,
driveIndId
,
compareObj
,
date
,
"NaN"
,
unit
,
indType
,
scoreCardId
,
averageDriveIndFormula
);
driveIndIdCalActor
.
tell
(
driveIndAverageAndRankMsg
,
ActorRef
.
noSender
());
logger
.
error
(
"env:"
+
env
+
";formula:"
+
driveIndFormula
);
}
}
else
{
//返回考核指标因为考核指标公式中的数据项不存在而导致的计算错误标识
CalIndAverageAndRankMsg
driveIndAverageAndRankMsg
=
new
CalIndAverageAndRankMsg
(-
1
,
compareId
,
driveIndId
,
compareObj
,
date
,
"NaN"
,
unit
,
indType
,
scoreCardId
,
averageDriveIndFormula
);
driveIndIdCalActor
.
tell
(
driveIndAverageAndRankMsg
,
ActorRef
.
noSender
());
}
}
}
})
.
build
();
}
}
src/main/java/com/keymobile/indicators/akka/actor/indicators/GetBaseIndValueActor.java
0 → 100644
View file @
798be07b
package
com
.
keymobile
.
indicators
.
akka
.
actor
.
indicators
;
import
java.util.Map
;
import
com.keymobile.indicators.akka.message.indicators.BaseIndValueMsg
;
import
com.keymobile.indicators.akka.message.indicators.GetBaseIndValueMsg
;
import
com.keymobile.indicators.service.hytobacco.IndicatorsValueService
;
import
com.keymobile.indicators.utils.SpringUtil
;
import
akka.actor.AbstractActor
;
public
class
GetBaseIndValueActor
extends
AbstractActor
{
private
IndicatorsValueService
indicatorsValueService
=
SpringUtil
.
getBean
(
IndicatorsValueService
.
class
);
@Override
public
Receive
createReceive
()
{
return
receiveBuilder
()
.
match
(
GetBaseIndValueMsg
.
class
,
getBaseIndValueMsg
->
{
//根据维度值和基础指标id获取指标值
Map
<
String
,
Object
>
indValueMap
=
indicatorsValueService
.
getIndicatorsValue
(
getBaseIndValueMsg
.
getIndId
(),
getBaseIndValueMsg
.
getDimValue
());
if
(
indValueMap
!=
null
)
{
//返回指标值结果
getSender
().
tell
(
new
BaseIndValueMsg
(
getBaseIndValueMsg
.
getIndId
()
,
indValueMap
.
get
(
"value"
).
toString
(),
1
,
""
),
getSelf
());
}
else
{
//返回指标值结果
getSender
().
tell
(
new
BaseIndValueMsg
(
getBaseIndValueMsg
.
getIndId
(),
null
,
0
,
"无法获取指标id:"
+
getBaseIndValueMsg
.
getIndId
()+
";维度:"
+
getBaseIndValueMsg
.
getDimValue
().
get
(
0
).
getDimvalue
()+
","
+
getBaseIndValueMsg
.
getDimValue
().
get
(
1
).
getDimvalue
()+
" 的指标值"
),
getSelf
());
}
})
.
build
();
}
}
src/main/java/com/keymobile/indicators/akka/actor/indicators/StartCompareUnitCalActor.java
0 → 100644
View file @
798be07b
package
com
.
keymobile
.
indicators
.
akka
.
actor
.
indicators
;
import
java.util.ArrayList
;
import
java.util.List
;
import
com.keymobile.indicators.akka.message.indicators.CompareUnitCalMsg
;
import
com.keymobile.indicators.akka.message.indicators.FirstExeConfirmMsg
;
import
com.keymobile.indicators.akka.message.indicators.StartCompareUnitCalMsg
;
import
com.keymobile.indicators.model.entity.indicators.CompareUnitDef
;
import
akka.actor.AbstractActor
;
import
akka.actor.ActorRef
;
import
akka.actor.Props
;
public
class
StartCompareUnitCalActor
extends
AbstractActor
{
private
List
<
CompareUnitDef
>
firstExeList
=
new
ArrayList
<>();
//先执行对标单元list
private
List
<
CompareUnitDef
>
afterExeList
=
new
ArrayList
<>();
//后执行对标单元list
private
int
numberOfConfirm
=
0
;
//定义返回确认消息的子actor
private
int
firstExeUnitSize
=
0
;
//需要先执行对标单元个数
@Override
public
Receive
createReceive
()
{
return
receiveBuilder
()
.
match
(
StartCompareUnitCalMsg
.
class
,
startCompareUnitCalMsg
->
{
List
<
CompareUnitDef
>
compareUnitDefs
=
startCompareUnitCalMsg
.
getCompareInitDefs
();
//将对标单元进行分类,需要先执行的先开始进行对标计算
for
(
CompareUnitDef
unitDef
:
compareUnitDefs
)
{
if
(
"1"
.
equals
(
unitDef
.
getFirstExe
()))
{
firstExeList
.
add
(
unitDef
);
}
else
{
afterExeList
.
add
(
unitDef
);
}
}
if
(!
firstExeList
.
isEmpty
())
{
firstExeUnitSize
=
firstExeList
.
size
();
for
(
CompareUnitDef
unitDef
:
firstExeList
)
{
CompareUnitCalMsg
compareUnitCalMsg
=
new
CompareUnitCalMsg
(
unitDef
);
ActorRef
compareUnitCalActor
=
this
.
getContext
()
.
actorOf
(
Props
.
create
(
CompareUnitCalActor
.
class
,
()->
new
CompareUnitCalActor
(
getSelf
())));
compareUnitCalActor
.
tell
(
compareUnitCalMsg
,
getSelf
());
}
}
else
{
if
(!
afterExeList
.
isEmpty
())
{
for
(
CompareUnitDef
unitDef
:
afterExeList
)
{
CompareUnitCalMsg
compareUnitCalMsg
=
new
CompareUnitCalMsg
(
unitDef
);
ActorRef
compareUnitCalActor
=
this
.
getContext
()
.
actorOf
(
Props
.
create
(
CompareUnitCalActor
.
class
,
()->
new
CompareUnitCalActor
(
getSelf
())));
compareUnitCalActor
.
tell
(
compareUnitCalMsg
,
getSelf
());
}
}
}
})
.
match
(
FirstExeConfirmMsg
.
class
,
firstExeConfirmMsg
->
{
if
(++
numberOfConfirm
>=
firstExeUnitSize
)
{
//全部先执行的子actor全部返回
//再执行后执行的actor
if
(!
afterExeList
.
isEmpty
())
{
for
(
CompareUnitDef
unitDef
:
afterExeList
)
{
CompareUnitCalMsg
compareUnitCalMsg
=
new
CompareUnitCalMsg
(
unitDef
);
ActorRef
compareUnitCalActor
=
this
.
getContext
()
.
actorOf
(
Props
.
create
(
CompareUnitCalActor
.
class
,
()->
new
CompareUnitCalActor
(
getSelf
())));
compareUnitCalActor
.
tell
(
compareUnitCalMsg
,
getSelf
());
}
}
}
})
.
build
();
}
}
src/main/java/com/keymobile/indicators/akka/message/indicators/BaseIndValueMsg.java
0 → 100644
View file @
798be07b
package
com
.
keymobile
.
indicators
.
akka
.
message
.
indicators
;
import
java.io.Serializable
;
public
class
BaseIndValueMsg
implements
Serializable
{
/**
*
*/
private
static
final
long
serialVersionUID
=
1L
;
private
String
indId
;
//基础指标id
private
String
value
;
//指标值
//是否完成标识:1.完成 0.未完成
private
Integer
isFinish
;
//日志报告
private
String
confirmMessage
;
public
BaseIndValueMsg
(
String
indId
,
String
value
,
Integer
isFinish
,
String
confirmMessage
)
{
this
.
indId
=
indId
;
this
.
value
=
value
;
this
.
isFinish
=
isFinish
;
this
.
confirmMessage
=
confirmMessage
;
}
public
String
getIndId
()
{
return
indId
;
}
public
void
setIndId
(
String
indId
)
{
this
.
indId
=
indId
;
}
public
String
getValue
()
{
return
value
;
}
public
void
setValue
(
String
value
)
{
this
.
value
=
value
;
}
public
Integer
getIsFinish
()
{
return
isFinish
;
}
public
void
setIsFinish
(
Integer
isFinish
)
{
this
.
isFinish
=
isFinish
;
}
public
String
getConfirmMessage
()
{
return
confirmMessage
;
}
public
void
setConfirmMessage
(
String
confirmMessage
)
{
this
.
confirmMessage
=
confirmMessage
;
}
}
src/main/java/com/keymobile/indicators/akka/message/indicators/CalIndAverageAndRankMsg.java
0 → 100644
View file @
798be07b
package
com
.
keymobile
.
indicators
.
akka
.
message
.
indicators
;
import
java.io.Serializable
;
public
class
CalIndAverageAndRankMsg
implements
Serializable
{
/**
*
*/
private
static
final
long
serialVersionUID
=
1L
;
private
Integer
id
;
//id
private
String
compareId
;
private
String
driveIndId
;
private
String
compareObj
;
private
Integer
date
;
private
String
driveIndValue
;
private
String
unit
;
private
String
indType
;
private
Integer
scoreCardId
;
private
String
indFormula
;
public
CalIndAverageAndRankMsg
(
Integer
id
,
String
compareId
,
String
driveIndId
,
String
compareObj
,
Integer
date
,
String
driveIndValue
,
String
unit
,
String
indType
,
Integer
scoreCardId
,
String
indFormula
)
{
this
.
id
=
id
;
this
.
compareId
=
compareId
;
this
.
driveIndId
=
driveIndId
;
this
.
compareObj
=
compareObj
;
this
.
date
=
date
;
this
.
driveIndValue
=
driveIndValue
;
this
.
unit
=
unit
;
this
.
indType
=
indType
;
this
.
scoreCardId
=
scoreCardId
;
this
.
indFormula
=
indFormula
;
}
public
Integer
getId
()
{
return
id
;
}
public
void
setId
(
Integer
id
)
{
this
.
id
=
id
;
}
public
String
getCompareId
()
{
return
compareId
;
}
public
void
setCompareId
(
String
compareId
)
{
this
.
compareId
=
compareId
;
}
public
String
getDriveIndId
()
{
return
driveIndId
;
}
public
void
setDriveIndId
(
String
driveIndId
)
{
this
.
driveIndId
=
driveIndId
;
}
public
String
getCompareObj
()
{
return
compareObj
;
}
public
void
setCompareObj
(
String
compareObj
)
{
this
.
compareObj
=
compareObj
;
}
public
Integer
getDate
()
{
return
date
;
}
public
void
setDate
(
Integer
date
)
{
this
.
date
=
date
;
}
public
String
getDriveIndValue
()
{
return
driveIndValue
;
}
public
void
setDriveIndValue
(
String
driveIndValue
)
{
this
.
driveIndValue
=
driveIndValue
;
}
public
String
getUnit
()
{
return
unit
;
}
public
void
setUnit
(
String
unit
)
{
this
.
unit
=
unit
;
}
public
String
getIndType
()
{
return
indType
;
}
public
void
setIndType
(
String
indType
)
{
this
.
indType
=
indType
;
}
public
Integer
getScoreCardId
()
{
return
scoreCardId
;
}
public
void
setScoreCardId
(
Integer
scoreCardId
)
{
this
.
scoreCardId
=
scoreCardId
;
}
public
String
getIndFormula
()
{
return
indFormula
;
}
public
void
setIndFormula
(
String
indFormula
)
{
this
.
indFormula
=
indFormula
;
}
}
src/main/java/com/keymobile/indicators/akka/message/indicators/CompareUnitCalMsg.java
0 → 100644
View file @
798be07b
package
com
.
keymobile
.
indicators
.
akka
.
message
.
indicators
;
import
java.io.Serializable
;
import
com.keymobile.indicators.model.entity.indicators.CompareUnitDef
;
public
class
CompareUnitCalMsg
implements
Serializable
{
/**
*
*/
private
static
final
long
serialVersionUID
=
1L
;
private
CompareUnitDef
compareUnitDef
;
public
CompareUnitCalMsg
(
CompareUnitDef
compareUnitDef
)
{
this
.
compareUnitDef
=
compareUnitDef
;
}
public
CompareUnitDef
getCompareUnitDef
()
{
return
compareUnitDef
;
}
public
void
setCompareUnitDef
(
CompareUnitDef
compareUnitDef
)
{
this
.
compareUnitDef
=
compareUnitDef
;
}
}
src/main/java/com/keymobile/indicators/akka/message/indicators/DriveIndIdCalMsg.java
0 → 100644
View file @
798be07b
package
com
.
keymobile
.
indicators
.
akka
.
message
.
indicators
;
import
java.io.Serializable
;
import
java.util.ArrayList
;
import
java.util.List
;
public
class
DriveIndIdCalMsg
implements
Serializable
{
/**
*
*/
private
static
final
long
serialVersionUID
=
1L
;
private
String
compareId
;
private
String
indId
;
private
List
<
String
>
compareObj
=
new
ArrayList
<>();
private
Integer
date
;
private
String
firstExe
;
private
String
averageObj
;
//平均分参考对象
public
DriveIndIdCalMsg
(
String
compareId
,
String
indId
,
List
<
String
>
compareObj
,
Integer
date
,
String
firstExe
,
String
averageObj
)
{
this
.
compareId
=
compareId
;
this
.
indId
=
indId
;
this
.
compareObj
.
addAll
(
compareObj
);
this
.
date
=
date
;
this
.
firstExe
=
firstExe
;
this
.
averageObj
=
averageObj
;
}
public
String
getCompareId
()
{
return
compareId
;
}
public
void
setCompareId
(
String
compareId
)
{
this
.
compareId
=
compareId
;
}
public
String
getIndId
()
{
return
indId
;
}
public
void
setIndId
(
String
indId
)
{
this
.
indId
=
indId
;
}
public
List
<
String
>
getCompareObj
()
{
return
compareObj
;
}
public
void
setCompareObj
(
List
<
String
>
compareObj
)
{
this
.
compareObj
.
addAll
(
compareObj
);
}
public
Integer
getDate
()
{
return
date
;
}
public
void
setDate
(
Integer
date
)
{
this
.
date
=
date
;
}
public
String
getAverageObj
()
{
return
averageObj
;
}
public
void
setAverageObj
(
String
averageObj
)
{
this
.
averageObj
=
averageObj
;
}
public
String
getFirstExe
()
{
return
firstExe
;
}
public
void
setFirstExe
(
String
firstExe
)
{
this
.
firstExe
=
firstExe
;
}
}
src/main/java/com/keymobile/indicators/akka/message/indicators/DriveIndIdObjCalMsg.java
0 → 100644
View file @
798be07b
package
com
.
keymobile
.
indicators
.
akka
.
message
.
indicators
;
import
java.io.Serializable
;
import
java.util.ArrayList
;
import
java.util.List
;
import
com.keymobile.indicators.model.entity.DimValue
;
public
class
DriveIndIdObjCalMsg
implements
Serializable
{
/**
*
*/
private
static
final
long
serialVersionUID
=
1L
;
private
String
compareId
;
private
String
indId
;
private
String
compareObj
;
private
Integer
date
;
private
List
<
DimValue
>
dimValues
=
new
ArrayList
<>();
//维度值list
public
DriveIndIdObjCalMsg
(
String
compareId
,
String
indId
,
String
compareObj
,
Integer
date
,
List
<
DimValue
>
dimValues
)
{
this
.
compareId
=
compareId
;
this
.
indId
=
indId
;
this
.
compareObj
=
compareObj
;
this
.
date
=
date
;
this
.
dimValues
.
addAll
(
dimValues
);
}
public
String
getCompareId
()
{
return
compareId
;
}
public
void
setCompareId
(
String
compareId
)
{
this
.
compareId
=
compareId
;
}
public
String
getIndId
()
{
return
indId
;
}
public
void
setIndId
(
String
indId
)
{
this
.
indId
=
indId
;
}
public
String
getCompareObj
()
{
return
compareObj
;
}
public
void
setCompareObj
(
String
compareObj
)
{
this
.
compareObj
=
compareObj
;
}
public
Integer
getDate
()
{
return
date
;
}
public
void
setDate
(
Integer
date
)
{
this
.
date
=
date
;
}
public
List
<
DimValue
>
getDimValues
()
{
return
dimValues
;
}
public
void
setDimValues
(
List
<
DimValue
>
dimValues
)
{
this
.
dimValues
.
addAll
(
dimValues
);
}
}
src/main/java/com/keymobile/indicators/akka/message/indicators/FirstExeConfirmMsg.java
0 → 100644
View file @
798be07b
package
com
.
keymobile
.
indicators
.
akka
.
message
.
indicators
;
import
java.io.Serializable
;
public
class
FirstExeConfirmMsg
implements
Serializable
{
/**
*
*/
private
static
final
long
serialVersionUID
=
1L
;
//是否完成标识:1.完成 0.未完成
private
Integer
isFinish
;
//日志报告
private
String
confirmMessage
;
public
FirstExeConfirmMsg
(
Integer
isFinish
,
String
confirmMessage
)
{
this
.
isFinish
=
isFinish
;
this
.
confirmMessage
=
confirmMessage
;
}
public
Integer
getIsFinish
()
{
return
isFinish
;
}
public
void
setIsFinish
(
Integer
isFinish
)
{
this
.
isFinish
=
isFinish
;
}
public
String
getConfirmMessage
()
{
return
confirmMessage
;
}
public
void
setConfirmMessage
(
String
confirmMessage
)
{
this
.
confirmMessage
=
confirmMessage
;
}
}
src/main/java/com/keymobile/indicators/akka/message/indicators/GetBaseIndValueMsg.java
0 → 100644
View file @
798be07b
package
com
.
keymobile
.
indicators
.
akka
.
message
.
indicators
;
import
java.io.Serializable
;
import
java.util.ArrayList
;
import
java.util.List
;
import
com.keymobile.indicators.model.entity.DimValue
;
public
class
GetBaseIndValueMsg
implements
Serializable
{
/**
*
*/
private
static
final
long
serialVersionUID
=
1L
;
private
String
indId
;
//基础指标id
private
List
<
DimValue
>
dimValue
=
new
ArrayList
<>();
//维度值
public
GetBaseIndValueMsg
(
String
indId
,
List
<
DimValue
>
dimValue
)
{
this
.
indId
=
indId
;
this
.
dimValue
.
addAll
(
dimValue
);
}
public
List
<
DimValue
>
getDimValue
()
{
return
dimValue
;
}
public
void
setDimValue
(
List
<
DimValue
>
dimValue
)
{
this
.
dimValue
.
addAll
(
dimValue
);
}
public
String
getIndId
()
{
return
indId
;
}
public
void
setIndId
(
String
indId
)
{
this
.
indId
=
indId
;
}
}
src/main/java/com/keymobile/indicators/akka/message/indicators/StartCompareUnitCalMsg.java
0 → 100644
View file @
798be07b
package
com
.
keymobile
.
indicators
.
akka
.
message
.
indicators
;
import
java.io.Serializable
;
import
java.util.ArrayList
;
import
java.util.List
;
import
com.keymobile.indicators.model.entity.indicators.CompareUnitDef
;
public
class
StartCompareUnitCalMsg
implements
Serializable
{
/**
*
*/
private
static
final
long
serialVersionUID
=
1L
;
private
List
<
CompareUnitDef
>
compareInitDefs
=
new
ArrayList
<>();
public
StartCompareUnitCalMsg
(
List
<
CompareUnitDef
>
compareInitDefs
)
{
this
.
compareInitDefs
.
addAll
(
compareInitDefs
);
}
public
List
<
CompareUnitDef
>
getCompareInitDefs
()
{
return
compareInitDefs
;
}
public
void
setCompareInitDefs
(
List
<
CompareUnitDef
>
compareInitDefs
)
{
this
.
compareInitDefs
.
addAll
(
compareInitDefs
);
}
}
src/main/java/com/keymobile/indicators/api/hytobacco/IndicatorsDefCtrl.java
View file @
798be07b
...
@@ -11,6 +11,7 @@ import org.springframework.web.bind.annotation.RequestParam;
...
@@ -11,6 +11,7 @@ import org.springframework.web.bind.annotation.RequestParam;
import
org.springframework.web.bind.annotation.RestController
;
import
org.springframework.web.bind.annotation.RestController
;
import
com.keymobile.indicators.model.entity.indicators.BaseIndDef
;
import
com.keymobile.indicators.model.entity.indicators.BaseIndDef
;
import
com.keymobile.indicators.model.entity.indicators.CompareUnitDef
;
import
com.keymobile.indicators.model.entity.indicators.DriveIndDef
;
import
com.keymobile.indicators.model.entity.indicators.DriveIndDef
;
import
com.keymobile.indicators.service.hytobacco.BaseIndDefService
;
import
com.keymobile.indicators.service.hytobacco.BaseIndDefService
;
import
com.keymobile.indicators.service.hytobacco.DriveIndCalResultService
;
import
com.keymobile.indicators.service.hytobacco.DriveIndCalResultService
;
...
@@ -119,4 +120,10 @@ public class IndicatorsDefCtrl {
...
@@ -119,4 +120,10 @@ public class IndicatorsDefCtrl {
@RequestParam
String
driveIndIdsString
,
@RequestParam
int
date
)
{
@RequestParam
String
driveIndIdsString
,
@RequestParam
int
date
)
{
driveIndCalResultService
.
calculateComp
(
compareId
,
compareObjsString
,
driveIndIdsString
,
date
);
driveIndCalResultService
.
calculateComp
(
compareId
,
compareObjsString
,
driveIndIdsString
,
date
);
}
}
@ApiOperation
(
value
=
"对标单元综合计算"
,
notes
=
"对标单元综合计算"
)
@PostMapping
(
value
=
"/compareUnitListCal"
)
public
void
compareUnitListCal
(
@RequestBody
List
<
CompareUnitDef
>
compareUnitList
)
{
driveIndCalResultService
.
compareUnitListCal
(
compareUnitList
);
}
}
}
src/main/java/com/keymobile/indicators/model/entity/indicators/CompareUnitDef.java
0 → 100644
View file @
798be07b
package
com
.
keymobile
.
indicators
.
model
.
entity
.
indicators
;
import
lombok.Data
;
/**
* author:zhangkb time:2020-6-23 desc:定义对标单元实体
*/
@Data
public
class
CompareUnitDef
{
private
String
compareId
;
private
String
compareObjs
;
//对标对象,多个用逗号隔开
private
String
indIds
;
//对标指标,多个用逗号隔开
private
Integer
date
;
//日期
private
String
firstExe
;
//是否先执行 0:否 1:是
private
String
averageObj
;
//平均分参考对象(主要场景:省对市考核中会有基础指标值会同级全省的值,然后对于不分组的对标单元的平均分参考的是全省的值算出的平均分)
private
String
objScoreRuleId
;
//单位规则评分id
}
src/main/java/com/keymobile/indicators/service/hytobacco/DriveIndCalResultService.java
View file @
798be07b
...
@@ -2,6 +2,7 @@ package com.keymobile.indicators.service.hytobacco;
...
@@ -2,6 +2,7 @@ package com.keymobile.indicators.service.hytobacco;
import
java.util.Arrays
;
import
java.util.Arrays
;
import
java.util.HashMap
;
import
java.util.HashMap
;
import
java.util.List
;
import
java.util.Map
;
import
java.util.Map
;
import
org.slf4j.Logger
;
import
org.slf4j.Logger
;
...
@@ -9,8 +10,11 @@ import org.slf4j.LoggerFactory;
...
@@ -9,8 +10,11 @@ import org.slf4j.LoggerFactory;
import
org.springframework.beans.factory.annotation.Autowired
;
import
org.springframework.beans.factory.annotation.Autowired
;
import
org.springframework.stereotype.Service
;
import
org.springframework.stereotype.Service
;
import
com.keymobile.indicators.akka.actor.indicators.StartCompareUnitCalActor
;
import
com.keymobile.indicators.akka.actor.specific.DriveIndCompareObjActor
;
import
com.keymobile.indicators.akka.actor.specific.DriveIndCompareObjActor
;
import
com.keymobile.indicators.akka.message.indicators.StartCompareUnitCalMsg
;
import
com.keymobile.indicators.akka.message.specific.DriveIndCompareObjMsg
;
import
com.keymobile.indicators.akka.message.specific.DriveIndCompareObjMsg
;
import
com.keymobile.indicators.model.entity.indicators.CompareUnitDef
;
import
com.keymobile.indicators.model.entity.indicators.DriveIndCalResultDef
;
import
com.keymobile.indicators.model.entity.indicators.DriveIndCalResultDef
;
import
com.keymobile.indicators.model.mapper.indmapper.DriveIndCalResultDefMapper
;
import
com.keymobile.indicators.model.mapper.indmapper.DriveIndCalResultDefMapper
;
...
@@ -61,4 +65,16 @@ public class DriveIndCalResultService {
...
@@ -61,4 +65,16 @@ public class DriveIndCalResultService {
driveIndCompareObjActor
.
tell
(
driveIndCompareObjMsg
,
ActorRef
.
noSender
());
driveIndCompareObjActor
.
tell
(
driveIndCompareObjMsg
,
ActorRef
.
noSender
());
logger
.
info
(
"开始对标计算..."
);
logger
.
info
(
"开始对标计算..."
);
}
}
public
void
compareUnitListCal
(
List
<
CompareUnitDef
>
compareUnitList
)
{
if
(!
compareUnitList
.
isEmpty
())
{
//启动回流actor
final
ActorSystem
system
=
ActorSystem
.
create
(
"CompareUnitCalAkka"
);
//创建akka
StartCompareUnitCalMsg
startCompareUnitCalMsg
=
new
StartCompareUnitCalMsg
(
compareUnitList
);
ActorRef
startCompareUnitCalActor
=
system
.
actorOf
(
Props
.
create
(
StartCompareUnitCalActor
.
class
,()->
new
StartCompareUnitCalActor
()));
startCompareUnitCalActor
.
tell
(
startCompareUnitCalMsg
,
ActorRef
.
noSender
());
logger
.
info
(
"开始对标单元综合计算..."
);
}
}
}
}
src/main/java/com/keymobile/indicators/utils/CalculateUtils.java
View file @
798be07b
...
@@ -213,18 +213,18 @@ public class CalculateUtils {
...
@@ -213,18 +213,18 @@ public class CalculateUtils {
}
}
public
static
void
main
(
String
[]
args
)
{
public
static
void
main
(
String
[]
args
)
{
Map
<
String
,
String
>
map
=
new
HashMap
<>();
//
Map<String,String> map = new HashMap<>();
map
.
put
(
"1001"
,
"NaN"
);
//
map.put("1001", "NaN");
map
.
put
(
"1002"
,
"NaN"
);
//
map.put("1002", "NaN");
map
.
put
(
"1003"
,
"NaN"
);
//
map.put("1003", "NaN");
map
.
put
(
"1004"
,
"NaN"
);
//
map.put("1004", "NaN");
map
.
put
(
"1005"
,
"NaN"
);
//
map.put("1005", "NaN");
map
.
put
(
"1006"
,
"NaN"
);
//
map.put("1006", "NaN");
map
.
put
(
"1007"
,
"NaN"
);
//
map.put("1007", "NaN");
map
.
put
(
"1008"
,
"NaN"
);
//
map.put("1008", "NaN");
CalculateUtils
cal
=
new
CalculateUtils
();
//
CalculateUtils cal = new CalculateUtils();
Map
<
String
,
Integer
>
result
=
cal
.
rankValue
(
map
,
"1"
);
//
Map<String,Integer> result = cal.rankValue(map, "1");
System
.
out
.
println
(
result
);
//
System.out.println(result);
//
//
// String formula = "([1001]+[1002])/2";
// String formula = "([1001]+[1002])/2";
// formula = formula.replace("[1001]", "3");
// formula = formula.replace("[1001]", "3");
...
...
Write
Preview
Markdown
is supported
0%
Try again
or
attach a new file
Attach a file
Cancel
You are about to add
0
people
to the discussion. Proceed with caution.
Finish editing this message first!
Cancel
Please
register
or
sign in
to comment