一、配置中心
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;
}