XmlInfoPublishController.java 8.4 KB
package com.bsth.controller;

import com.bsth.controller.dto.DispatchScreen;
import com.bsth.data.BasicCacheData;
import com.bsth.data.geo.GeoCacheData;
import com.bsth.data.gps.GpsCacheData;
import com.bsth.data.history.HistoryConsumeTimeDataHandler;
import com.bsth.data.schedule.entity.ScheduleRealInfo;
import com.bsth.entity.GpsEntity;
import com.bsth.entity.Line;
import com.bsth.entity.StationRoute;
import org.apache.commons.lang3.StringUtils;
import org.slf4j.Logger;
import org.slf4j.LoggerFactory;
import org.springframework.beans.factory.annotation.Autowired;
import org.springframework.jdbc.core.BeanPropertyRowMapper;
import org.springframework.jdbc.core.JdbcTemplate;
import org.springframework.web.bind.annotation.RequestMapping;
import org.springframework.web.bind.annotation.RequestParam;
import org.springframework.web.bind.annotation.RestController;

import java.text.DecimalFormat;
import java.util.*;

/**
 * 信息发布,xml 格式
 */
@RestController
@RequestMapping("xxfb")
public class XmlInfoPublishController {


    @Autowired
    JdbcTemplate jdbcTemplate;

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

    static DecimalFormat df = new DecimalFormat("#.00");

    @RequestMapping("getLineInfoByName")
    public String getLineInfoByName(@RequestParam String linename, @RequestParam String t) {
        StringBuilder sb = new StringBuilder();
        try {
            if (StringUtils.isBlank(linename))
                return "";

            Collection<Line> vs = BasicCacheData.code2LineMap.values();

            Line line = null;
            for (Line v : vs) {
                if (linename.equals(v.getName())) {
                    line = v;
                    break;
                }
            }

            if (null == line)
                return "";

            //to xml
            sb.append("<?xml version=\"1.0\" encoding=\"UTF-8\"?>");
            sb.append("<linedetail>");

            sb.append("<end_earlytime>" + line.getEndStationFirstTime() + "</end_earlytime>");
            sb.append("<end_latetime>" + line.getEndStationEndTime() + "</end_latetime>");
            sb.append("<end_stop>" + line.getEndStationName() + "</end_stop>");
            sb.append("<line_id>" + line.getLineCode() + "</line_id>");
            sb.append("<line_name>" + line.getName() + "</line_name>");
            sb.append("<start_earlytime>" + line.getStartStationFirstTime() + "</start_earlytime>");
            sb.append("<start_latetime>" + line.getStartStationEndTime() + "</start_latetime>");
            sb.append("<start_stop>" + line.getStartStationName() + "</start_stop>");

            sb.append("</linedetail>");
        } catch (Exception e) {
            logger.error("", e);
        }
        return sb.toString();
    }

    @RequestMapping("getLine")
    public String getLine(@RequestParam String lineid, @RequestParam String t) {
        StringBuilder sb = new StringBuilder();
        try {

            List<StationRoute>[] listArray = GeoCacheData.find(lineid);

            List<StationRoute> srs0 = listArray[0];
            List<StationRoute> srs1 = listArray[1];

            //to xml

            sb.append("<?xml version=\"1.0\" encoding=\"UTF-8\"?>");
            sb.append("<lineInfoDetails>");

            if (null != srs0) {
                //上行
                sb.append("<lineResults0>");
                sb.append("<direction>true</direction>");
                sb.append("<stops>");
                for (StationRoute s : srs0) {
                    sb.append("<stop>");
                    sb.append("<zdmc>" + s.getName() + "</zdmc>");
                    sb.append("<id>" + s.getStationCode() + "</id>");
                    sb.append("</stop>");
                }
                sb.append("</stops>");
                sb.append("</lineResults0>");
            }


            if (null != srs1) {
                //下行
                sb.append("<lineResults1>");
                sb.append("<direction>false</direction>");
                sb.append("<stops>");
                for (StationRoute s : srs1) {
                    sb.append("<stop>");
                    sb.append("<zdmc>" + s.getName() + "</zdmc>");
                    sb.append("<id>" + s.getStationCode() + "</id>");
                    sb.append("</stop>");
                }
                sb.append("</stops>");
                sb.append("</lineResults1>");
            }

            sb.append("</lineInfoDetails>");
        } catch (Exception e) {
            logger.error("", e);
        }
        return sb.toString();
    }

