BasicDataController.java 6.42 KB
package com.bsth.controller.realcontrol;

import com.alibaba.fastjson.serializer.PropertyFilter;
import com.bsth.common.ResponseCode;
import com.bsth.data.BasicData;
import com.bsth.data.Station2ParkBuffer;
import com.bsth.data.pinyin.PersionPinYin;
import com.bsth.data.pinyin.PersionPinYinBuffer;
import com.bsth.entity.Line;
import com.bsth.entity.Personnel;
import com.bsth.entity.realcontrol.StationToPark;
import com.google.common.base.Splitter;
import com.google.common.collect.ArrayListMultimap;
import com.google.common.collect.BiMap;
import org.slf4j.Logger;
import org.slf4j.LoggerFactory;
import org.springframework.beans.factory.annotation.Autowired;
import org.springframework.web.bind.annotation.RequestMapping;
import org.springframework.web.bind.annotation.RequestMethod;
import org.springframework.web.bind.annotation.RequestParam;
import org.springframework.web.bind.annotation.RestController;

import java.util.*;

@RestController
@RequestMapping("/basic")
public class BasicDataController {

	@Autowired
	BasicData.BasicDataLoader dataLoader;

	@Autowired
	BasicData basicData;

	Logger logger = LoggerFactory.getLogger(this.getClass());

	@Autowired
	Station2ParkBuffer station2ParkBuffer;

	@Autowired
	PersionPinYinBuffer persionPinYinBuffer;
	
	@RequestMapping("/cars")
	public Iterable<String> findAllNbbm(Map<String, Object> map){
		return BasicData.deviceId2NbbmMap.values();
	}
	
	@RequestMapping("/nbbm2deviceId")
	public Map<String, String> nbbm2deviceId(Map<String, Object> map){
		return BasicData.deviceId2NbbmMap.inverse();
	}
	
	@RequestMapping("/lineCode2Name")
	public Map<String, String> findLineCodeMap(){
		return BasicData.lineCode2NameMap;
	}
	
	@RequestMapping("/parks")
	public Map<String, String> findParks(){
		Map<String, String> rs = new HashMap<>();
		List<String> codes = BasicData.parkCodeList;
		for(String code : codes){
			rs.put(code, BasicData.stationCode2NameMap.get(code));
		}
		return rs;
	}
	
	/*@RequestMapping("/personnel")
	public Map<String, Object> findPersonnelInfo(){
		Map<String, Object> rs = new HashMap<>();
		PersonnelFieldFilter filter=new PersonnelFieldFilter();
		//驾驶员
		rs.put("jsy", JSON.parse(JSON.toJSONString(BasicData.jsyMap.values(), filter)));
		//售票员
		rs.put("spy", JSON.parse(JSON.toJSONString(BasicData.spyMap.values(), filter)));*//*
		return rs;
	}*/

	@RequestMapping(value = "/all_personnel_py", method = RequestMethod.GET)
	public List<PersionPinYin> findAll_PY(){
		return persionPinYinBuffer.getAll();
	}
	
	@RequestMapping("/all_personnel")
	public Map<String, String> all_personnel(){
		return BasicData.allPerson;
	}

	@RequestMapping("/allPersonnelMobile")
	public Map<String, String> allPersonnelMobile(){
		Map<String, String> result = new HashMap<>();
		for (Personnel personnel : BasicData.perMap.values()) {
			result.put(personnel.getJobCode(), personnel.getMobile());
		}

		return result;
	}

	public class PersonnelFieldFilter implements PropertyFilter{
		
		String[] whiteList=new String[]{"jobCode", "personnelName", "brancheCompany"};
		@Override
		public boolean apply(Object object, String name, Object value) {
			for(String f : whiteList){
				if(name.equals(f))
					return true;
			}
			return false;
		}
	}

	/**
	 * 刷新车辆和设备号对照数据
	 * @return
	 */
	@RequestMapping(value = "/refresh_nbbm2Device", method = RequestMethod.POST)
	public Map<String, Object> refreshNbbm2DeviceId(){
		Map<String, Object> rs = new HashMap<>();
		try {
			dataLoader.loadDeviceInfo();
			rs.put("status", ResponseCode.SUCCESS);
		}catch (Exception e){
			rs.put("status", ResponseCode.ERROR);
			rs.put("msg", e.getMessage());
			logger.error("", e);
		}
		return rs;
	}

	/**
	 * 刷新员工对照数据
	 * @return
	 */
	@RequestMapping(value = "/refresh_person_data", method = RequestMethod.POST)
	public Map<String, Object> refreshPersonData(){
		Map<String, Object> rs = new HashMap<>();
		try {
			dataLoader.loadPersonnelInfo();
			rs.put("status", ResponseCode.SUCCESS);
		}catch (Exception e){
			rs.put("status", ResponseCode.ERROR);
			rs.put("msg", e.getMessage());
			logger.error("", e);
		}
		return rs;
	}

	/**
	 * 车辆自编号和车牌号对照
	 * @return
	 */
	@RequestMapping("/nbbm2PlateNo")
	public Map<String, String> nbbm2PlateNo(){
		return basicData.nbbmCompanyPlateMap;
	}


	/**
	 * 获取线路配车信息
	 * @return
	 */
	@RequestMapping("/ccInfo")
	public Map<String, Collection<String>> ccInfo(){

		ArrayListMultimap<String, String> listMultimap = ArrayListMultimap.create();
		Set<String> ks = BasicData.nbbm2LineMap.keySet();

		Line line;
		for(String nbbm : ks){
			line = BasicData.nbbm2LineMap.get(nbbm);
			listMultimap.put(line.getLineCode(), nbbm);
		}
		return listMultimap.asMap();
	}

	/**
	 * 获取车辆信息
	 * @return
	 */
	@RequestMapping("/ccInfo/lineArray")
	public List<Map<String, String>> ccInfoByLine(@RequestParam String idx){
		List<String> lines = Splitter.on(",").splitToList(idx);
		List<Map<String, String>> rs = new ArrayList<>();
		Map<String, String> map;

		//ArrayListMultimap<String, String> listMultimap = ArrayListMultimap.create();
		Set<String> ks = BasicData.nbbm2LineMap.keySet();
		BiMap<String,String> nbbm2deviceMap = BasicData.deviceId2NbbmMap.inverse();

		Line line;
		for(String nbbm : ks){
			line = BasicData.nbbm2LineMap.get(nbbm);
			if(lines.contains(line.getLineCode())){
				map = new HashMap<>();
				map.put("nbbm", nbbm);
				map.put("deviceId", nbbm2deviceMap.get(nbbm));
				map.put("lineName", line.getName());
				map.put("lineCode", line.getLineCode());
				rs.add(map);
			}
		}
		return rs;
	}

	/**
	 * 获取站点和停车场历时公里对照表
	 * @param idx
	 * @return
	 */
	@RequestMapping("/station2ParkData")
	public Map<String, Collection<StationToPark>> findStation2ParkData(@RequestParam String idx){
		List<String> lines = Splitter.on(",").splitToList(idx);
		ArrayListMultimap<String, StationToPark> rs = ArrayListMultimap.create();

		for(String lineCode : lines){
			rs.putAll(lineCode, Station2ParkBuffer.get(lineCode));
		}
		return rs.asMap();
	}

	@RequestMapping(value = "/deleteStation2Park", method = RequestMethod.POST)
	public Map<String, Object> deleteStation2Park(@RequestParam String lineCode,@RequestParam Integer id){
		return station2ParkBuffer.delete(lineCode, id);
	}
}