package com.opentravelsoft.action.manage.product; import java.io.UnsupportedEncodingException; import java.util.ArrayList; import java.util.List; import java.util.Map; import com.opentravelsoft.util.LabelValueBean; import org.springframework.beans.factory.annotation.Autowired; import com.opensymphony.xwork2.ActionContext; import com.opentravelsoft.action.ManageAction; import com.opentravelsoft.common.SessionKeyParams; import com.opentravelsoft.entity.Line; import com.opentravelsoft.entity.LineSchedule; import com.opentravelsoft.entity.LineTraffic; import com.opentravelsoft.service.product.LineScheduleService; import com.opentravelsoft.util.StringUtil; /** * 线路行程 * * @author <a herf="mailto:zhangsitao@gmail.com">Steven Zhang</a> * @version $Revision: 1.1 $ $Date: 2009/03/01 16:23:54 $ */ public class LineScheduleAction extends ManageAction { private static final long serialVersionUID = 7671898914387730451L; @Autowired private LineScheduleService routeScheduleService; private Line line; private String lineNo; private int day; /** 交通说明 */ private String traffic; /** 日程 */ private String program; /** 交通 */ private String traffic1; /** 早餐 */ private String breakfast; /** 午餐 */ private String lunch; /** 晚餐 */ private String supper; /** 住宿餐列表 */ private List<LabelValueBean> eatList; /** 交通列表 */ private List<LabelValueBean> traffic1List; /** 线路行程列表 */ private List<LineTraffic> lineTrafficList = new ArrayList<LineTraffic>(); private List<LineSchedule> scheduleList = new ArrayList<LineSchedule>(); public String execute() { Map<String, Object> session = ActionContext.getContext().getSession(); line = (Line) session.get(SessionKeyParams.EBIZ_CURRENT_ROUTE); lineNo = line.getLineNo(); scheduleList = routeScheduleService.getLineSchedule(line.getLineNo()); lineTrafficList = routeScheduleService.roGetLineTraffic(line.getLineNo()); if (scheduleList.size() == 0) { for (int i = 1; i <= line.getLineDay(); i++) { LineSchedule schedule = new LineSchedule(); schedule.getId().setDay(i); scheduleList.add(schedule); } } if (lineTrafficList.size() == 0) { for (int i = 1; i <= scheduleList.size(); i++) { LineTraffic traffic = new LineTraffic(); traffic.setDay(i); traffic.setStep(i); traffic.setLineNo(line.getLineNo()); lineTrafficList.add(traffic); } } else { ArrayList<Integer> array = new ArrayList<Integer>(); for (LineTraffic obj1 : lineTrafficList) { if (!array.contains(obj1.getDay())) { array.add(obj1.getDay()); } } for (LineSchedule obj : scheduleList) { if (!array.contains(obj.getId().getDay())) { LineTraffic traffic = new LineTraffic(); traffic.setDay(obj.getId().getDay()); traffic.setStep(lineTrafficList.size() + 1); traffic.setLineNo(line.getLineNo()); lineTrafficList.add(traffic); } } } lineTrafficList = sortByStep(lineTrafficList); eatList = getSysList("DOM_LineDine"); traffic1List = getSysList("DOM_LineTraffic"); return SUCCESS; } public String add() { scheduleList = sort(scheduleList); int day = 1; for (LineSchedule obj : scheduleList) { obj.getId().setDay(day++); } // ----------------------------------------------------------- LineSchedule schedule = new LineSchedule(); schedule.getId().setDay(day); scheduleList.add(schedule); LineTraffic traffic = new LineTraffic(); traffic.setDay(day); traffic.setStep(lineTrafficList.size() + 1); traffic.setLineNo(lineNo); lineTrafficList.add(traffic); lineTrafficList = sortByStep(lineTrafficList); for (int i = lineTrafficList.size(); i > 0; i--) { LineTraffic tra = lineTrafficList.get(i - 1); if (tra.getDay() > day) { tra.setStep(tra.getStep() + 1); } } eatList = getSysList("DOM_LineDine"); traffic1List = getSysList("DOM_LineTraffic"); return SUCCESS; } public String addCity() { int days = 1; scheduleList = sort(scheduleList); lineTrafficList = sort1(lineTrafficList); for (LineTraffic obj : lineTrafficList) { obj.setDay(days++); } lineTrafficList = sortByStep(lineTrafficList); int inpoint = 0; for (int i = lineTrafficList.size(); i > 0; i--) { LineTraffic tra = lineTrafficList.get(i - 1); if (tra.getDay() > day) { tra.setStep(tra.getStep() + 1); } else if (tra.getDay() == day) { inpoint = tra.getStep() + 1; break; } } LineTraffic traffic = new LineTraffic(); traffic.setDay(day); traffic.setStep(inpoint); traffic.setLineNo(lineNo); lineTrafficList.add(traffic); lineTrafficList = sortByStep(lineTrafficList); eatList = getSysList("DOM_LineDine"); traffic1List = getSysList("DOM_LineTraffic"); return SUCCESS; } public String delete() { line = (Line) ActionContext.getContext().getSession() .get(SessionKeyParams.EBIZ_CURRENT_ROUTE); for (LineSchedule obj : scheduleList) { if (obj.getId().getDay() == day) { LineSchedule schedule = new LineSchedule(); schedule.getId().setDay(day); schedule.getId().setLineNo(line.getLineNo()); routeScheduleService.txDeleteLineSchedule(schedule); scheduleList.remove(obj); break; } } for (int i = lineTrafficList.size(); i > 0; i--) { LineTraffic obj = lineTrafficList.get(i - 1); if (obj.getDay() == day) lineTrafficList.remove(obj); } // ----------------------------------------------------------- lineTrafficList = sortByStep(lineTrafficList); for (int i = lineTrafficList.size(); i > 0; i--) { LineTraffic tra = lineTrafficList.get(i - 1); tra.setLineNo(lineNo); if (tra.getDay() > day) { tra.setStep(tra.getStep() + 1); tra.setDay(tra.getDay() - 1); } } // --------------------------------------------------------------------- scheduleList = sort(scheduleList); int day1 = 1; for (LineSchedule obj : scheduleList) { obj.getId().setLineNo(lineNo); obj.getId().setDay(day1++); } routeScheduleService.txSaveLineSchedule(scheduleList, lineTrafficList); eatList = getSysList("DOM_LineDine"); traffic1List = getSysList("DOM_LineTraffic"); return SUCCESS; } public String save() { for (LineSchedule obj : scheduleList) { obj.getId().setLineNo(lineNo); } for (LineTraffic obj1 : lineTrafficList) { obj1.setLineNo(lineNo); } lineTrafficList = sort2(lineTrafficList); routeScheduleService.txSaveLineSchedule(scheduleList, lineTrafficList); addActionMessage("行程保存成功."); eatList = getSysList("DOM_LineDine"); traffic1List = getSysList("DOM_LineTraffic"); return SUCCESS; } @Override public void validate() { try { for (int i = 0; i < scheduleList.size(); i++) { LineSchedule trait = scheduleList.get(i); String value = trait.getProgram(); if (value.getBytes(ENCODEING).length > 3000) { addFieldError("描述", "第" + (i + 1) + "行 描述文字长度超过1500汉字或3000英数字."); } } } catch (UnsupportedEncodingException e) { } } private List<LineSchedule> sort(List<LineSchedule> scheduleList) { List<LineSchedule> list = new ArrayList<LineSchedule>(); int maxDay = 1; for (LineSchedule schedule : scheduleList) { if (schedule.getId().getDay() > maxDay) maxDay = schedule.getId().getDay(); } for (int i = 0; i < maxDay; i++) { for (int j = 0; j < scheduleList.size(); j++) { LineSchedule obj = scheduleList.get(j); if (obj.getId().getDay() == i + 1) { list.add(obj); break; } } } return list; } private List<LineTraffic> sort1(List<LineTraffic> lineTrafficList) { List<LineTraffic> list = new ArrayList<LineTraffic>(); int maxStep = 1; for (LineTraffic traffic : lineTrafficList) { if (traffic.getStep() > maxStep) maxStep = traffic.getStep(); } for (int i = 0; i < maxStep; i++) { for (int j = 0; j < lineTrafficList.size(); j++) { LineTraffic obj = lineTrafficList.get(j); if (obj.getStep() == i + 1) { list.add(obj); break; } } } return list; } private List<LineTraffic> sort2(List<LineTraffic> lineTrafficList) { List<LineTraffic> list = new ArrayList<LineTraffic>(); // 删除离开城市和抵达城市都为空 for (int j = lineTrafficList.size(); j > 0; j--) { LineTraffic obj = lineTrafficList.get(j - 1); if (!StringUtil.hasLength(obj.getFromCity()) && !StringUtil.hasLength(obj.getToCity())) { lineTrafficList.remove(obj); } } int step = 1; for (int i = 0; i < lineTrafficList.size() * 2; i++) { for (int j = 0; j < lineTrafficList.size(); j++) { LineTraffic obj = lineTrafficList.get(j); if (obj.getStep() == i + 1) { obj.setStep(step); list.add(obj); step++; break; } } } return list; } private List<LineTraffic> sortByStep(List<LineTraffic> lineTrafficList) { List<LineTraffic> list = new ArrayList<LineTraffic>(); int step = 1; for (int i = 0; i < lineTrafficList.size() * 2; i++) { for (int j = 0; j < lineTrafficList.size(); j++) { LineTraffic obj = lineTrafficList.get(j); if (obj.getStep() == i + 1) { obj.setStep(step); list.add(obj); step++; break; } } } return list; } public int getDay() { return day; } public void setDay(int day) { this.day = day; } public String getProgram() { return program; } public void setProgram(String program) { this.program = program; } public List<LineSchedule> getScheduleList() { return scheduleList; } public void setScheduleList(List<LineSchedule> scheduleList) { this.scheduleList = scheduleList; } public String getTraffic() { return traffic; } public void setTraffic(String traffic) { this.traffic = traffic; } public Line getLine() { return line; } public String getLineNo() { return lineNo; } public void setLineNo(String lineNo) { this.lineNo = lineNo; } public String getTraffic1() { return traffic1; } public void setTraffic1(String traffic1) { this.traffic1 = traffic1; } public String getBreakfast() { return breakfast; } public void setBreakfast(String breakfast) { this.breakfast = breakfast; } public String getLunch() { return lunch; } public void setLunch(String lunch) { this.lunch = lunch; } public String getSupper() { return supper; } public void setSupper(String supper) { this.supper = supper; } public List<LabelValueBean> getEatList() { return eatList; } public List<LabelValueBean> getTraffic1List() { return traffic1List; } public void setTraffic1List(List<LabelValueBean> traffic1List) { this.traffic1List = traffic1List; } public List<LineTraffic> getLineTrafficList() { return lineTrafficList; } public void setLineTrafficList(List<LineTraffic> lineTrafficList) { this.lineTrafficList = lineTrafficList; } }