ScheduleRealInfoServiceImpl.java 4.45 KB
package com.bsth.service.realcontrol.impl;

import java.text.SimpleDateFormat;
import java.util.ArrayList;
import java.util.Collection;
import java.util.Date;
import java.util.HashMap;
import java.util.List;
import java.util.Map;

import org.slf4j.Logger;
import org.slf4j.LoggerFactory;
import org.springframework.beans.factory.annotation.Autowired;
import org.springframework.stereotype.Service;

import com.bsth.common.ResponseCode;
import com.bsth.entity.realcontrol.ScheduleRealInfo;
import com.bsth.repository.realcontrol.ScheduleRealInfoRepository;
import com.bsth.service.impl.BaseServiceImpl;
import com.bsth.service.realcontrol.ScheduleRealInfoService;
import com.bsth.service.realcontrol.buffer.ScheduleBuffer;
import com.google.common.base.Splitter;
import com.google.common.collect.ArrayListMultimap;
import com.google.common.collect.Lists;
import com.google.common.collect.Multimap;

@Service
public class ScheduleRealInfoServiceImpl extends BaseServiceImpl<ScheduleRealInfo, Long> implements ScheduleRealInfoService{

	@Autowired
	ScheduleRealInfoRepository scheduleRealInfoRepository;
	
	Logger logger = LoggerFactory.getLogger(this.getClass());
	
	SimpleDateFormat sdfMonth = new SimpleDateFormat("yyyy-MM-dd")
			, sdfMinute = new SimpleDateFormat("yyyy-MM-dd HH:mm")
			, sdfShort = new SimpleDateFormat("HH:mm");
	
	@Override
	public Map<String, Collection<ScheduleRealInfo>> findByLines(String lines) {
		List<String> lineList = Lists.newArrayList(Splitter.on(',').trimResults().omitEmptyStrings().split(lines));
		
		Multimap<String, ScheduleRealInfo> mMap = ArrayListMultimap.create();
		
		for(String lineCode : lineList){
			mMap.putAll(lineCode, ScheduleBuffer.schedulListMap.get(lineCode));
		}
		return mMap.asMap();
	}

	@Override
	public Map<String, Object> outgoAdjust(Long id, String remarks, String dfsj) {
		Map<String, Object> map = new HashMap<>();
		try{
			
			ScheduleRealInfo schedule = ScheduleBuffer.pkSchedulMap.get(id);
			schedule.setDfsjT(sdfMinute.parse(sdfMonth.format(new Date()) + " " + dfsj).getTime());
			schedule.setDfsj(dfsj);
			schedule.addRemarks("[待发调整] " + remarks +";");
			//持久化到数据库
			ScheduleBuffer.persistentList.add(schedule);
			
			map.put("status", ResponseCode.SUCCESS);
			map.put("dfsj", dfsj);
			map.put("remarks", schedule.getRemarks());
		}catch(Exception e){
			logger.error("", e);
			map.put("status", ResponseCode.ERROR);
		}
		return map;
	}

	@Override
	public Map<String, Object> destroy(String idsStr, int spaceAdjust, String  remarks, String reason, int spaceNum) {
		
		Map<String, Object> map = new HashMap<>();
		List<ScheduleRealInfo> rsList = new ArrayList<>();
		map.put("list", rsList);
		try{
			List<String> idList = Lists.newArrayList(Splitter.on(',').trimResults().omitEmptyStrings().split(idsStr));
			
			ScheduleRealInfo schedule = null;
			for(String id : idList){
				schedule = ScheduleBuffer.pkSchedulMap.get(Long.parseLong(id));
				if(null != schedule){
					schedule.setStatus(-1);
					schedule.setRemarks("计划烂班["+reason+"] " + remarks);
					
					rsList.add(schedule);
				}
			}
			
			//调整间隔
			if(spaceAdjust == 1){
				
				ScheduleRealInfo first = ScheduleBuffer.pkSchedulMap.get(Long.parseLong(idList.get(0)));
				String lineCode = first.getXlBm();
				String upDown = first.getXlDir();
				
				List<ScheduleRealInfo> schList = ScheduleBuffer.schedulListMap.get(lineCode)
							,dirList = new ArrayList<>();
				//筛选走向
				for(ScheduleRealInfo s : schList){
					if(s.getXlDir().equals(upDown)){
						dirList.add(s);
					}
				}
				
				int size = dirList.size();
				Long st = null;
				int diff = spaceNum * 60 * 1000;
				for(int i = 0; i < size; i ++){
					schedule = dirList.get(i);
					
					if(schedule.getId() == first.getId()){
						if(i == 0)
							st = schedule.getDfsjT() - diff;
						else
							st = dirList.get(i - 1).getDfsjT();
						continue;
					}
					if(null == st || schedule.getStatus() == -1)
						continue;
					
					st = st + diff;
					schedule.setDfsjT(st);
					schedule.setDfsj(sdfShort.format(new Date(st)));
					
					ScheduleBuffer.persistentList.add(schedule);
					//将调整的班次返回给页面
					rsList.add(schedule);
				}
			}
			
			map.put("status", ResponseCode.SUCCESS);
		}catch(Exception e){
			logger.error("", e);
			map.put("status", ResponseCode.ERROR);
		}
		return map;
	}
}