GpsController.java 10.3 KB
package com.bsth.controller.gps;

import com.alibaba.fastjson.JSONObject;
import com.bsth.data.BasicData;
import com.bsth.data.gpsdata_v2.GpsRealData;
import com.bsth.data.gpsdata_v2.entity.GpsEntity;
import com.bsth.data.gpsdata_v2.handlers.overspeed.GpsOverspeed;
import com.bsth.data.gpsdata_v2.handlers.overspeed.OverspeedProcess;
import com.bsth.data.schedule.e_state_check.ScheduleStationCodeChecker;
import com.bsth.data.schedule.e_state_check.entity.SCodeInfo;
import com.bsth.entity.Line;
import com.bsth.entity.realcontrol.ScheduleRealInfo;
import com.bsth.repository.LineRepository;
import com.bsth.repository.realcontrol.ScheduleRealInfoRepository;
import com.bsth.service.gps.GpsService;
import com.bsth.service.gps.entity.GpsSpeed;
import com.google.common.base.Splitter;
import org.hibernate.validator.constraints.Length;
import org.springframework.beans.BeanUtils;
import org.springframework.beans.factory.annotation.Autowired;
import org.springframework.web.bind.annotation.*;

import javax.servlet.http.HttpServletResponse;
import java.text.ParseException;
import java.text.SimpleDateFormat;
import java.util.*;

@RestController
@RequestMapping("gps")
public class GpsController {

    @Autowired
    GpsRealData gpsRealData;

    @Autowired
    GpsService gpsService;

    @Autowired
    OverspeedProcess overspeedProcess;
    
    @Autowired
    LineRepository lineRepository;
    @Autowired
    ScheduleRealInfoRepository scheduleRealInfoRepository;

    // 格式化  年月日
    private SimpleDateFormat sdfnyr = new SimpleDateFormat("yyyy-MM-dd");
    @RequestMapping(value = "/real/all")
    public Map<String, Object> search(@RequestParam Map<String, Object> map,
                                      @RequestParam(defaultValue = "0") int page,
                                      @RequestParam(defaultValue = "15") int size,
                                      @RequestParam(defaultValue = "timestamp") String order,
                                      @RequestParam(defaultValue = "DESC") String direction) {


        return gpsService.search(map, page, size, order, direction);
    }

    @RequestMapping(value = "/real/line/{lineCode}")
    public List<GpsEntity> findByLineCode(@PathVariable("lineCode") String lineCode) {
        return gpsRealData.getByLine(lineCode);
    }

    @RequestMapping(value = "/real/line")
    public Map<String, Object> findByLineCodes(@RequestParam String lineCodes) {
        
        String json ="{\"lineId\":\"90018\",\"deviceId\":\"05S0Q141\",\"carparkNo\":\"\",\"stopNo\":\"119734\",\"stationName\":\"张江地铁站\",\"lon\":121.582085,\"lat\":31.203028,\"timestamp\":1637659686000,\"serverTimestamp\":1637659686742,\"speed\":0.0,\"direction\":0.0,\"state\":0,\"upDown\":0,\"origStateStr\":null,\"nbbm\":\"Q4A-009\",\"expectStopTime\":null,\"schId\":1040196467,\"version\":152,\"instation\":1,\"signalState\":\"normal\",\"abnormalStatus\":null,\"outOfBoundDistance\":0.0,\"valid\":0,\"source\":-1,\"remark\":null,\"planCode\":null,\"dvrcode\":null,\"offline\":false,\"service\":true}";
        GpsEntity res = JSONObject.parseObject(json, GpsEntity.class);
        Map<String, Object> rs = new HashMap();
        List<String> lineArray = Splitter.on(",").splitToList(lineCodes);
        //实时gps
        List<GpsEntity> gpsList = gpsRealData.get(lineArray);
        String[] t = lineCodes.split(",");
        List<Map<String, Object>> clZbhMap = new ArrayList<>();
        clZbhMap= scheduleRealInfoRepository.selectclZbhGroup(sdfnyr.format(new Date()),t);
        for (int i = 0 ; i< t.length;i++){
            for(Map clm : clZbhMap){
                if(clm.get("xlBm").equals(t[i])){
                    String lineName = BasicData.lineCode2NameMap.get(t[i]);
                    GpsEntity snt = new GpsEntity();
                    BeanUtils.copyProperties(res,snt);
                    snt.setLineId(t[i]);
                    snt.setNbbm(clm.get("clZbh")+"-"+lineName);
                    snt.setDeviceId(clm.get("clZbh") +","+lineName);
                    gpsList.add(snt);
                }
            }
            
            
        }
        //超速信息
        List<GpsOverspeed> overspeedList = overspeedProcess.findByLines(lineArray);

        //班次站点检查信息
        List<SCodeInfo> scis = ScheduleStationCodeChecker.findByLineIdx(lineArray);

        rs.put("gpsList", gpsList);
        rs.put("overspeedList", overspeedList);
        rs.put("scis", scis);
        return rs;
    }

    @RequestMapping(value = "/allDevices")
    public Iterable<String> allDevices() {
        return gpsRealData.allDevices();
    }

    @RequestMapping(value = "/removeRealGps", method = RequestMethod.POST)
    public Map<String, Object> removeRealGps(@RequestParam String device) {
        return gpsService.removeRealGps(device);
    }

