Commit 4b06f9d9 by zhangkb

把mongodb基础项数据表和考核指标结果表转移到mysql库中

parent 9853dffb
......@@ -18,7 +18,7 @@ import com.keymobile.indicators.akka.message.DriveIndCalculateMsg;
import com.keymobile.indicators.akka.message.IndGetValueMsg;
import com.keymobile.indicators.akka.message.IndValueMsg;
import com.keymobile.indicators.akka.message.specific.DriveIndAverageAndRankMsg;
import com.keymobile.indicators.model.entity.DriveIndCalResult;
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;
......@@ -148,16 +148,16 @@ public class DriveIndCalculateActor extends AbstractActor{
new BigDecimal(Double.valueOf(driveIndValue)));
}
//判断结果表中是否已存在该结果数据,存在则覆盖
DriveIndCalResult driveIndCalResult = driveIndCalResultService.
DriveIndCalResultDef driveIndCalResult = driveIndCalResultService.
findCalResultDataIsExist(compareId, compareObj, driveIndId, date);
if(driveIndCalResult==null) {
driveIndCalResult = new DriveIndCalResult(compareId,
driveIndCalResult = new DriveIndCalResultDef(compareId,
driveIndId,compareObj,date,driveIndValue,unit,"1","1","admin");
}else {
driveIndCalResult.setValue(driveIndValue);
}
//保存进考核指标结果表中
driveIndCalResult = driveIndCalResultService.saveOrUpdate(driveIndCalResult);
driveIndCalResultService.saveOrUpdate(driveIndCalResult);
//返回指标值回去算平均值和排名
DriveIndAverageAndRankMsg driveIndAverageAndRankMsg =
......@@ -166,9 +166,9 @@ public class DriveIndCalculateActor extends AbstractActor{
unit,indType,markType,averageDriveIndFormula);
driveIndCalculateRegionActor.tell(driveIndAverageAndRankMsg,ActorRef.noSender());
} catch (Exception e) {
DriveIndCalResult driveIndCalResult = new DriveIndCalResult(compareId,
DriveIndCalResultDef driveIndCalResult = new DriveIndCalResultDef(compareId,
driveIndId,compareObj,date,"0(Error)",unit,"1","0","admin");
driveIndCalResult = driveIndCalResultService.saveOrUpdate(driveIndCalResult);
driveIndCalResultService.saveOrUpdate(driveIndCalResult);
DriveIndAverageAndRankMsg driveIndAverageAndRankMsg =
new DriveIndAverageAndRankMsg(driveIndCalResult.getId(),
compareId,driveIndId,compareObj,date,"0(Error)",
......
......@@ -11,7 +11,7 @@ import com.keymobile.indicators.akka.message.DriveIndCalculateMsg;
import com.keymobile.indicators.akka.message.specific.DriveIndAverageAndRankMsg;
import com.keymobile.indicators.akka.message.specific.DriveIndCalculateRegionMsg;
import com.keymobile.indicators.model.entity.DimValue;
import com.keymobile.indicators.model.entity.DriveIndCalResult;
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;
......@@ -67,7 +67,7 @@ public class DriveIndCalculateRegionActor extends AbstractActor{
})
.match(DriveIndAverageAndRankMsg.class,driveIndAverageAndRankMsg -> {
String value = driveIndAverageAndRankMsg.getDriveIndValue();
String id = driveIndAverageAndRankMsg.getId();
String id = String.valueOf(driveIndAverageAndRankMsg.getId());
String indType = driveIndAverageAndRankMsg.getIndType();
String markType = driveIndAverageAndRankMsg.getMarkType();//评分卡id
valueMap.put(id, value);
......@@ -78,7 +78,7 @@ public class DriveIndCalculateRegionActor extends AbstractActor{
//考核地区只有一个“全省”的情况下
if(!"全省".equals(driveIndAverageAndRankMsg.getCompareObj())) {
//查询有没有全省的考核指标数据
DriveIndCalResult provinceDriveIndCalResult = driveIndCalResultService.findCompareObjInfo(
DriveIndCalResultDef provinceDriveIndCalResult = driveIndCalResultService.findCompareObjInfo(
driveIndAverageAndRankMsg.getDriveIndId(), driveIndAverageAndRankMsg.getDate(),
"全省");
String actualAverage = "0.0";
......@@ -96,7 +96,8 @@ public class DriveIndCalculateRegionActor extends AbstractActor{
Map<String,Integer> rankValue = CalculateUtils.rankValue(valueMap, indType);
for(Entry<String,Integer> entry : rankValue.entrySet()) {
//根据id获取指标值结果
DriveIndCalResult driveIndCalResult = driveIndCalResultService.findById(entry.getKey());
DriveIndCalResultDef driveIndCalResult = driveIndCalResultService.
findById(Integer.parseInt(entry.getKey()));
if(driveIndCalResult!=null) {
driveIndCalResult.setAverage(average);
driveIndCalResult.setRank(entry.getValue());
......@@ -107,7 +108,8 @@ public class DriveIndCalculateRegionActor extends AbstractActor{
//根据评分卡算指标分数
for(Entry<String,Integer> entry : rankValue.entrySet()) {
//根据id获取指标值结果
DriveIndCalResult driveIndCalResult = driveIndCalResultService.findById(entry.getKey());
DriveIndCalResultDef driveIndCalResult = driveIndCalResultService.
findById(Integer.parseInt(entry.getKey()));
if(driveIndCalResult!=null) {
//计算分数
Map<String,String> scoreMap = indScorecardService.calculateIndiScore(
......
......@@ -8,19 +8,19 @@ public class DriveIndAverageAndRankMsg implements Serializable{
*/
private static final long serialVersionUID = 1L;
private String id;//mongodb id
private Integer id;//id
private String compareId;
private String driveIndId;
private String compareObj;
private int date;
private Integer date;
private String driveIndValue;
private String unit;
private String indType;
private String markType;
private String indFormula;
public DriveIndAverageAndRankMsg(String id,String compareId,String driveIndId,String compareObj,
int date,String driveIndValue,String unit,String indType,String markType,String indFormula) {
public DriveIndAverageAndRankMsg(Integer id,String compareId,String driveIndId,String compareObj,
Integer date,String driveIndValue,String unit,String indType,String markType,String indFormula) {
this.id = id;
this.compareId = compareId;
this.driveIndId = driveIndId;
......@@ -57,11 +57,11 @@ public class DriveIndAverageAndRankMsg implements Serializable{
this.compareObj = compareObj;
}
public int getDate() {
public Integer getDate() {
return date;
}
public void setDate(int date) {
public void setDate(Integer date) {
this.date = date;
}
......@@ -81,11 +81,11 @@ public class DriveIndAverageAndRankMsg implements Serializable{
this.unit = unit;
}
public String getId() {
public Integer getId() {
return id;
}
public void setId(String id) {
public void setId(Integer id) {
this.id = id;
}
......
package com.keymobile.indicators.model.entity;
import java.io.Serializable;
import java.util.Date;
import org.springframework.data.annotation.Id;
import org.springframework.data.mongodb.core.mapping.Document;
import com.keymobile.indicators.utils.DateUtils;
import lombok.Data;
/**
*author:zhangkb time:2020-4-27 desc:考核指标计算结果表
*/
@Data
@Document(collection="drive_ind_cal_result")
public class DriveIndCalResult implements Serializable{
/**
*
*/
private static final long serialVersionUID = 1L;
@Id
private String id;
private String compareId;
private String indId;
private String compareObj;
private int date;
private String value;
private String unit;
private String type;//0:季度 1:年度
private String isRight;//表示考核指标的值是否计算正常得到的 0:计算有误 1:计算正常
private String lastUpdateTime = DateUtils.formatDate(new Date(), "yyyy-MM-dd HH:mm:ss");
private String lastUpdater;
private String average;//组内平均数
private int rank;//同组排名
private String score;//指标评分分数
private String improveScore;//改善提升得分
private String actualAverage;//实际平均数:用于省对市的操作,如果有全省的基础项数据,直接拿全省的基础项数据算考核指标做为其实际平均值
public DriveIndCalResult(String compareId,String indId,String compareObj,int date,String value,
String unit,String type,String isRight,String lastUpdater) {
this.compareId = compareId;
this.indId = indId;
this.compareObj = compareObj;
this.date = date;
this.value = value;
this.unit = unit;
this.type = type;
this.isRight = isRight;
this.lastUpdater = lastUpdater;
}
}
......@@ -15,4 +15,39 @@ public interface DriveIndCalResultDefMapper extends BaseMapper<DriveIndCalResult
public List<DriveIndCalResultDef> findByIndId(@Param("indId") String indId);
public List<DriveIndCalResultDef> findByIndIdAndDateIn(Map<String,Object> param);
public List<DriveIndCalResultDef> findByIndIdAndCompareObj(@Param("indId") String indId,
@Param("compareObj") String compareObj);
public DriveIndCalResultDef findByIndIdAndDateAndCompareObj(@Param("indId") String indId,
@Param("date") int date,@Param("compareObj") String compareObj);
public List<DriveIndCalResultDef> findByIndIdAndDate(@Param("indId") String indId,
@Param("date") int date);
public List<DriveIndCalResultDef> findByIndIdAndDateAndActualAverageIsNotNull(
@Param("indId") String indId,@Param("date") int date);
public List<DriveIndCalResultDef> findByIndIdAndDateAndSort(@Param("indId") String indId,
@Param("date") int date);
public List<DriveIndCalResultDef> findByIndIdAndDateAndSortAndActualAverageIsNotNull(
@Param("indId") String indId,@Param("date") int date);
public List<DriveIndCalResultDef> findByIndIdAndDateAndCompareIdAndSort(@Param("indId") String indId,
@Param("date") int date,@Param("compareId") String compareId);
public List<DriveIndCalResultDef> findByIndIdAndDateAndCompareId(@Param("indId") String indId,
@Param("date") int date,@Param("compareId") String compareId);
public List<DriveIndCalResultDef> findByCompareObjAndDate(@Param("compareObj") String compareObj,
@Param("date") int date);
public List<DriveIndCalResultDef> findByCompareObjAndDateAndIndIdIn(Map<String,Object> param);
public DriveIndCalResultDef findByCompareIdAndCompareObjAndIndIdAndDate(
@Param("compareId") String compareId,@Param("compareObj") String compareObj,
@Param("indId") String indId,@Param("date") int date);
public List<DriveIndCalResultDef> findByIndIdAndDateAndCompareObjIn(Map<String,Object> param);
}
package com.keymobile.indicators.persistence.hyindicators;
import java.util.List;
import java.util.Optional;
import org.springframework.data.domain.Sort;
import org.springframework.data.mongodb.repository.MongoRepository;
import com.keymobile.indicators.model.entity.DriveIndCalResult;
public interface DriveIndCalResultRepository extends MongoRepository<DriveIndCalResult,String>{
public List<DriveIndCalResult> findByIndId(String indId);
public List<DriveIndCalResult> findByIndIdAndDateIn(String indId,List<Integer> dates);
public List<DriveIndCalResult> findByIndIdAndCompareObj(String indId,String compareObj);
public Optional<DriveIndCalResult> findByIndIdAndDateAndCompareObj(String indId,int date,String compareObj);
public List<DriveIndCalResult> findByIndIdAndDate(String indId,int date);
public List<DriveIndCalResult> findByIndIdAndDateAndActualAverageIsNotNull(String indId,int date);
public List<DriveIndCalResult> findByIndIdAndDate(String indId,int date,Sort sort);
public List<DriveIndCalResult> findByIndIdAndDateAndActualAverageIsNotNull(String indId,int date,Sort sort);
public List<DriveIndCalResult> findByIndIdAndDateAndCompareId(String indId,int date,String compareId,Sort sort);
public List<DriveIndCalResult> findByIndIdAndDateAndCompareId(String indId,int date,String compareId);
public List<DriveIndCalResult> findByCompareObjAndDate(String compareObj,int date);
public List<DriveIndCalResult> findByCompareObjAndDateAndIndIdIn(String compareObj,int date,List<String> indIds);
public Optional<DriveIndCalResult> findByCompareIdAndCompareObjAndIndIdAndDate(String compareId,String compareObj,String indId,int date);
public List<DriveIndCalResult> findByIndIdAndDateAndCompareObjIn(String indId,int date,List<String> compareObjs);
}
package com.keymobile.indicators.service.hytobacco;
import org.springframework.beans.factory.annotation.Autowired;
import org.springframework.stereotype.Service;
import com.keymobile.indicators.model.entity.indicators.DriveIndCalResultDef;
import com.keymobile.indicators.model.mapper.indmapper.DriveIndCalResultDefMapper;
@Service
public class DriveIndCalResultDefService {
@Autowired
private DriveIndCalResultDefMapper driveIndCalResultDefMapper;
public int saveOrUpdate(DriveIndCalResultDef driveIndCalResultDef) {
return driveIndCalResultDefMapper.insert(driveIndCalResultDef);
}
public DriveIndCalResultDef findById(Integer id) {
DriveIndCalResultDef driveCalResultDef = new DriveIndCalResultDef();
driveCalResultDef.setId(id);
return driveIndCalResultDefMapper.selectOne(driveCalResultDef);
}
// @Autowired
// private DriveIndCalResultService driveIndCalService;
//
// public void moveData() {
// List<DriveIndCalResult> datas = driveIndCalService.findAll();
// for(DriveIndCalResult data : datas) {
// DriveIndCalResultDef def = new DriveIndCalResultDef();
// def.setCompareId(data.getCompareId());
// def.setIndId(data.getIndId());
// def.setCompareObj(data.getCompareObj());
// def.setDate(data.getDate());
// def.setValue(data.getValue());
// def.setUnit(data.getUnit());
// def.setType(data.getType());
// def.setIsRight(data.getIsRight());
// def.setLastUpdateTime(data.getLastUpdateTime());
// def.setLastUpdater(data.getLastUpdater());
// def.setAverage(data.getAverage());
// def.setRank(data.getRank());
// def.setScore(data.getScore());
// def.setImproveScore(data.getImproveScore());
// def.setActualAverage(data.getActualAverage());
// driveIndCalResultDefMapper.insert(def);
// }
// }
}
package com.keymobile.indicators.service.hytobacco;
import java.util.Arrays;
import java.util.List;
import java.util.Optional;
import java.util.HashMap;
import java.util.Map;
import org.slf4j.Logger;
import org.slf4j.LoggerFactory;
......@@ -11,8 +11,8 @@ import org.springframework.stereotype.Service;
import com.keymobile.indicators.akka.actor.specific.DriveIndCompareObjActor;
import com.keymobile.indicators.akka.message.specific.DriveIndCompareObjMsg;
import com.keymobile.indicators.model.entity.DriveIndCalResult;
import com.keymobile.indicators.persistence.hyindicators.DriveIndCalResultRepository;
import com.keymobile.indicators.model.entity.indicators.DriveIndCalResultDef;
import com.keymobile.indicators.model.mapper.indmapper.DriveIndCalResultDefMapper;
import akka.actor.ActorRef;
import akka.actor.ActorSystem;
......@@ -23,41 +23,25 @@ public class DriveIndCalResultService {
private Logger logger = LoggerFactory.getLogger(DriveIndCalResultService.class);
@Autowired
private DriveIndCalResultRepository driveIndCalResultRepo;
private DriveIndCalResultDefMapper driveIndCalResultDefMapper;
public DriveIndCalResult saveOrUpdate(DriveIndCalResult driveIndCalResult) {
return driveIndCalResultRepo.save(driveIndCalResult);
public int saveOrUpdate(DriveIndCalResultDef driveIndCalResult) {
return driveIndCalResultDefMapper.insert(driveIndCalResult);
}
public DriveIndCalResult findById(String id) {
Optional<DriveIndCalResult> resultOp = driveIndCalResultRepo.findById(id);
if(resultOp.isPresent()) {
return resultOp.get();
}
return null;
public DriveIndCalResultDef findById(Integer id) {
DriveIndCalResultDef driveCalResultDef = new DriveIndCalResultDef();
driveCalResultDef.setId(id);
return driveIndCalResultDefMapper.selectOne(driveCalResultDef);
}
public List<DriveIndCalResult> findAll(){
return driveIndCalResultRepo.findAll();
public DriveIndCalResultDef findCompareObjInfo(String driveIndId,int date,String compareObj) {
return driveIndCalResultDefMapper.findByIndIdAndDateAndCompareObj(driveIndId,date,compareObj);
}
public DriveIndCalResult findCompareObjInfo(String driveIndId,int date,String compareObj) {
Optional<DriveIndCalResult> resultOp = driveIndCalResultRepo.findByIndIdAndDateAndCompareObj(
driveIndId, date, compareObj);
if(resultOp.isPresent()) {
return resultOp.get();
}
return null;
}
public DriveIndCalResult findCalResultDataIsExist(String compareId,String compareObj,
public DriveIndCalResultDef findCalResultDataIsExist(String compareId,String compareObj,
String indId,int date) {
Optional<DriveIndCalResult> resultOp = driveIndCalResultRepo.
findByCompareIdAndCompareObjAndIndIdAndDate(compareId, compareObj, indId, date);
if(resultOp.isPresent()) {
return resultOp.get();
}
return null;
return driveIndCalResultDefMapper.findByCompareIdAndCompareObjAndIndIdAndDate(compareId, compareObj, indId, date);
}
public void calculateComp(String compareId,String compareObjsString,String driveIndIdsString,
......
......@@ -14,17 +14,16 @@ import org.springframework.beans.factory.annotation.Autowired;
import org.springframework.data.domain.Page;
import org.springframework.data.domain.PageRequest;
import org.springframework.data.domain.Pageable;
import org.springframework.data.domain.Sort;
import org.springframework.stereotype.Service;
import com.google.common.collect.Maps;
import com.googlecode.aviator.AviatorEvaluator;
import com.keymobile.indicators.model.entity.DriveIndCalResult;
import com.keymobile.indicators.model.entity.indicators.DriveIndCalResultDef;
import com.keymobile.indicators.model.entity.indicators.DriveIndDef;
import com.keymobile.indicators.model.entity.scorecard.ImproveScoreDef;
import com.keymobile.indicators.model.entity.scorecard.IndScorecard;
import com.keymobile.indicators.model.entity.scorecard.RankScoreDef;
import com.keymobile.indicators.persistence.hyindicators.DriveIndCalResultRepository;
import com.keymobile.indicators.model.mapper.indmapper.DriveIndCalResultDefMapper;
import com.keymobile.indicators.persistence.hyindicators.IndScorecardRepository;
import com.keymobile.indicators.utils.CalculateUtils;
......@@ -35,9 +34,9 @@ public class IndScorecardService {
@Autowired
private IndScorecardRepository indScorecardRepo;
@Autowired
private DriveIndCalResultRepository driveIndResultRepo;
@Autowired
private DriveIndDefService driveIndDefService;
@Autowired
private DriveIndCalResultDefMapper driveIndCalResultDefMapper;
//id不为空为修改,为空为新增
public String saveOrUpdate(IndScorecard indScorecard,String catalogId,
......@@ -90,14 +89,13 @@ public class IndScorecardService {
String acsType = driveIndDef.getIndType();
String unit = driveIndDef.getIndUnit();
List<DriveIndCalResult> currentDriveResult = driveIndResultRepo
.findByIndIdAndDateAndCompareId(indId, date,compareId,
new Sort(Sort.Direction.ASC, "rank"));
List<DriveIndCalResultDef> currentDriveResult = driveIndCalResultDefMapper
.findByIndIdAndDateAndCompareIdAndSort(indId, date,compareId);
if(!currentDriveResult.isEmpty()) {
//过滤考核指标结果集无效值
Iterator<DriveIndCalResult> it=currentDriveResult.iterator();
Iterator<DriveIndCalResultDef> it=currentDriveResult.iterator();
while(it.hasNext()){
DriveIndCalResult driveCalResult = it.next();
DriveIndCalResultDef driveCalResult = it.next();
if("NaN".equals(driveCalResult.getValue())||"0(Error)".equals(driveCalResult.getValue())
||"0.0000".equals(driveCalResult.getValue())||"0".equals(driveCalResult.getValue())){
it.remove();
......@@ -105,18 +103,18 @@ public class IndScorecardService {
}
int currentDriveResultSize = currentDriveResult.size();
//根据indId,date,compareObj获取考核结果
Optional<DriveIndCalResult> currentCompareObjResult = driveIndResultRepo
DriveIndCalResultDef currentCompareObjResult = driveIndCalResultDefMapper
.findByIndIdAndDateAndCompareObj(indId, date, compareObj);
if(currentCompareObjResult.isPresent()) {
String average = currentCompareObjResult.get().getAverage();
if(currentCompareObjResult!=null) {
String average = currentCompareObjResult.getAverage();
//如果实际平均值存在
if(currentCompareObjResult.get().getActualAverage()!=null) {
if(!"0.0".equals(currentCompareObjResult.get().getActualAverage())) {
average = currentCompareObjResult.get().getActualAverage();
if(currentCompareObjResult.getActualAverage()!=null) {
if(!"0.0".equals(currentCompareObjResult.getActualAverage())) {
average = currentCompareObjResult.getActualAverage();
}
}
String value = currentCompareObjResult.get().getValue();
String value = currentCompareObjResult.getValue();
if(!"NaN".equals(value) && !"0(Error)".equals(value)
&& !"0.0000".equals(value) && !"0".equals(value)) {
//综合评价
......@@ -138,7 +136,7 @@ public class IndScorecardService {
}
}
int rank = currentCompareObjResult.get().getRank();//获取排位
int rank = currentCompareObjResult.getRank();//获取排位
//加分项
if(!scoreCard.getAddScoreItem().isEmpty()) {
List<RankScoreDef> addScoreItem = scoreCard.getAddScoreItem();
......@@ -161,7 +159,7 @@ public class IndScorecardService {
}
}
}else {//公式
int rank = currentCompareObjResult.get().getRank();//获取排位
int rank = currentCompareObjResult.getRank();//获取排位
if(rank==1) {//最佳指标
baseScoreValue = scoreCard.getBestIndScore();
}else if(rank==currentDriveResultSize) {//最差指标
......@@ -169,7 +167,7 @@ public class IndScorecardService {
}else {//其他
if(StringUtils.isNotBlank(scoreCard.getOtherCalFormula())) {
baseScoreValue = this.getValueFromFormula(
scoreCard.getOtherCalFormula(), currentCompareObjResult.get(),
scoreCard.getOtherCalFormula(), currentCompareObjResult,
currentDriveResult,acsType);
}
}
......@@ -179,12 +177,12 @@ public class IndScorecardService {
//改善提升
if("1".equals(scoreCard.getIsIncluScore())) {//纳入单位得分计算
//同期
Optional<DriveIndCalResult> sameCompareObjResult = driveIndResultRepo
DriveIndCalResultDef sameCompareObjResult = driveIndCalResultDefMapper
.findByIndIdAndDateAndCompareObj(indId, (date-100), compareObj);
if(sameCompareObjResult.isPresent()) {
if(sameCompareObjResult!=null) {
double improveScore = this.calImproveValue(acsType, unit,
scoreCard.getImproveScoreItem(), currentCompareObjResult.get(),
sameCompareObjResult.get(),compareObjs);
scoreCard.getImproveScoreItem(), currentCompareObjResult,
sameCompareObjResult,compareObjs);
if(scoreCard.getLimitScore()!=0) {
if(improveScore>scoreCard.getLimitScore()) {
improveScore = scoreCard.getLimitScore();
......@@ -209,7 +207,7 @@ public class IndScorecardService {
}
private double calImproveValue(String acsType,String unit,List<ImproveScoreDef> importScoreDefList,
DriveIndCalResult current,DriveIndCalResult same,List<String> compareObjs) {
DriveIndCalResultDef current,DriveIndCalResultDef same,List<String> compareObjs) {
double sumValue = 0;
for(ImproveScoreDef scoreDef : importScoreDefList) {
// 0:同期排位比 1:单位同期比
......@@ -221,11 +219,11 @@ public class IndScorecardService {
//考虑同期分组有变的情况,把组内成原同期的指标值拿出来再进行排名
Map<String,String> values = new HashMap<>();
for(String compareObj : compareObjs) {
Optional<DriveIndCalResult> sameCompareObjResult = driveIndResultRepo
DriveIndCalResultDef sameCompareObjResult = driveIndCalResultDefMapper
.findByIndIdAndDateAndCompareObj(current.getIndId(),
(current.getDate()-100), compareObj);
if(sameCompareObjResult.isPresent()) {
values.put(compareObj, sameCompareObjResult.get().getValue());
if(sameCompareObjResult!=null) {
values.put(compareObj, sameCompareObjResult.getValue());
}else {
values.put(compareObj, "0");
}
......@@ -286,8 +284,8 @@ public class IndScorecardService {
return sumValue;
}
private double getValueFromFormula(String formula,DriveIndCalResult resultObject,
List<DriveIndCalResult> currentDriveResult,String acsType) {
private double getValueFromFormula(String formula,DriveIndCalResultDef resultObject,
List<DriveIndCalResultDef> currentDriveResult,String acsType) {
double value = 0;
Map<String, Object> env = Maps.newHashMap();
//解析X,MIN,MAX
......
package com.keymobile.indicators.service.hytobacco;
import java.util.List;
import org.springframework.beans.factory.annotation.Autowired;
import org.springframework.stereotype.Service;
import com.keymobile.indicators.model.entity.indicators.IndicatorsData;
import com.keymobile.indicators.model.mapper.indmapper.IndicatorsDataMapper;
@Service
public class IndiDataDefService {
@Autowired
private IndicatorsDataMapper indiDataDefMapper;
@Autowired
private BaseIndDataService baseIndDataService;
public void moveData() {
List<IndicatorsData> datas = baseIndDataService.getAllIndData();
for(IndicatorsData record : datas) {
indiDataDefMapper.insert(record);
}
}
}
......@@ -18,12 +18,12 @@ import org.springframework.data.domain.Pageable;
import org.springframework.stereotype.Service;
import com.googlecode.aviator.AviatorEvaluator;
import com.keymobile.indicators.model.entity.DriveIndCalResult;
import com.keymobile.indicators.model.entity.indicators.DriveIndCalResultDef;
import com.keymobile.indicators.model.entity.indicators.DriveIndDef;
import com.keymobile.indicators.model.entity.objscorerule.IndTypeWeight;
import com.keymobile.indicators.model.entity.objscorerule.ScoreRule;
import com.keymobile.indicators.model.mapper.indicators.DriveIndDefMapper;
import com.keymobile.indicators.persistence.hyindicators.DriveIndCalResultRepository;
import com.keymobile.indicators.model.mapper.indmapper.DriveIndCalResultDefMapper;
import com.keymobile.indicators.persistence.hyindicators.ScoreRuleRepository;
import com.keymobile.indicators.utils.CalculateUtils;
......@@ -34,9 +34,9 @@ public class ScoreRuleService {
@Autowired
private ScoreRuleRepository scoreRuleRepo;
@Autowired
private DriveIndCalResultRepository driveIndCalResultRepo;
@Autowired
private DriveIndDefMapper driveIndDefMapper;
@Autowired
private DriveIndCalResultDefMapper driveIndCalResultDefMapper;
private static final Pattern P = Pattern.compile("(\\[[^\\]]*\\])");
......@@ -78,12 +78,16 @@ public class ScoreRuleService {
result.put("improveValue", "0.0");
result.put("date",String.valueOf(date));
//根据日期,对标对象和考核的指标获取考核指标结果详情
List<DriveIndCalResult> calResults = driveIndCalResultRepo.
findByCompareObjAndDateAndIndIdIn(compareObj, date, 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<String> values = new ArrayList<>();
List<String> improveValues = new ArrayList<>();
if(!calResults.isEmpty()) {
for(DriveIndCalResult calResult : calResults) {
for(DriveIndCalResultDef calResult : calResults) {
//根据考核指标id获取考核指标
DriveIndDef driveIndDef = driveIndDefMapper.selectByPrimaryKey(calResult.getIndId());
if(driveIndDef!=null) {
......@@ -146,36 +150,36 @@ public class ScoreRuleService {
}
for(String indId : indIdList) {
//根据日期,对标对象和考核的指标获取考核指标结果详情
Optional<DriveIndCalResult> calresultOp = driveIndCalResultRepo.
DriveIndCalResultDef calresultOp = driveIndCalResultDefMapper.
findByIndIdAndDateAndCompareObj(indId, date, compareObj);
if(calresultOp.isPresent()) {
if(calresultOp!=null) {
//得分类型:0 指标值直接参与计算
if("0".equals(scoreRule.getScoreType())) {
if(!"NaN".equals(calresultOp.get().getValue()) &&
!"0(Error)".equals(calresultOp.get().getValue())) {
calFormula = calFormula.replace("["+indId+"]", calresultOp.get().getValue());
if(!"NaN".equals(calresultOp.getValue()) &&
!"0(Error)".equals(calresultOp.getValue())) {
calFormula = calFormula.replace("["+indId+"]", calresultOp.getValue());
}else {
calFormula = calFormula.replace("["+indId+"]", "0.0");
}
}else if("1".equals(scoreRule.getScoreType())) {//1 指标得分分数参与计算(综合评分和改善提升分开算)
calFormula = calFormula.replace("["+indId+"]", calresultOp.get().getValue());
if(!"No".equals(calresultOp.get().getImproveScore()) &&
StringUtils.isNotBlank(calresultOp.get().getImproveScore())) {
calFormula = calFormula.replace("["+indId+"]", calresultOp.getValue());
if(!"No".equals(calresultOp.getImproveScore()) &&
StringUtils.isNotBlank(calresultOp.getImproveScore())) {
improveCalFormula = improveCalFormula.replace("["+indId+"]",
calresultOp.get().getImproveScore());
calresultOp.getImproveScore());
}else {
improveCalFormula = improveCalFormula.replace("["+indId+"]","0.0");
}
}else {//2指标得分分数参与计算(指标分数=综合+改善)
String score = "0.0";
if(!"No".equals(calresultOp.get().getImproveScore()) &&
StringUtils.isNotBlank(calresultOp.get().getImproveScore())) {
double indScore = Double.parseDouble(calresultOp.get().getScore());
double improveScore = Double.parseDouble(calresultOp.get().getImproveScore());
if(!"No".equals(calresultOp.getImproveScore()) &&
StringUtils.isNotBlank(calresultOp.getImproveScore())) {
double indScore = Double.parseDouble(calresultOp.getScore());
double improveScore = Double.parseDouble(calresultOp.getImproveScore());
double sum = indScore+improveScore;
score = String.valueOf(sum);
}else {
score = calresultOp.get().getScore();
score = calresultOp.getScore();
}
calFormula = calFormula.replace("["+indId+"]", score);
}
......@@ -214,7 +218,7 @@ public class ScoreRuleService {
result.put("date",String.valueOf(date));
//根据对标对象,日期查找该对标对象对标的所有指标结果
List<DriveIndCalResult> calResults = driveIndCalResultRepo.
List<DriveIndCalResultDef> calResults = driveIndCalResultDefMapper.
findByCompareObjAndDate(compareObj, date);
double scoreValue = 0.0;
double improveValue = 0.0;
......@@ -231,13 +235,13 @@ public class ScoreRuleService {
}
//根据指标分类计算指标平均值
private Map<String,Double> calIndTypeScore(ScoreRule scoreRule,IndTypeWeight indTypeWeight,List<DriveIndCalResult> calResults) {
private Map<String,Double> calIndTypeScore(ScoreRule scoreRule,IndTypeWeight indTypeWeight,List<DriveIndCalResultDef> calResults) {
Map<String,Double> result = new HashMap<>();
result.put("score", 0.0);
result.put("improve", 0.0);
List<String> values = new ArrayList<>();
List<String> improveValues = new ArrayList<>();
for(DriveIndCalResult calResult : calResults) {
for(DriveIndCalResultDef calResult : calResults) {
String catalogIdPath = indTypeWeight.getCatalogIdPath();
//根据考核指标id获取考核指标
DriveIndDef driveIndDef = driveIndDefMapper.selectByPrimaryKey(calResult.getIndId());
......
......@@ -14,12 +14,11 @@ import org.springframework.data.domain.PageRequest;
import org.springframework.data.domain.Pageable;
import org.springframework.stereotype.Service;
import com.keymobile.indicators.model.entity.DriveIndCalResult;
import com.keymobile.indicators.model.entity.indicators.DriveIndDef;
import com.keymobile.indicators.model.entity.indicators.DriveIndCalResultDef;
import com.keymobile.indicators.model.entity.shortboard.ShortboardDriveIndRel;
import com.keymobile.indicators.model.entity.shortboard.ShortboardItem;
import com.keymobile.indicators.model.entity.shortboard.ShortboardRule;
import com.keymobile.indicators.persistence.hyindicators.DriveIndCalResultRepository;
import com.keymobile.indicators.model.mapper.indmapper.DriveIndCalResultDefMapper;
import com.keymobile.indicators.persistence.hyindicators.ShortboardDriveIndRelRepository;
import com.keymobile.indicators.persistence.hyindicators.ShortboardRuleRepository;
import com.keymobile.indicators.utils.CalculateUtils;
......@@ -33,9 +32,7 @@ public class ShortboardRuleService {
@Autowired
private ShortboardDriveIndRelRepository shortboardDriveIndRelRepo;
@Autowired
private DriveIndCalResultRepository driveIndCalResultRepo;
@Autowired
private DriveIndDefService driveIndDefService;
private DriveIndCalResultDefMapper driveIndCalResultDefMapper;
public String saveOrUpdate(ShortboardRule shortboardRule,String catalogId,
String catalogIdPath,String user) {
......@@ -90,13 +87,17 @@ public class ShortboardRuleService {
}
//短板筛选规则为均值
private List<DriveIndCalResult> selectAverageShortboard(ShortboardItem shortboardItem,
private List<DriveIndCalResultDef> selectAverageShortboard(ShortboardItem shortboardItem,
List<String> compareObjs,String driveId,int date) {
List<DriveIndCalResult> calResults = driveIndCalResultRepo.
findByIndIdAndDateAndCompareObjIn(driveId, date, compareObjs);
List<DriveIndCalResult> filterCalResults = new ArrayList<>();//用于保存符合过滤条件的指标结果
List<DriveIndCalResult> realCalResults = new ArrayList<>();//用于保存符合过滤条件的指标结果
for(DriveIndCalResult calResult : calResults) {
Map<String,Object> paramMap = new HashMap<>();
paramMap.put("indId", driveId);
paramMap.put("date", date);
paramMap.put("compareObjs", compareObjs);
List<DriveIndCalResultDef> calResults = driveIndCalResultDefMapper.
findByIndIdAndDateAndCompareObjIn(paramMap);
List<DriveIndCalResultDef> filterCalResults = new ArrayList<>();//用于保存符合过滤条件的指标结果
List<DriveIndCalResultDef> realCalResults = new ArrayList<>();//用于保存符合过滤条件的指标结果
for(DriveIndCalResultDef calResult : calResults) {
//判断规则选择是大于还是小于
if("0".equals(shortboardItem.getCalType())) {//大于
if(!"NaN".equals(calResult.getValue()) && !"0(Error)".equals(calResult.getValue())
......@@ -133,7 +134,7 @@ public class ShortboardRuleService {
}
}
//分析filterCalResults
for(DriveIndCalResult filterCalResult : filterCalResults) {
for(DriveIndCalResultDef filterCalResult : filterCalResults) {
//判断是比较差还是百分比
if("0".equals(shortboardItem.getAnalysisType())) {//绝对值
//判断有没有实际的平均值
......@@ -173,20 +174,24 @@ public class ShortboardRuleService {
}
//短板筛选规则为最大值
private List<DriveIndCalResult> selectMaxShortboard(ShortboardItem shortboardItem,
private List<DriveIndCalResultDef> selectMaxShortboard(ShortboardItem shortboardItem,
List<String> compareObjs,String driveId,int date) throws Exception{
List<DriveIndCalResult> calResults = driveIndCalResultRepo.
findByIndIdAndDateAndCompareObjIn(driveId, date, compareObjs);
List<DriveIndCalResult> realCalResults = new ArrayList<>();//用于保存符合过滤条件的指标结果
Map<String,Object> paramMap = new HashMap<>();
paramMap.put("indId", driveId);
paramMap.put("date", date);
paramMap.put("compareObjs", compareObjs);
List<DriveIndCalResultDef> calResults = driveIndCalResultDefMapper.
findByIndIdAndDateAndCompareObjIn(paramMap);
List<DriveIndCalResultDef> realCalResults = new ArrayList<>();//用于保存符合过滤条件的指标结果
//获取排名第一的最大值
String maxValue = null;
for(DriveIndCalResult calResult : calResults) {
for(DriveIndCalResultDef calResult : calResults) {
if(calResult.getRank()==1) {
maxValue = calResult.getValue();
}
}
if(maxValue!=null) {
for(DriveIndCalResult calResult : calResults) {
for(DriveIndCalResultDef calResult : calResults) {
//判断是比较差还是百分比
if("0".equals(shortboardItem.getAnalysisType())) {//绝对值
......
<?xml version="1.0" encoding="UTF-8"?>
<!DOCTYPE mapper PUBLIC "-//mybatis.org//DTD Mapper 3.0//EN" "http://mybatis.org/dtd/mybatis-3-mapper.dtd">
<mapper namespace="com.keymobile.indicators.model.mapper.indmapper.DriveIndCalResultDefMapper">
<select id="findByIndId" parameterType="string" resultType="com.keymobile.indicators.model.entity.indicators.DriveIndCalResultDef" >
<select id="findByIndId" resultType="com.keymobile.indicators.model.entity.indicators.DriveIndCalResultDef" >
select *
from drive_ind_cal_result_def
where ind_id = #{indId}
......@@ -17,4 +17,115 @@
#{id}
</foreach>
</select>
<select id="findByIndIdAndCompareObj" resultType="com.keymobile.indicators.model.entity.indicators.DriveIndCalResultDef" >
select *
from drive_ind_cal_result_def
where
ind_id = #{indId} and
compare_obj = #{compareObj}
</select>
<select id="findByIndIdAndDateAndCompareObj" resultType="com.keymobile.indicators.model.entity.indicators.DriveIndCalResultDef" >
select *
from drive_ind_cal_result_def
where
ind_id = #{indId} and
compare_obj = #{compareObj} and
date = #{date}
</select>
<select id="findByIndIdAndDate" resultType="com.keymobile.indicators.model.entity.indicators.DriveIndCalResultDef" >
select *
from drive_ind_cal_result_def
where
ind_id = #{indId} and
date = #{date}
</select>
<select id="findByIndIdAndDateAndActualAverageIsNotNull" resultType="com.keymobile.indicators.model.entity.indicators.DriveIndCalResultDef" >
select *
from drive_ind_cal_result_def
where
ind_id = #{indId} and
date = #{date} and
actual_average is not null
</select>
<select id="findByIndIdAndDateAndSort" resultType="com.keymobile.indicators.model.entity.indicators.DriveIndCalResultDef" >
select *
from drive_ind_cal_result_def
where
ind_id = #{indId} and
date = #{date} order by rank asc
</select>
<select id="findByIndIdAndDateAndSortAndActualAverageIsNotNull" resultType="com.keymobile.indicators.model.entity.indicators.DriveIndCalResultDef" >
select *
from drive_ind_cal_result_def
where
ind_id = #{indId} and
date = #{date} and
actual_average is not null order by rank asc
</select>
<select id="findByIndIdAndDateAndCompareIdAndSort" resultType="com.keymobile.indicators.model.entity.indicators.DriveIndCalResultDef" >
select *
from drive_ind_cal_result_def
where
ind_id = #{indId} and
date = #{date} and
compare_id = #{compareId} order by rank asc
</select>
<select id="findByIndIdAndDateAndCompareId" resultType="com.keymobile.indicators.model.entity.indicators.DriveIndCalResultDef" >
select *
from drive_ind_cal_result_def
where
ind_id = #{indId} and
date = #{date} and
compare_id = #{compareId}
</select>
<select id="findByCompareObjAndDate" resultType="com.keymobile.indicators.model.entity.indicators.DriveIndCalResultDef" >
select *
from drive_ind_cal_result_def
where
compare_obj = #{compareObj} and
date = #{date}
</select>
<select id="findByCompareObjAndDateAndIndIdIn" parameterType="map" resultType="com.keymobile.indicators.model.entity.indicators.DriveIndCalResultDef" >
select *
from drive_ind_cal_result_def
where
compare_obj = #{compareObj} and
date = #{date} and
ind_id in
<foreach item="id" collection="indIds" open="(" close=")" separator=",">
#{id}
</foreach>
</select>
<select id="findByCompareIdAndCompareObjAndIndIdAndDate" resultType="com.keymobile.indicators.model.entity.indicators.DriveIndCalResultDef" >
select *
from drive_ind_cal_result_def
where
compare_id = #{compareId} and
compare_obj = #{compareObj} and
ind_id = #{indId} and
date = #{date}
</select>
<select id="findByIndIdAndDateAndCompareObjIn" parameterType="map" resultType="com.keymobile.indicators.model.entity.indicators.DriveIndCalResultDef" >
select *
from drive_ind_cal_result_def
where
ind_id = #{indId} and
date = #{date} and
compare_obj in
<foreach item="id" collection="compareObjs" open="(" close=")" separator=",">
#{id}
</foreach>
</select>
</mapper>
\ No newline at end of file
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