Commit d6798e5b by zhangkb

修改单位评分规则算法逻辑以及单位评分结果添加字段

parent 4d398ce0
......@@ -128,13 +128,13 @@ public class CompareUnitCalActor extends AbstractActor{
startCompareUnitCalActor.tell(confirmMsg, ActorRef.noSender());
}else {
//计算单位得分(如果是caltype为0的单位评分规则直接计算单位得分)
if(objScoreRuleId!=null) {
ScoreRule scoreRule = scoreRuleServer.getById(objScoreRuleId);
if(scoreRule!=null && "0".equals(scoreRule.getCalType())) {
scoreRuleServer.calObjScore(compareId, indIdsList, compareObjsList,
date, scoreRule.getId());
}
}
//if(objScoreRuleId!=null) {
//ScoreRule scoreRule = scoreRuleServer.getById(objScoreRuleId);
//if(scoreRule!=null && "0".equals(scoreRule.getCalType())) {
//scoreRuleServer.calObjScore(compareId, indIdsList, compareObjsList,
//date, scoreRule.getId());
//}
//}
//记录日志
if(compCalLog!=null) {
......
......@@ -62,14 +62,14 @@ public class StartCompareUnitCalActor extends AbstractActor{
}else {
afterExeList.add(unitDef);
}
//将对标单元关联的单位评分规则不为空且单位评分规则caltype不为0的对标单元加到calTypeExeList中
//单位评分规则不为空的对标单元加到calTypeExeList中
if(unitDef.getObjScoreRuleId()!=null) {
ScoreRule scoreRule = scoreRuleServer.getById(unitDef.getObjScoreRuleId());
if(scoreRule!=null) {
if(scoreRule.getCalType()!=null && !"0".equals(scoreRule.getCalType())) {
//ScoreRule scoreRule = scoreRuleServer.getById(unitDef.getObjScoreRuleId());
//if(scoreRule!=null) {
//if(scoreRule.getCalType()!=null && !"0".equals(scoreRule.getCalType())) {
calTypeExeList.add(unitDef);
}
}
//}
//}
}
}
firstExeUnitSize = firstExeList.size();
......@@ -113,7 +113,7 @@ public class StartCompareUnitCalActor extends AbstractActor{
logger.info("进行后执行对标单元计算....");
}else {
if(!calTypeExeList.isEmpty()) {
logger.info("计算caltype不为0的对标单元单位评分......");
logger.info("计算对标单元单位评分......");
for(CompareUnitDef unitDef : calTypeExeList) {
scoreRuleServer.calObjScore(unitDef.getCompareId(),
Arrays.asList(unitDef.getIndIds().split(",")),
......@@ -131,7 +131,7 @@ public class StartCompareUnitCalActor extends AbstractActor{
.match(AfterExeConfirmMsg.class, afterExeConfirmMsg -> {
if (++numberOfAfterConfirm >= afterExeUnitSize) {//全部后执行的子actor全部返回
if(!calTypeExeList.isEmpty()) {
logger.info("计算caltype不为0的对标单元单位评分......");
logger.info("计算对标单元单位评分......");
for(CompareUnitDef unitDef : calTypeExeList) {
scoreRuleServer.calObjScore(unitDef.getCompareId(),
Arrays.asList(unitDef.getIndIds().split(",")),
......
......@@ -24,4 +24,6 @@ public class ObjScoreCalResult {
private Integer date;//对标日期
private String scoreValue;//考核对象得分
private String improveValue;//考核对象改善得分
private String scoreSumValue;//指标总积分
private Integer indCount;//指标个数
}
......@@ -121,21 +121,24 @@ public class ScoreRuleService {
}
}
//计算组内考核指标平均值或者总和 type:0 计算组内所有考核指标平均数 3指标总得分
private ObjScoreCalResult calGroupIndAverageOrSum(ObjScoreCalResult objResult,ScoreRule scoreRule,List<String> indIds,
//计算组内考核指标平均值或者总和 type:0 计算地区所有纳入考核指标平均数 3指标总得分
private ObjScoreCalResult calGroupIndAverageOrSum(ObjScoreCalResult objResult,ScoreRule scoreRule,
String compareObj,int date,String type){
objResult.setCompareObj(compareObj);
objResult.setScoreValue("0.0");
objResult.setImproveValue("0.0");
objResult.setDate(date);
objResult.setIndIds(String.join(",", indIds));
//objResult.setIndIds(String.join(",", indIds));
//根据日期,对标对象和考核的指标获取考核指标结果详情
Map<String,Object> paremMap = new HashMap<>();
paremMap.put("compareObj", compareObj);
paremMap.put("date", date);
paremMap.put("indIds", indIds);
//Map<String,Object> paremMap = new HashMap<>();
//paremMap.put("compareObj", compareObj);
//paremMap.put("date", date);
//paremMap.put("indIds", indIds);
//List<DriveIndCalResultDef> calResults = driveIndCalResultDefMapper.
//findByCompareObjAndDateAndIndIdIn(paremMap);
List<DriveIndCalResultDef> calResults = driveIndCalResultDefMapper.
findByCompareObjAndDateAndIndIdIn(paremMap);
findByCompareObjAndDate(compareObj, date);
int indCount = 0;//定义用户记录纳入考核指标个数
List<String> values = new ArrayList<>();
List<String> improveValues = new ArrayList<>();
if(!calResults.isEmpty()) {
......@@ -149,6 +152,7 @@ public class ScoreRuleService {
//如果考核指标是参与单位计分的
if(StringUtils.isBlank(driveIndDef.getIsUnitCalScore()) ||
"1".equals(driveIndDef.getIsUnitCalScore())) {
indCount += 1;
//得分类型:0 指标值直接参与计算
if("0".equals(scoreRule.getScoreType())) {
if(!"NaN".equals(calResult.getValue()) && !"Infinite".equals(calResult.getValue())
......@@ -191,6 +195,11 @@ public class ScoreRuleService {
averageImproveValue = CalculateUtils.sumValue(improveValues);
}
}
//计算总积分
Double scoreSumValue = (Double.parseDouble(CalculateUtils.sumValue(values))+
Double.parseDouble(CalculateUtils.sumValue(improveValues)));
objResult.setScoreSumValue(String.valueOf(scoreSumValue));
objResult.setIndCount(indCount);
objResult.setScoreValue(averageValue);
objResult.setImproveValue(averageImproveValue);
}
......@@ -384,10 +393,10 @@ public class ScoreRuleService {
if(objScoreCalResult == null) {
objScoreCalResult = new ObjScoreCalResult();
}
//计算类型:0 计算组内所有考核指标平均数
//计算类型:0 地区所有纳入评价的考核指标平均数
if("0".equals(scoreRule.getCalType())) {
objScoreCalResult = this.calGroupIndAverageOrSum(objScoreCalResult, scoreRule,
indIds, compareObj, date, scoreRule.getCalType());
compareObj, date, scoreRule.getCalType());
}else if("1".equals(scoreRule.getCalType())) {//1 根据目录类别分类算平均分后根据权重计算考核指标
objScoreCalResult = this.calIndCatalogTypeAverage(objScoreCalResult, scoreRule,
compareObj, date);
......@@ -396,7 +405,7 @@ public class ScoreRuleService {
compareObj, date);
}else {//3:指标总得分
objScoreCalResult = this.calGroupIndAverageOrSum(objScoreCalResult, scoreRule,
indIds, compareObj, date, scoreRule.getCalType());
compareObj, date, scoreRule.getCalType());
}
objScoreCalResult.setCompareId(compareId);
......
......@@ -11,12 +11,13 @@
<insert id="batchSave" parameterType="java.util.List">
insert into obj_score_cal_result(
compare_id, compare_obj, compare_obj_desc, ind_ids, date, score_value, improve_value)
compare_id, compare_obj, compare_obj_desc, ind_ids, date, score_value, improve_value,
score_sum_value, ind_count)
values
<foreach collection="datas" item="val" separator=",">
(
#{val.compareId}, #{val.compareObj}, #{val.compareObjDesc}, #{val.indIds}, #{val.date},
#{val.scoreValue},#{val.improveValue})
#{val.scoreValue},#{val.improveValue},#{val.scoreSumValue},#{val.indCount})
</foreach>
</insert>
......@@ -45,6 +46,12 @@
<if test="val.improveValue != null">
improve_value = #{val.improveValue},
</if>
<if test="val.scoreSumValue != null">
score_sum_value = #{val.scoreSumValue},
</if>
<if test="val.indCount != null">
ind_count = #{val.indCount},
</if>
</set>
where id = ${val.id}
</foreach>
......
Markdown is supported
0% or
You are about to add 0 people to the discussion. Proceed with caution.
Finish editing this message first!
Please register or to comment