LoggerZnddServiceImpl.java 5.29 KB
package com.bsth.service.zndd.impl;

import com.bsth.controller.realcontrol.dto.DfsjChange;
import com.bsth.data.schedule.DayOfSchedule;
import com.bsth.data.schedule.ScheduleComparator;
import com.bsth.entity.realcontrol.ScheduleRealInfo;
import com.bsth.entity.zndd.LoggerZndd;
import com.bsth.repository.realcontrol.ScheduleRealInfoRepository;
import com.bsth.repository.zndd.LoggerZnddRepository;
import com.bsth.service.impl.BaseServiceImpl;
import com.bsth.service.realcontrol.ScheduleRealInfoService;
import com.bsth.service.zndd.LoggerZnddService;
import org.slf4j.Logger;
import org.slf4j.LoggerFactory;
import org.springframework.beans.factory.annotation.Autowired;

import org.springframework.data.domain.Sort;
import org.springframework.stereotype.Service;
import org.springframework.transaction.annotation.Transactional;

import java.text.SimpleDateFormat;
import java.util.ArrayList;
import java.util.Collections;
import java.util.List;
import java.util.Map;

@Service
public class LoggerZnddServiceImpl extends BaseServiceImpl<LoggerZndd, Integer> implements LoggerZnddService {

    @Autowired
    LoggerZnddRepository loggerZnddRepository;
    @Autowired
    DayOfSchedule dayOfSchedule;
    @Autowired
    ScheduleRealInfoService scheduleRealInfoService;
    @Autowired
    ScheduleRealInfoRepository scheduleRealInfoRepository;


    Logger logger = LoggerFactory.getLogger(this.getClass());
    private static SimpleDateFormat sdfMonth = new SimpleDateFormat("HH:mm");
    private static SimpleDateFormat sdf = new SimpleDateFormat("yyyy-MM-dd HH:mm");
    public List<Map<String, Object>> listAll(Map<String, Object> map){
         loggerZnddRepository.findAll((Sort) map);

         return null;
    }


    @Override
    public ScheduleRealInfo schlist(String lineCode,Integer dir){
        List<ScheduleRealInfo> list =  dayOfSchedule.findByLineAndUpDown(lineCode,dir);
        if (!list.isEmpty() ){
            for (ScheduleRealInfo sr : list){
                if(sr.getBcType().equals("normal")){
                    return sr;
                }
            }
        }
        return null;
    };

    @Override
    @Transactional //发车间隔  误点
    public Map<String, Object> znddConfig(Map<String, Object> map){
        //查出离触发时间最近的一次路单  修改部分值
        //包装好路单添加如临加班次

        List<DfsjChange> dfsjcs = new ArrayList<>();//返回的数据
        try {
            String lineCode = map.get("lineCode") != null ? map.get("lineCode").toString() : null;
            String xlDir = map.get("xlDir") != null ? map.get("xlDir").toString() : null;
            String rq = map.get("rq") != null ? map.get("rq").toString() : null;
            List<ScheduleRealInfo>  upoldSchDateList = new ArrayList<>(), //上行
                    dnoldSchDateList = new ArrayList<>(); //下行


            List<ScheduleRealInfo> listReal = new ArrayList<>();
            Boolean typeReal = false;
            //排班依次往后
            List<ScheduleRealInfo> list =  dayOfSchedule.findByLineCode(lineCode);
            //区分上下行
            for (ScheduleRealInfo t : list){
                if (t.getXlDir().equals("0")){
                    upoldSchDateList.add(t);
                }else {
                    dnoldSchDateList.add(t);
                }
            }
            if (xlDir.equals("0")){
                Collections.sort(upoldSchDateList, new ScheduleComparator.FCSJ());//排序
                list = upoldSchDateList;
            }else {
                Collections.sort(upoldSchDateList, new ScheduleComparator.FCSJ());//排序
                list = upoldSchDateList;
            }

            for (ScheduleRealInfo info : list) {
                //从相等开始
                if (info.getFcsjActual() != null && !info.getFcsjActual().equals("")) {
                    if (info.getFcsjActual().equals(rq))
                        typeReal = true;
                    continue;
                }

                if (typeReal && (info.getBcType().equals("normal")|| info.getBcType().equals("region")))
                    listReal.add(info);

                if (listReal.size() >= 5) //或者不满5条结束 listReal.size()从1开始
                    break;

            }
            //处理listReal 5条数据或5条一下
            for (int i = 0; i < listReal.size() ;i++){
                DfsjChange cl = new DfsjChange();
                Integer[] mis = {3,2,2,1,1}; //往后5个班次分别延后3 2 2 1 1
                ScheduleRealInfo info  = listReal.get(i);
                int ms = mis[i];
                //未发车时 才可改变
                if (info.getFcsjActual() == null || info.getFcsjActual().equals("")){
                    String dfsj = sdfMonth.format(sdf.parse(info.getScheduleDateStr()+ " " + info.getDfsj()).getTime() + (ms * 60 * 1000)); //延后几分钟
                    cl.setSchId(info.getId());
                    cl.setOld_dfsj(info.getDfsj());
                    cl.setNew_dfsj(dfsj);
                    dfsjcs.add(cl);
                }
            }

            return scheduleRealInfoService.multi_dftz(dfsjcs);
        }catch (Exception e){
            logger.info("--",e);
        }


        return null;
    }


    public  ScheduleRealInfo thissch(Integer ids){
        return dayOfSchedule.next(dayOfSchedule.get(ids));
    }


}