ZnddTwoThread.java 8.4 KB
package com.bsth.data.zndd;

import com.bsth.data.LineConfigData;
import com.bsth.data.gpsdata_v2.GpsRealData;
import com.bsth.data.gpsdata_v2.entity.GpsEntity;
import com.bsth.data.schedule.DayOfSchedule;
import com.bsth.entity.realcontrol.ScheduleRealInfo;
import com.bsth.entity.zndd.znddStatus;
import com.bsth.repository.StationRouteRepository;
import com.bsth.repository.zndd.ZnddStatusRepository;
import org.slf4j.Logger;
import org.slf4j.LoggerFactory;
import org.springframework.beans.factory.annotation.Autowired;
import org.springframework.stereotype.Component;

import java.text.ParseException;
import java.text.SimpleDateFormat;
import java.util.Comparator;
import java.util.HashMap;
import java.util.List;
import java.util.Map;

/**
 * 调度预案 发车间隔、误点、大间隔、满载、大客流
 */
@Component
public class ZnddTwoThread extends Thread{

    Logger logger = LoggerFactory.getLogger(this.getClass());
    /*@Autowired
    StationPeopleLoggerRepository stationPeopleLoggerRepository;*/
    @Autowired
    DayOfSchedule dayOfSchedule;
    @Autowired
    LineConfigData lineConfs;
    @Autowired
    GpsRealData gpsRealData;
    @Autowired
    StationRouteRepository stationRouteRepository;
    @Autowired
    OutEntrance outEntrance;
    @Autowired
    AutomaticSch automaticSch;

    @Autowired
    ZnddStatusRepository znddStatusRepository;

    static Map<String,List> ZNDDTYPEMAP = new HashMap<>(); //已经推送过的检测




    private static SimpleDateFormat sdfHHmm = new SimpleDateFormat("HH:mm");
    private static SimpleDateFormat sdfMonth = new SimpleDateFormat("yyyy-MM-dd");
    private static SimpleDateFormat sdf = new SimpleDateFormat("yyyy-MM-dd HH:mm");
    @Override
    public void run() {
        try {
            List<znddStatus> znddStatusList = (List<znddStatus>) znddStatusRepository.findAll();

           for (znddStatus zs : znddStatusList) {
                if (zs.getOpenStatus() != null && zs.getOpenStatus().equals("0")) {
                    //预案5个
                    if (zs.getType().equals("fcjg")) {
                        new Thread() {
                            @Override
                            public void run() {
                                automaticSch.dfTz(0);
                                logger.info("发车间隔执行完毕");
                            }
                        }.start();//启动线程
                    }
                    if (zs.getType().equals("wd")) {
                        new Thread() {
                            @Override
                            public void run() {
                                automaticSch.wd();
                                logger.info("误点执行完毕");
                            }
                        }.start();//启动线程
                    }
                    if (zs.getType().equals("djg")) {
                        new Thread() {
                            @Override
                            public void run() {
                                automaticSch.dfTz(1);
                                logger.info("行车大间隔执行完毕");
                            }
                        }.start();//启动线程

                    }
                    if (zs.getType().equals("mz")) {
                        new Thread() {
                            @Override
                            public void run() {
                                automaticSch.mz();
                                logger.info("满载执行完毕");
                            }
                        }.start();//启动线程

                    }
                    if (zs.getType().equals("desctwo")) {
                        new Thread() {
                            @Override
                            public void run() {
                                automaticSch.TowdescSch();
                                logger.info("末二班车执行完毕");
                            }
                        }.start();//启动线程


                    }
                }
            }


        } catch (Exception e) {
            logger.info("智能调度线程——————", e);
        }
    }


