fengxiang
2018-03-23 ed8f0aeffb619c0540b16420320973207c55f015
src/main/java/com/moral/service/impl/HistoryMinutelyServiceImpl.java
@@ -9,7 +9,6 @@
import java.time.temporal.TemporalAdjusters;
import java.util.ArrayList;
import java.util.Arrays;
import java.util.Collection;
import java.util.Collections;
import java.util.Comparator;
import java.util.Date;
@@ -30,6 +29,11 @@
import javax.annotation.Resource;
import com.moral.common.util.ReportTimeFormat;
import com.moral.entity.charts.DataCondition;
import com.moral.entity.charts.LineChartCriteria;
import com.moral.entity.charts.PairData;
import com.moral.entity.charts.TimePeriod;
import org.apache.commons.lang3.time.DateUtils;
import org.springframework.stereotype.Service;
import org.springframework.util.ObjectUtils;
@@ -140,6 +144,10 @@
      Map<String, List<Object>> resultMap = new HashMap<String, List<Object>>();
      List<Map<String, Object>> list = JSON.parseObject((String)parameters.get("items"), new TypeReference<List<Map<String, Object>>>() {});
      parameters.remove("items");
      Map<String, Object> timeType = JSON.parseObject((String)parameters.get("timeType"), new TypeReference<Map<String, Object>>() {});
      parameters.remove("timeType");
      parameters.putAll(timeType);
      ExecutorService threadPool = Executors.newCachedThreadPool();
      CompletionService<Map<String, List<Object>>> cs = new ExecutorCompletionService<Map<String, List<Object>>>(threadPool);
@@ -435,4 +443,74 @@
      return result;
   }
   /**
    * 根据线性表单的条件规则,获取多条线性表单数据
    * @param lineChartCriteria
    * @return
    */
   @Override
   public Map<String, List<List<PairData>>> queryLineChartDateByCrieria(LineChartCriteria lineChartCriteria){
       Map<String,List<List<PairData>>> listMap = new HashMap<>();
       for(String sensorKey:lineChartCriteria.getSensorKeys()){
            TimePeriod timePeriod = lineChartCriteria.getTimePeriod();
            List<DataCondition> dataConditionList = lineChartCriteria.getDataConditions();
            List<List<PairData>> list =  new ArrayList<>();
            dataConditionList.forEach(item -> {
                List<PairData> pairDataList =  queryOneLineChartDateByCrieria(sensorKey,timePeriod,item);
                list.add(pairDataList);
            });
            listMap.put(sensorKey,list);
        }
      return  listMap;
   }
   /**
    * 根据线性表单的条件规则,获取一条线性表单数据
    * @param sensorKey
    * @param timePeriod
    * @param dataCondition
    * @return
    */
   public List<PairData> queryOneLineChartDateByCrieria(String sensorKey, TimePeriod timePeriod, DataCondition dataCondition){
      List<String> timeList = ReportTimeFormat.makeTimeList(timePeriod);
      List<PairData> lineChartDatas = historyMinutelyMapper.selectLineChartDateByCrieria(sensorKey,timePeriod,dataCondition);
      List<PairData> lineChartDatasWithEmpty = new ArrayList<>();
      int m = 0;
      int dataLength = lineChartDatas.size()-1;
      m = dataLength>-1?0:-1;
      if(m>-1){
         for(int n =0;n<timeList.size();n++){
            String time = timeList.get(n);
            if(m>-1){
               PairData pairData = lineChartDatas.get(m);
               String keyTime = pairData.getCategory();
               if(time.equals(keyTime)){
                  lineChartDatasWithEmpty.add(pairData);
                  m = m<dataLength ? m+1 : -1;
               }else{
                  lineChartDatasWithEmpty.add(generateEmptyData(time));
               }
            }else {
                   lineChartDatasWithEmpty.add(generateEmptyData(time));
            }
         }
      }else{
         fillEmptyDataToList(timeList,lineChartDatasWithEmpty);
      }
      return  lineChartDatasWithEmpty;
   }
   private PairData generateEmptyData(String time) {
      PairData pairData = new PairData();
      pairData.setCategory(time);
      pairData.setValue(null);
      return pairData;
   }
   private void fillEmptyDataToList(List<String> timeList,List<PairData> lineChartDatasWithEmpty){
        timeList.forEach( time ->{
         PairData pairData = generateEmptyData(time);
           lineChartDatasWithEmpty.add(pairData);
      });
   }
}