留座统计,计算所需留座数

一、配置中心

public List<SecuReserveSeatMonitor> queryNewConfigReserveSeat(Map<String, Object> param) {
        List<SecuReserveSeatMonitor> results = new ArrayList<SecuReserveSeatMonitor>();
        //配置人数,座位数
        List<SecuReserveSeatMonitor> baseResult = secuPairingReserveSeatMonitorDao.queryNewConfigReserveSeat(param);
        // 根据taskId封装map
        Map<String, Object> params = new HashMap<String, Object>();
        List<Long> taskIds = new ArrayList<Long>();
        // 区分每个任务环
        Map<Long, List<SecuReserveSeatMonitor>> everyTask = new HashMap<Long, List<SecuReserveSeatMonitor>>();
        Map<Long, List<SecuReserveSeatMonitor>> everyTaskNotLift = new HashMap<Long, List<SecuReserveSeatMonitor>>();
        if (baseResult != null && !baseResult.isEmpty()) {
            for (SecuReserveSeatMonitor r : baseResult) {
                List<SecuReserveSeatMonitor> resultById = everyTask.get(r.getFlightTaskId());
                if (resultById == null) {
                    resultById = new ArrayList<SecuReserveSeatMonitor>();
                    everyTask.put(r.getFlightTaskId(), resultById);
                }
                resultById.add(r);
                // 计算非搭机的任务中计划数
                if ("是".equals(r.getIfLift())) {
                    continue;
                }
                List<SecuReserveSeatMonitor> resultById2 = everyTaskNotLift.get(r.getFlightTaskId());
                if (resultById2 == null) {
                    resultById2 = new ArrayList<SecuReserveSeatMonitor>();
                    everyTaskNotLift.put(r.getFlightTaskId(), resultById2);
                }
                resultById2.add(r);
            }
            for (Map.Entry<Long, List<SecuReserveSeatMonitor>> entry : everyTask.entrySet()) {
                taskIds.add(entry.getKey());
            }
            // 配置人数
            if (taskIds == null || taskIds.size() <= 0) {
                return null;
            }

            List<SecuReserveSeatMonitor> configPersons = new ArrayList<SecuReserveSeatMonitor>();
            List<List<Long>> taskIdsubListList = Lists.partition(taskIds, 800);
            if (taskIdsubListList != null && taskIdsubListList.size() > 0) {
                for (List<Long> taskIdSublist : taskIdsubListList) {
                    params.put("flightTaskIds", taskIdSublist);
                    // 查询配置人数
                    List<SecuReserveSeatMonitor> personSubResult = secuPairingReserveSeatMonitorDao
                            .queryConfigPersonNum(params);
                    configPersons.addAll(personSubResult);
                }
            }
            if (configPersons == null || configPersons.size() <= 0) {
                return null;
            }

            // 计算留座人数
            for (SecuReserveSeatMonitor re : baseResult) {
                // 把配置人数加进去
                for (SecuReserveSeatMonitor person : configPersons) {
                    if (person.getFlightTaskId().equals(re.getFlightTaskId())) {
                        re.setPersonNum(person.getPersonNum());
                        continue;
                    }
                }

                // 拼接航线
                String flightRoute = re.getDepartPortName() + "-" + re.getArrivalPortName();
                re.setFlightRoute(flightRoute);
                // 计算留座人数
                int seatNum = 2;//预留的座位基数
                int needSeatNum = re.getPersonNum() - seatNum;
                double roomNum = Math.round((double)needSeatNum/2);//向上取整
                int room = new Double(roomNum).intValue();//房间(一个房间有2个座位,可以坐2个人)
                re.setNeedSeatNum(Long.valueOf(needSeatNum));
                re.setDifferent("N");
                String str = "配置人数:" + re.getPersonNum() + " - 座位数:" + seatNum + " = 留座数:"
                        + re.getNeedSeatNum() + "(注意:需增加:" + room + "个房间)";
                re.setFormulaStr(str);// 将公式输出,方便差错
                results.add(re);
            }
        }
        return results;
    }