    @RequestMapping("carMonitor")
    public String carMonitor(@RequestParam String lineid, @RequestParam String stopid, @RequestParam String direction, String t) {
        StringBuilder sb = new StringBuilder();

        try {

            int upDown = Integer.parseInt(direction);
            List<GpsEntity> list = GpsCacheData.findList(lineid, upDown);

            Map<String, Double> disMap = new HashMap<>();
            List<StationRoute> srs = GeoCacheData.find(lineid, upDown);

            StationRoute es = GeoCacheData.findByCode(lineid, upDown, stopid), s = null;

            List<GpsEntity> vs = new ArrayList<>();
            ScheduleRealInfo sch = null;
            double sum;

            int serialNo = es.getSerialNo();
            for (GpsEntity gps : list) {

                s = GeoCacheData.findByCode(gps);
                if (null == s || s.getSerialNo() > serialNo)
                    continue;

                sch = gps.getSch();
                if (null != sch) {//有班次
                    if (serialNo > sch.getQdzNo() && serialNo < sch.getZdzNo())
                        vs.add(gps);
                } else {
                    vs.add(gps);
                }

                sum = 0;

                for (StationRoute sr : srs) {
                    if (sr.getSerialNo() < serialNo
                            && sr.getSerialNo() > gps.getStationNo()) {
                        sum += sr.getLength();
                    }
                }

                disMap.put(gps.getDeviceId(), sum);
            }


            Map<String, Integer> forecast = HistoryConsumeTimeDataHandler.forecastEnd(vs, stopid);

            //to xml

            sb.append("<?xml version=\"1.0\" encoding=\"UTF-8\"?>");
            sb.append("<result>");
            sb.append("<cars lineid=\"" + lineid + "\">");

            for (GpsEntity v : vs) {
                sb.append("<car>");
                sb.append("<terminal>" + BasicCacheData.device2plateMap.get(v.getDeviceId()) + "</terminal>");
                sb.append("<stopdis>" + df.format(v.getStopDis()) + "</stopdis>");
                sb.append("<distance>" + df.format((disMap.get(v.getDeviceId()) + v.getDistance())) + "</distance>");
                sb.append("<time>" + forecast.get(v.getDeviceId()) + "</time>");
                sb.append("</car>");
            }

            sb.append("</cars>");
            sb.append("</result>");
        } catch (Exception e) {
            logger.error("", e);
        }
        return sb.toString();
    }

    @RequestMapping("getdispatchScreen")
    public String getdispatchScreen(@RequestParam String lineid, @RequestParam String direction, String t) {
        StringBuilder sb = new StringBuilder();

        try {
            String sql = "select cph as plate,dfsj as time,line_code from bsth_t_clfcxxb where line_code='" + lineid + "' and updown=" + direction;

            List<DispatchScreen> list = jdbcTemplate.query(sql, BeanPropertyRowMapper.newInstance(DispatchScreen.class));

            //to xml

            sb.append("<?xml version=\"1.0\" encoding=\"UTF-8\"?>");
            sb.append("<result>");
            sb.append("<cars lineid=\"" + lineid + "\">");

            char[] cs;
            for (DispatchScreen d : list) {
                cs = d.getTime().toCharArray();
                sb.append("<car>");
                sb.append("<vehicle>" + d.getPlate() + "</vehicle>");
                sb.append("<time>" + (cs[0] + cs[1] + ":" + cs[2] + cs[3] + ":00") + "</time>");
                sb.append("</car>");
            }

            sb.append("</cars>");
            sb.append("</result>");
        } catch (Exception e) {
            logger.error("", e);
        }
        return sb.toString();
    }
}