JDInterface.java 8.36 KB
package com.bsth.data.jddzx;

import com.bsth.common.ResponseCode;
import com.bsth.entity.realcontrol.ChildTaskPlan;
import com.bsth.entity.realcontrol.ScheduleRealInfo;
import com.bsth.repository.realcontrol.ScheduleRealInfoRepository;
import com.bsth.service.report.CulateMileageService;
import com.bsth.util.Arith;
import com.bsth.util.SignUtils;
import org.slf4j.Logger;
import org.slf4j.LoggerFactory;
import org.springframework.beans.factory.annotation.Autowired;
import org.springframework.jdbc.core.JdbcTemplate;
import org.springframework.web.bind.annotation.*;

import java.math.BigDecimal;
import java.util.*;
import java.util.stream.Collectors;

/**
 * 嘉定定制线对外接口
 */
@RestController
@RequestMapping("/jddzx")
public class JDInterface {

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

    @Autowired
    ScheduleRealInfoRepository scheduleRealInfoRepository;

    @Autowired
    CulateMileageService culateService;

    @Autowired
    JdbcTemplate jdbcTemplate;


    @RequestMapping(value = "/zdl", method = RequestMethod.POST)
    public Map OutCarOutCar(@RequestBody Map<String,Object> params) {
        Map rtn = new HashMap<>();
        try {
            logger.info("嘉定定制线准点率接口调用----");
            if(!SignUtils.validation(Long.parseLong(params.get("timestamp").toString()),params.get("sign").toString())){
                rtn.put("status",ResponseCode.NO_AUTHENTICATION);
                return rtn;
            }
            String date=params.get("date").toString();//yyyy-MM-dd
            String lineCode=params.get("lineCode").toString();
            List<ScheduleRealInfo> schList=scheduleRealInfoRepository.scheduleDaily(lineCode, date);
            if(schList.size()==0){
                rtn.put("status",ResponseCode.SUCCESS);
                return rtn;
            }
            //去除空驶 临加 子任务产生的主任务
            List<ScheduleRealInfo> list=schList.stream().filter((sch) -> !sch.getBcType().equals("out") && !sch.getBcType().equals("in") && !sch.getBcType().equals("venting")
                    && !sch.getBcType().equals("ldks") && !sch.isSflj() && !sch.isCcService()).collect(Collectors.toList());
            //按上下行分组并排序
            Map<String,List<ScheduleRealInfo>> xlDir=list.stream().collect(Collectors.groupingBy(ScheduleRealInfo::getXlDir));
            List<ScheduleRealInfo> up = xlDir.get("0");
            up.sort(Comparator.comparing(sch->sch.getFcsj()));
            List<ScheduleRealInfo> down = xlDir.get("1");
            down.sort(Comparator.comparing(sch->sch.getFcsj()));

            Map<String,Object> data=new HashMap<>();

            //起讫站发车准点率
            Map<String,Object> qqzzdl=new HashMap<>();
            qqzzdl.put("up",culateService.culateFczdl(up,""));
            qqzzdl.put("down",culateService.culateFczdl(down,""));
            data.put("qqzzdl",qqzzdl);

            //首末班车发车准点率
            List<ScheduleRealInfo> smb_up=new ArrayList<>();
            if(up.size()>1){
                smb_up.add(up.get(0));
            }
            if(up.size()>2){
                smb_up.add(up.get(1));
            }
            List<ScheduleRealInfo> smb_down=new ArrayList<>();
            if(down.size()>1){
                smb_down.add(down.get(0));
            }
            if(down.size()>2){
                smb_down.add(down.get(1));
            }
            Map<String,Object> smbzdl=new HashMap<>();
            smbzdl.put("up",culateService.culateFczdl(smb_up,""));
            smbzdl.put("down",culateService.culateFczdl(smb_down,""));
            data.put("smbzdl",smbzdl);

            //平均车速
            Map<String,Object> pjcs=new HashMap<>();
            pjcs.put("up_z",culateService.culatePjcs(up,"zgf"));
            pjcs.put("up_w",culateService.culatePjcs(up,"wgf"));
            pjcs.put("up_q",culateService.culatePjcs(up,""));
            pjcs.put("down_z",culateService.culatePjcs(down,"zgf"));
            pjcs.put("down_w",culateService.culatePjcs(down,"wgf"));
            pjcs.put("down_q",culateService.culatePjcs(down,""));
            data.put("pjcs",pjcs);

            //人员投入
            int jhrytl=culateService.culateJhry(schList,"");
            int sjrytl=culateService.culateSjry(schList,"");
            BigDecimal rytl=BigDecimal.valueOf(100);
            if(jhrytl>0){
                rytl=BigDecimal.valueOf((double)sjrytl/jhrytl*100);
            }
            data.put("rytl",rytl.setScale(2,BigDecimal.ROUND_HALF_UP));

            //车辆投入
            Map<String,Object> cltl=new HashMap<>();
            int jh_z=culateService.culateJhcl(schList,"zgf");
            int sj_z=culateService.culateSjcl(schList,"zgf");
            BigDecimal cltl_z=BigDecimal.valueOf(100);
            if(jh_z>0){
                cltl_z=BigDecimal.valueOf((double)sj_z/jh_z*100);
            }
            cltl.put("cltl_z",cltl_z.setScale(2,BigDecimal.ROUND_HALF_UP));

            int jh_w=culateService.culateJhcl(schList,"wgf");
            int sj_w=culateService.culateSjcl(schList,"wgf");
            BigDecimal cltl_w=BigDecimal.valueOf(100);
            if(jh_w>0){
                cltl_w=BigDecimal.valueOf((double)sj_w/jh_w*100);
            }
            cltl.put("cltl_w",cltl_w.setScale(2,BigDecimal.ROUND_HALF_UP));

            int jh_q=culateService.culateJhcl(schList,"");
            int sj_q=culateService.culateSjcl(schList,"");
            BigDecimal cltl_q=BigDecimal.valueOf(100);
            if(jh_q>0){
                cltl_q=BigDecimal.valueOf((double)sj_q/jh_q*100);
            }
            cltl.put("cltl_q",cltl_q.setScale(2,BigDecimal.ROUND_HALF_UP));

            data.put("cltl",cltl);

            //班次投入
            Map<String,Object> bctl=new HashMap<>();
            int jhbctl_z=culateService.culateJhbc(schList,"zgf");
            int sjbctl_z=culateService.culateSjbc(schList, "zgf") + culateService.culateLjbc(schList, "zgf");
            BigDecimal bctl_z=BigDecimal.valueOf(100);
            if(jhbctl_z>0){
                bctl_z=BigDecimal.valueOf((double)sjbctl_z/jhbctl_z*100);
            }
            bctl.put("bctl_z",bctl_z.setScale(2,BigDecimal.ROUND_HALF_UP));

            int jhbctl_w=culateService.culateJhbc(schList,"wgf");
            int sjbctl_w=culateService.culateSjbc(schList, "wgf") + culateService.culateLjbc(schList, "wgf");
            BigDecimal bctl_w=BigDecimal.valueOf(100);
            if(jhbctl_w>0){
                bctl_w=BigDecimal.valueOf((double)sjbctl_w/jhbctl_w*100);
            }
            bctl.put("bctl_w",bctl_w.setScale(2,BigDecimal.ROUND_HALF_UP));

            int jhbctl_q=culateService.culateJhbc(schList,"");
            int sjbctl_q=culateService.culateSjbc(schList, "") + culateService.culateLjbc(schList, "");
            BigDecimal bctl_q=BigDecimal.valueOf(100);
            if(jhbctl_q>0){
                bctl_q=BigDecimal.valueOf((double)sjbctl_q/jhbctl_q*100);
            }
            bctl.put("bctl_q",bctl_q.setScale(2,BigDecimal.ROUND_HALF_UP));

            data.put("bctl",bctl);

            //公里投入
            List<ScheduleRealInfo> lists = new ArrayList<>();
            for (int i = 0; i < schList.size(); i++) {
                ScheduleRealInfo s = schList.get(i);
                Set<ChildTaskPlan> cts = s.getcTasks();
                if (cts != null && cts.size() > 0) {
                    lists.add(s);
                } else {
                    if (s.getFcsjActual() != null && s.getZdsjActual() != null) {
                        lists.add(s);
                    }
                }
            }
            double ksgl = culateService.culateKsgl(list);//子任务空驶公里
            double jccgl = culateService.culateJccgl(lists);//空驶班次公里
            double sjgl = culateService.culateSjgl(lists);//实际营运公里
            double ljgl = culateService.culateLjgl(lists);//临加公里
            Map<String,Object> gltl=new HashMap<>();
            gltl.put("sj",Arith.add(Arith.add(ksgl, jccgl), Arith.add(sjgl, ljgl)));//实际总公里
            gltl.put("jh",Arith.add(culateService.culateJhgl(list), culateService.culateJhJccgl(list))); //计划总里程
            data.put("gltl",gltl);

            rtn.put("data",data);
            rtn.put("status",ResponseCode.SUCCESS);
        } catch (Exception e) {
            rtn.put("status", ResponseCode.ERROR);
            logger.error("",e);
        }
        return rtn;
    }


}