Commit a6bc68e9 by zhangkb

修改获取基础项值接口和修复指标计算bug

parent 76d9f242
......@@ -127,9 +127,10 @@ public class DriveIndCalculateActor extends AbstractActor{
indValue="0.0";
}
try {
driveIndFormula = driveIndFormula.replace("["+indValueMsg.getIndId()+"]", indValueMsg.getIndId());
driveIndFormula = driveIndFormula.replace("["+indValueMsg.getIndId()+"]",
indValue);
//替换公式中的基础指标id为确定指标值
env.put(indValueMsg.getIndId(), Double.valueOf(indValue));
//env.put(indValueMsg.getIndId(), Double.valueOf(indValue));
}catch(Exception e) {
e.printStackTrace();
logger.error(driveIndFormula+";"+env);
......@@ -141,7 +142,7 @@ public class DriveIndCalculateActor extends AbstractActor{
driveIndDataType = null;
//进行考核指标值计算
try {
String driveIndValue = AviatorEvaluator.execute(driveIndFormula,env).toString();
String driveIndValue = AviatorEvaluator.execute(driveIndFormula).toString();
//保留四位小数
if(!driveIndValue.equals("NaN") && !driveIndValue.equals("Infinite")) {
driveIndValue = String.format("%.4f",
......
......@@ -2,6 +2,7 @@ package com.keymobile.indicators.akka.actor.indicators;
import java.math.BigDecimal;
import java.util.ArrayList;
import java.util.Date;
import java.util.List;
import java.util.Map;
import java.util.concurrent.CopyOnWriteArrayList;
......@@ -24,6 +25,7 @@ import com.keymobile.indicators.model.entity.indicators.DriveIndDef;
import com.keymobile.indicators.service.hytobacco.CompareUnitCalLogService;
import com.keymobile.indicators.service.hytobacco.DriveIndCalResultService;
import com.keymobile.indicators.service.hytobacco.DriveIndDefService;
import com.keymobile.indicators.utils.DateUtils;
import com.keymobile.indicators.utils.SpringUtil;
import akka.actor.AbstractActor;
......@@ -144,9 +146,9 @@ public class DriveIndIdObjCalActor extends AbstractActor{
}
try {
driveIndFormula = driveIndFormula.replace("["+baseIndValueMsg.getIndId()+"]",
baseIndValueMsg.getIndId());
indValue);
//替换公式中的基础指标id为确定指标值
env.put(baseIndValueMsg.getIndId(), Double.valueOf(indValue));
//env.put(baseIndValueMsg.getIndId(), Double.valueOf(indValue));
}catch(Exception e) {
e.printStackTrace();
logger.error("driveIndId:"+driveIndId+";"+
......@@ -170,7 +172,7 @@ public class DriveIndIdObjCalActor extends AbstractActor{
if(!confirmList.contains(0)) {//取所有基础指标值没错
//进行考核指标值计算
try {
String driveIndValue = AviatorEvaluator.execute(driveIndFormula,env).toString();
String driveIndValue = AviatorEvaluator.execute(driveIndFormula).toString();
//保留四位小数
if(!driveIndValue.equals("NaN") && !driveIndValue.equals("Infinite")) {
driveIndValue = String.format("%.4f",
......@@ -185,6 +187,7 @@ public class DriveIndIdObjCalActor extends AbstractActor{
}else {
driveIndCalResult.setUnit(unit);
driveIndCalResult.setValue(driveIndValue);
driveIndCalResult.setLastUpdateTime(DateUtils.formatDate(new Date(), "yyyy-MM-dd HH:mm:ss"));
}
//保存进考核指标结果表中
driveIndCalResultService.saveOrUpdate(driveIndCalResult);
......
package com.keymobile.indicators.model.mapper.indmapper;
import java.util.List;
import java.util.Map;
import org.apache.ibatis.annotations.Mapper;
......@@ -10,5 +11,7 @@ import tk.mybatis.mapper.common.BaseMapper;
@Mapper
public interface IndicatorsDataMapper extends BaseMapper<IndicatorsData>{
public IndicatorsData getDataByDimension(Map<String,Object> param);
public List<IndicatorsData> getDataByDimension(Map<String,Object> param);
public List<IndicatorsData> getIndDataByParam(Map<String,Object> param);
}
......@@ -13,6 +13,7 @@ import org.springframework.stereotype.Service;
import com.keymobile.indicators.conf.MongoDBConfig;
import com.keymobile.indicators.model.entity.indicators.IndicatorsData;
import com.keymobile.indicators.model.mapper.indmapper.IndicatorsDataMapper;
import com.mongodb.BasicDBObject;
import com.mongodb.DB;
import com.mongodb.DBCollection;
......@@ -25,73 +26,20 @@ public class BaseIndDataService {
private Logger logger = LoggerFactory.getLogger(BaseIndDataService.class);
@Autowired
private MongoDBConfig mongoDbConfig;
@Value("${mongodb.database}")
private String database;
public List<IndicatorsData> getAllIndData(){
List<IndicatorsData> result = new ArrayList<>();
MongoClient client = mongoDbConfig.mongoClient();
/* 新建数据库实例,有则使用已有的数据库,没有则准别新建 */
DB dataBase = client.getDB(database);
/* 新建集合命名为user_info,如果该集合存在,则使用。否则新建 */
DBCollection collection = dataBase.getCollection("hy_indi_data");
DBObject query = new BasicDBObject();
try (DBCursor cursor = collection.find(query)) {
while (cursor.hasNext()) {
DBObject dbo = cursor.next();
IndicatorsData data = new IndicatorsData();
data.setIndId(dbo.get("indId").toString());
data.setIndDesc(dbo.get("indDesc").toString());
data.setType(dbo.get("type").toString());
data.setBatchNo(dbo.get("batchNo").toString());
data.setDataType(dbo.get("dataType").toString());
data.setUnit(dbo.get("unit").toString());
data.setDim1(dbo.get("dim1").toString());
data.setDim2(Integer.parseInt(dbo.get("dim2").toString()));
if(dbo.get("value")==null || "".equals(dbo.get("value"))) {
data.setValue("");
}else {
data.setValue(dbo.get("value").toString());
}
result.add(data);
}
}
client.close();
return result;
}
private IndicatorsDataMapper indicatorsDataMapper;
public List<String> getIndData(String indId,int date,List<String> compareObjs){
List<String> result = new ArrayList<>();
MongoClient client = mongoDbConfig.mongoClient();
/* 新建数据库实例,有则使用已有的数据库,没有则准别新建 */
DB dataBase = client.getDB(database);
/* 新建集合命名为user_info,如果该集合存在,则使用。否则新建 */
DBCollection collection = dataBase.getCollection("hy_indi_data");
DBObject query = new BasicDBObject();
query.put("indId",indId);
query.put("dim2",date);
query.put("dim1",new BasicDBObject("$in", compareObjs));
try (DBCursor cursor = collection.find(query)) {
while (cursor.hasNext()) {
DBObject dbo = cursor.next();
if(dbo.get("value")==null || "".equals(dbo.get("value"))) {
result.add("0.0");
}else {
result.add(dbo.get("value").toString());
}
Map<String,Object> paramMap = new HashMap<>();
paramMap.put("indId", indId);
paramMap.put("date", date);
paramMap.put("compareObjs", compareObjs);
List<IndicatorsData> resultData = indicatorsDataMapper.getIndDataByParam(paramMap);
if(!resultData.isEmpty()) {
for(IndicatorsData data : resultData) {
result.add(data.getValue());
}
}
client.close();
return result;
}
}
......@@ -187,9 +187,9 @@ public class DriveIndDefService {
List<String> indDateList = baseIndDataService.getIndData(indId,date,compareObjs);
String sumValue = CalculateUtils.sumValue(indDateList);
env.put(indId, Double.valueOf(sumValue));
driveIndFormula = driveIndFormula.replace("["+indId+"]", indId);
driveIndFormula = driveIndFormula.replace("["+indId+"]", sumValue);
}
result = AviatorEvaluator.execute(driveIndFormula,env).toString();
result = AviatorEvaluator.execute(driveIndFormula).toString();
//保留四位小数
if(!"NaN".equals(result) && !"Infinite".equals(result)) {
result = String.format("%.4f",
......
......@@ -665,12 +665,12 @@ public class IndicatorsValueService {
paramMap.put("dim1", dimValue.getDimvalue());
}
}
IndicatorsData indicatorsData = indicatorsDataMapper.getDataByDimension(paramMap);
List<IndicatorsData> indicatorsData = indicatorsDataMapper.getDataByDimension(paramMap);
if(indicatorsData!=null) {
Map<String,Object> resultMap = new HashMap<>();
resultMap.put("value",indicatorsData.getValue());
resultMap.put("unit", indicatorsData.getUnit());
resultMap.put("dataType",indicatorsData.getDataType());
resultMap.put("value",indicatorsData.get(0).getValue());
resultMap.put("unit", indicatorsData.get(0).getUnit());
resultMap.put("dataType",indicatorsData.get(0).getDataType());
return resultMap;
}
return null;
......
......@@ -9,6 +9,7 @@ import java.util.Map;
import java.util.Map.Entry;
import java.util.stream.Collectors;
import org.apache.commons.lang.StringUtils;
import org.slf4j.Logger;
import org.slf4j.LoggerFactory;
......@@ -111,6 +112,9 @@ public class CalculateUtils {
StringBuilder formula = new StringBuilder();
if(!values.isEmpty()) {
for(int i=0;i<values.size();i++) {
if(StringUtils.isBlank(values.get(i))) {
continue;
}
if(i==values.size()-1) {//最后一个不加+号
formula.append("(").append(values.get(i)).append(")");
}else {
......
......@@ -9,4 +9,16 @@
dim1 = #{dim1} and
dim2= #{dim2}
</select>
<select id="getIndDataByParam" parameterType="map" resultType="com.keymobile.indicators.model.entity.indicators.IndicatorsData" >
select *
from indi_data_def
where
ind_id=#{indId} and
dim2= #{date} and
dim1 in
<foreach item="obj" collection="compareObjs" open="(" close=")" separator=",">
#{obj}
</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