二、实际留座

    public List<SecuReserveSeatMonitor> queryActualReserveSeatMonitor(Map<String, Object> param) {
        List<SecuReserveSeatMonitor> results = new ArrayList<SecuReserveSeatMonitor>();

        // 座位数,配置人数
        List<SecuReserveSeatMonitor> baseResult = secuPairingReserveSeatMonitorDao.queryNewConfigReserveSeat(param);
        // 实际排班人数
        List<Long> planIds = new ArrayList<Long>();// 记录非搭机航班id
        List<Long> planIds2 = new ArrayList<Long>();// 记录搭机航班id
        List<Long> taskIds = new ArrayList<Long>();//任务id
        if (baseResult != null && !baseResult.isEmpty()) {
            for (SecuReserveSeatMonitor r : baseResult) {
                if (r.getFlightPlanId() != null && r.getFlightTaskId() != null) {
                    if (r.getIfLift().equals("否")) {
                        planIds.add(r.getFlightPlanId());
                    } else if (r.getIfLift().equals("是")) {
                        planIds2.add(r.getFlightPlanId());
                    }
                    taskIds.add(r.getFlightTaskId());
                }
            }
            if ((planIds == null || planIds.size() <= 0) && (planIds2 == null || planIds2.size() <= 0)
                && (taskIds == null || taskIds.size() <= 0)) {
                return null;
            }
            List<SecuReserveSeatMonitor> assignResult = new ArrayList<SecuReserveSeatMonitor>();// 记录非搭机航班的实际留座信息
            List<List<Long>> flightIdsubListList = Lists.partition(planIds, 800);
            if (flightIdsubListList != null && flightIdsubListList.size() > 0) {
                Map<String, Object> params = null;
                for (List<Long> flightIdSublist : flightIdsubListList) {
                    params = new HashMap<String, Object>();
                    params.put("flightPlanIds", flightIdSublist);
                    List<SecuReserveSeatMonitor> assignSubResult = secuPairingReserveSeatMonitorDao
                            .queryActualAssignAllPersonNum(params);
                    assignResult.addAll(assignSubResult);
                }
            }

            List<SecuReserveSeatMonitor> assignResult2 = new ArrayList<SecuReserveSeatMonitor>();// 记录搭机航班的实际留座信息
            List<List<Long>> flightIdsubListList2 = Lists.partition(planIds2, 800);
            if (flightIdsubListList2 != null && flightIdsubListList2.size() > 0) {
                Map<String, Object> params = null;
                for (List<Long> flightIdSublist2 : flightIdsubListList2) {
                    params = new HashMap<String, Object>();
                    params.put("flightPlanIds", flightIdSublist2);
                    List<SecuReserveSeatMonitor> assignSubResult2 = secuPairingReserveSeatMonitorDao
                            .queryActualAssignAllPersonNumLift(params);
                    assignResult2.addAll(assignSubResult2);
                }
            }

            List<SecuReserveSeatMonitor> personNumResult = new ArrayList<SecuReserveSeatMonitor>();//记录配置人数信息
            List<List<Long>> taskIdsubListList = Lists.partition(taskIds, 800);
            if (taskIdsubListList != null && taskIdsubListList.size() > 0) {
                Map<String, Object> params = null;
                for (List<Long> taskIdSublist : taskIdsubListList) {
                    params = new HashMap<String, Object>();
                    params.put("flightTaskIds", taskIdSublist);
                    // 查询配置人数
                    List<SecuReserveSeatMonitor> personSubResult = secuPairingReserveSeatMonitorDao
                            .queryConfigPersonNum(params);
                    personNumResult.addAll(personSubResult);
                }
            }

            // 计算留座人数
            for (SecuReserveSeatMonitor re : baseResult) {
                for (SecuReserveSeatMonitor ar : assignResult) {
                    if (ar.getFlightPlanId().equals(re.getFlightPlanId())
                            && ar.getFlightTaskId().equals(re.getFlightTaskId())) {
                        re.setActualNum(ar.getActualNum());// 把全部人员加进去
                        continue;
                    }
                }

                for (SecuReserveSeatMonitor ar2 : assignResult2) {
                    if (ar2.getFlightPlanId().equals(re.getFlightPlanId())
                            && ar2.getFlightTaskId().equals(re.getFlightTaskId())) {
                        re.setActualNum(ar2.getActualNum());// 把全部人员加进去
                        continue;
                    }
                }

                // 把配置人员加进去
                for (SecuReserveSeatMonitor person : personNumResult) {
                    if (person.getFlightTaskId().equals(re.getFlightTaskId())) {
                        re.setPersonNum(person.getPersonNum());//配置人数
                        continue;
                    }
                }

                // 拼接航线
                String flightRoute = re.getDepartPortName() + "-" + re.getArrivalPortName();
                re.setFlightRoute(flightRoute);
                re.setDifferent("N");
                // 计算留座人数
                int seatNum = 2;//预留的座位基数
                int needSeatNum = 0;
                needSeatNum = re.getActualNum() - re.getPersonNum() - seatNum;
                double roomNum = Math.round((double)needSeatNum/2);//向上取整
                int room = new Double(roomNum).intValue();//房间(一个房间有2个座位,可以坐2个人)
                re.setNeedSeatNum(Long.valueOf(needSeatNum));
                String str = "实际已排人数:" + re.getActualNum() +" - 配置人数:"+ re.getPersonNum() +" - 座位数:" + seatNum + " = 留座数:" + re.getNeedSeatNum() + "(注意:需增加:" + room + "个房间)";
                re.setFormulaStr(str);// 将公式输出,方便查错
                if (needSeatNum > 0) {
                    results.add(re);
                }
            }
        }
        return results;
    }

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值