    /**
     * @Title: history @Description: TODO(这个方法给测试页面用) @throws
     */
    @RequestMapping(value = "/history/{device}")
    public List<Map<String, Object>> history(@PathVariable("device") String device, @RequestParam Long startTime,
                                             @RequestParam Long endTime, @RequestParam int directions) {

        return gpsService.history(device, startTime, endTime, directions);
    }

    @RequestMapping(value = "/gpsHistory/multiple")
    public List<Map<String, Object>> gpsHistory(@RequestParam String[] nbbmArray, @RequestParam Long st,
                                                @RequestParam Long et) {
        return (List<Map<String, Object>>) gpsService.history(nbbmArray, st, et).get("list");
    }

	/*@RequestMapping(value = "/analyse/ram")
    public List<ArrivalInfo> ramData(@RequestParam String nbbm) {
		return ArrivalDataBuffer.allMap.get(nbbm);
	}*/

    @RequestMapping(value = "/Car2DeviceId")
    public Map<String, String> findCarDeviceIdMap() {
        return BasicData.deviceId2NbbmMap.inverse();
    }

    @RequestMapping(value = "/buffAera")
    public Map<String, Object> findBuffAeraByCode(@RequestParam String code, @RequestParam String type) {
        return gpsService.findBuffAeraByCode(code, type);
    }

    @RequestMapping(value = "/findRoadSpeed")
    public Map<String, Object> findRoadSpeed(@RequestParam String lineCode) {
        return gpsService.findRoadSpeed(lineCode);
    }

    /**
     * gps补全
     * type 0 : 实时GPS 1:走补传
     * @return
     */
    @RequestMapping(value = "/gpsCompletion", method = RequestMethod.POST)
    public Map<String, Object> gpsCompletion(@RequestParam long schId, @RequestParam int type) {
        return gpsService.gpsCompletion(schId, type);
    }

    /**
     * 历史GPS查询 ,第二版轨迹回放用
     * @param nbbm
     * @param st
     * @param et
     * @return
     */
    @RequestMapping(value = "/history_v2/{nbbm}")
    public Map<String, Object> history_v2(@PathVariable("nbbm") String nbbm, @RequestParam long st, @RequestParam long et){
        return gpsService.history_v2(nbbm, st, et);
    }

    /**
     * 历史GPS查询 ,第三版轨迹回放用
     * @param nbbm
     * @param st
     * @param et
     * @return
     */
    @RequestMapping(value = "/history_v3/{nbbm}")
    public Map<String, Object> history_v3(@PathVariable("nbbm") String nbbm, @RequestParam long st, @RequestParam long et){
        return gpsService.history_v3(nbbm, st, et);
    }

    /**
     * 轨迹导出
     * @param nbbm
     * @param st
     * @param et
     * @return
     */
    @RequestMapping(value = "/history_v3/excel/{nbbm}")
    public void trailExcel(@PathVariable("nbbm") String nbbm, @RequestParam long st, @RequestParam long et, HttpServletResponse resp){
        gpsService.trailExcel(nbbm, st, et, resp);
    }

    /**
     * 轨迹异常数据导出
     * @param nbbm
     * @param st
     * @param et
     * @return
     */
    @RequestMapping(value = "/history_v3/excel_abnormal/{nbbm}")
    public void abnormalExcel(@PathVariable("nbbm") String nbbm, @RequestParam long st, @RequestParam long et, HttpServletResponse resp){
        gpsService.abnormalExcel(nbbm, st, et, resp);
    }

    /**
     * 到离站数据导出
     * @param nbbm
     * @param st
     * @param et
     * @return
     */
    @RequestMapping(value = "/history_v3/excel_arrival/{nbbm}")
    public void arrivalExcel(@PathVariable("nbbm") String nbbm, @RequestParam long st, @RequestParam long et, HttpServletResponse resp){
        gpsService.arrivalExcel(nbbm, st, et, resp);
    }




    /**
     * 安全驾驶数据 分页查询
     * @param map
     * @param page
     * @param size
     * @param order
     * @param direction
     * @return
     */
    @RequestMapping(value = "/safeDriv")
    public Map<String, Object> safeDrivList(@RequestParam Map<String, Object> map,
                                       @RequestParam(defaultValue = "0") int page,
                                       @RequestParam(defaultValue = "15") int size,
                                       @RequestParam(defaultValue = "timestamp") String order,
                                       @RequestParam(defaultValue = "DESC") String direction){
        return gpsService.safeDrivList(map , page, size, order, direction);
    }
    
    @RequestMapping(value = "/findPosition", method = RequestMethod.GET)
    public List<GpsSpeed> findPosition(@RequestParam String vehicle,@RequestParam String startdate,@RequestParam String enddate) throws ParseException {
    	String deviceid = BasicData.deviceId2NbbmMap.inverse().get(vehicle);
    	List<GpsSpeed> listGpsSpeed = new ArrayList<GpsSpeed>();
    	listGpsSpeed = gpsService.findPosition(deviceid,startdate,enddate);
    	return listGpsSpeed;
    }
    
	@RequestMapping(value = "/pagequery",method = RequestMethod.GET)
	public Map<String, Object> pagequery(@RequestParam Map<String, Object> map){
		map.put("curPage", map.get("page").toString());
		map.put("pageData","10");
		return gpsService.Pagequery(map);
	}

    /**
     * 获取线路下所有车辆,包括实时设备 和 计划排班
     * @param lineCode
     * @return
     */
    @RequestMapping(value = "/allCarsByLine",method = RequestMethod.GET)
	public Map<String, Object> allCarsByLine(String lineCode){
        return gpsService.allCarsByLine(lineCode);
    }
    
}