SampleServiceImpl.java 3.13 KB
package com.bsth.service.forecast;

import com.bsth.common.ResponseCode;
import com.bsth.controller.forecast.dto.CreateSampleParam;
import com.bsth.data.BasicData;
import com.bsth.data.forecast.ArrivalDataLoader;
import com.bsth.data.forecast.entity.ArrivalEntity;
import com.bsth.entity.forecast.Sample;
import com.bsth.repository.forecast.SampleRepository;
import com.bsth.service.forecast.util.CreateByArrivalData;
import com.bsth.service.impl.BaseServiceImpl;
import org.slf4j.Logger;
import org.slf4j.LoggerFactory;
import org.springframework.beans.factory.annotation.Autowired;
import org.springframework.stereotype.Service;

import javax.transaction.Transactional;
import java.text.SimpleDateFormat;
import java.util.*;

@Service
public class SampleServiceImpl extends BaseServiceImpl<Sample, Long> implements SampleService{

	@Autowired
	SampleRepository sampleRepository;
	
	@Autowired
	CreateByArrivalData createByArrivalData;
	
	Logger logger = LoggerFactory.getLogger(this.getClass());
	
	@Override
	public Iterable<Sample> list(Map<String, Object> map) {
		Iterable<Sample> rs = super.list(map);
		
		List<Sample> rsList = new ArrayList<>();
		//转换站点名称
		Iterator<Sample> iterator = rs.iterator();
		Sample s;
		String prefix;
		while(iterator.hasNext()){
			s = iterator.next();
			prefix = s.getLineCode() + "_" + s.getUpdown() + "_";
			s.setsName(BasicData.getStationNameByCode(s.getsStation(), prefix));
			s.seteName(BasicData.getStationNameByCode(s.geteStation(), prefix));
			
			rsList.add(s);
		}
		
		//排序
		Collections.sort(rsList, new Comparator<Sample>() {
			@Override
			public int compare(Sample arg0, Sample arg1) {
				return arg0.geteDate().compareTo(arg1.geteDate());
			}
		});
		
		return rsList;
	}
	
	@Override
	public Map<String, Object> save(Sample t) {
		if(null == t.getId())
			t.setTag(t.getTag() + t.getsDate() + " - " + t.geteDate());
		return super.save(t);
	}

	@Transactional
	@Override
	public Map<String, Object> createDataByGps(CreateSampleParam param) {
		Map<String, Object> rs = new HashMap<>(); 
		try{
			//删除原有数据
			sampleRepository.deleteByLineAndUpdown(param.getLineCode(), param.getUpdown());
			
			//查询到离站数据
			ArrivalDataLoader loader = new ArrivalDataLoader();
			SimpleDateFormat sdf = new SimpleDateFormat("yyyy-MM-dd");
			
			long st = sdf.parse(param.getStartDate()).getTime()
				,et = sdf.parse(param.getEndDate()).getTime()
				,i = st
				,range = 1000 * 60 * 60 * 24;
			
			logger.info("初始值:" + 1500 * (int)((et - st) / range));
			List<ArrivalEntity> all = new ArrayList<>(1500 * (int)((et - st) / range));
			for(; i < et; i += range)
				all.addAll(loader.loadByLineAndTime(param.getLineCode(), param.getUpdown() , i, i + range));
			
			logger.info("实际数据量:" + all.size());
			
			List<Sample> resList = createByArrivalData.create(all, param);
			
			//入库
			sampleRepository.save(resList);
			
			rs.put("status", ResponseCode.SUCCESS);
		}catch(Exception e){
			logger.error("" , e);
			rs.put("status", ResponseCode.ERROR);
		}
		
		return rs;
	}
}