    //满载
   /* public void MZ(){
        try {
            StringBuilder sb = HttpClientUtils.get(url);
            List<Object> list = JSONArray.parseArray(String.valueOf(sb));
            for (Object b :list){
                Map m = (Map) b;
               Integer num = Integer.parseInt(m.get("inside_num").toString());
               if (num >= 15){ //大间隔阈值  检测到超过15个人的时候推送
                   ScheduleRealInfo sr = dayOfSchedule.executeCurr(m.get("nbbm").toString()); //查询当前车辆执行班次
                   GpsEntity gps = gpsRealData.get(m.get("sbbh").toString());
                   Map msp = new HashMap();
                   msp.put("lineCode",m.get("xlbm"));
                   msp.put("lineName",m.get("xlmc"));
                   msp.put("stationName",gps.getStationName());
                   msp.put("rqStr",sdfMonth.format(new Date()));
                   msp.put("rq",sdfHHmm.format(new Date()));
                   msp.put("type","MZ");
                   msp.put("numType",num);
                   if (sr != null )
                       msp.put("xlDir",sr.getXlDir());
                   
                   if (gps != null )
                       msp.put("station",gps.getStation().getCode());
                   
                   ts(msp);
               }
            }
            
        }catch (Exception e){
            logger.error("满载检测接口出错-----------",e);
        }
    }*/
    public void ts(Map m) throws ParseException {
        outEntrance.Znddjk(m);//测试推送
    }
 /*   public void ts(Map m) throws ParseException {
        //记录存一下  --超过当前时间的是否推送?
        String st = m.get("lineCode")+"_"+m.get("type")+"_"+m.get("rqStr");
        Long sj = sdf.parse(m.get("rqStr").toString() +" "+ m.get("rq")).getTime();
        List<Long> list = new ArrayList();
        //111_DJG_2024-06-24
        if (ZNDDTYPEMAP.get(st) != null ) {
            list = ZNDDTYPEMAP.get(st);
            int i = 0;
            for (Long s : list){
                if (Math.abs(s - sj) > (60 * 60 * 1000)){
                    i ++ ;
                }
            }
            if (i == list.size()){
                list.add(sj);
                ZNDDTYPEMAP.put(st,list);//存记录
                outEntrance.Znddjk(m);//推送
            }
            return;
        }else {
            list.add(sj);
            ZNDDTYPEMAP.put(st,list);//存记录
            outEntrance.Znddjk(m);//推送
        }
       
    }

*/

   /* //发车间隔
    public void FCJG(){
        try {
            //无数据情况下 查看发车间隔配置数据是否正常bsth_c_calc_interval
            List<CalcIntervalDetail> fcjgList = userCarCountHandler.calcLast();
            if (fcjgList!= null && !fcjgList.isEmpty()){
                for (CalcIntervalDetail cd : fcjgList){
                    Map sp = new HashMap();
                    sp.put("lineCode",cd.getLineCode());
                    sp.put("lineName",cd.getLineName());
                    sp.put("rqStr",cd.getDate());
                    sp.put("rq",cd.getSjfc2());
                    sp.put("type","FCJG");
                    sp.put("xlDir",cd.getXlDir());
                    sp.put("numType",cd.getSubTime());
                    sp.put("fcsj",cd.getSjfc2());
                    sp.put("stationName",cd.getStation());
                    ts(sp);
                }
            }
        }catch (Exception e){
            logger.error("发车间隔检测出现出错-----------",e);
        }
    }
*/

    //转换
    public Map addStationPeople(ScheduleRealInfo info,String type,Long sst,String sj) throws ParseException{
        Map sp = new HashMap();
        sp.put("lineCode",info.getXlBm());
        sp.put("lineName",info.getXlName() );
        sp.put("rqStr",info.getScheduleDateStr());
        sp.put("rq",new java.sql.Date(sdf.parse((info.getScheduleDateStr()+" " + sj)).getTime())); //检测到时间
        sp.put("type",type);
        sp.put("xlDir",info.getXlDir());
        sp.put("numType",sst);
        return sp;
    }



    //排序
    public static class GpsComp implements Comparator<GpsEntity> {
        @Override
        public int compare(GpsEntity o1, GpsEntity o2) {
            return Integer.parseInt(o1.getRemark()) - Integer.parseInt(o2.getRemark());
        }
    }

}