package com.moral.service.impl;
|
|
import com.moral.common.exception.BusinessException;
|
import com.moral.common.util.ReportTimeFormat;
|
import com.moral.entity.Organization;
|
import com.moral.entity.charts.TimePeriod;
|
import com.moral.entity.charts.TimeUnits;
|
import com.moral.mapper.HangzhouAqiMapper;
|
import com.moral.mapper.OrganizationMapper;
|
import com.moral.service.HangzhouAqiService;
|
import org.apache.commons.collections.CollectionUtils;
|
import org.springframework.stereotype.Service;
|
|
import javax.annotation.Resource;
|
import java.util.*;
|
|
/**
|
* @Auther: fengxiang
|
* @Date: 2018/8/24 10:32
|
* @Description:国控api服务实现类
|
*/
|
@Service
|
public class HangzhouAqiServiceImpl implements HangzhouAqiService{
|
@Resource
|
private OrganizationMapper organizationMapper;
|
@Resource
|
private HangzhouAqiMapper hangzhouAqiMapper;
|
|
public List<Map> queryAqiOfTimePeriod(String code,TimePeriod timePeriod) {
|
return hangzhouAqiMapper.selectAqisByCodeAndTimePeriod(code,timePeriod);
|
}
|
/**
|
* 根据组织id获取最近24小时国控aqi数据
|
* @param orgId
|
* @return 返回长度为24的数组,查不到的数据设置为0
|
*/
|
@Override
|
public List<Map> queryAqi24Hours(Integer orgId) {
|
List<Map> aqi24HoursValues = new ArrayList<>(24);
|
Date now = ReportTimeFormat.getFormatDate(ReportTimeFormat.HOUR_FORMAT);
|
Date start = ReportTimeFormat.dateCalc(now, TimeUnits.HOUR,-24);
|
Date end = ReportTimeFormat.dateCalc(now, TimeUnits.MILLISECOND,-1);;
|
TimePeriod timePeriod = new TimePeriod(start,end,TimeUnits.HOUR);
|
Integer code = getCode(orgId,false);
|
List<Map> aqis = queryAqiOfTimePeriod(code.toString(),timePeriod);
|
List<String> timeList = ReportTimeFormat.makeTimeList(timePeriod);
|
if(CollectionUtils.isEmpty(aqis)) {
|
code = getCode(orgId,true);
|
aqis = queryAqiOfTimePeriod(code.toString(),timePeriod);
|
}
|
int mTemp = 0;
|
for(int n =0;n<timeList.size();n++) {
|
String time = timeList.get(n);
|
Object aqiValue = null;
|
for(int m =mTemp;m<aqis.size();m++) {
|
Map<String,Object> rowData = aqis.get(m);
|
Object dbTime = rowData.get("time");
|
if(time.equals(dbTime)){
|
mTemp = m+1;
|
aqiValue = rowData.get("aqi");
|
}
|
}
|
Map<String,Object> aqiItem = new HashMap<>();
|
aqiItem.put("time",time);
|
aqiValue = aqiValue!=null?Float.valueOf(aqiValue.toString().replace("\"","")):null;
|
aqiItem.put("aqi",aqiValue);
|
aqi24HoursValues.add(aqiItem);
|
}
|
return aqi24HoursValues;
|
}
|
private Integer getCode(Integer orgId,boolean isGetCityCode)
|
{
|
Organization org = organizationMapper.selectByPrimaryKey(orgId);
|
Integer code = null;
|
if(isGetCityCode) {
|
code = org.getCityCode();
|
}else{
|
code = org.getAreaCode();
|
}
|
if(code == null) {
|
throw new BusinessException("citeCode or areaCode is null;");
|
}
|
return code;
|
}
|
}
|