package com.opentravelsoft.providers.hibernate.product; import java.util.ArrayList; import java.util.List; import org.hibernate.LockMode; import org.hibernate.criterion.CriteriaSpecification; import org.hibernate.criterion.DetachedCriteria; import org.hibernate.criterion.Order; import org.hibernate.criterion.Restrictions; import org.springframework.orm.hibernate3.HibernateTemplate; import org.springframework.stereotype.Repository; import com.opentravelsoft.entity.LineSchedule; import com.opentravelsoft.entity.LineScheduleId; import com.opentravelsoft.entity.LineTraffic; import com.opentravelsoft.providers.hibernate.GenericDaoHibernate; import com.opentravelsoft.providers.product.LineScheduleDao; import com.opentravelsoft.util.StringUtil; /** * * @author <a herf="mailto:zhangsitao@gmail.com">Steven Zhang</a> */ @Repository("LineScheduleDao") public class LineScheduleDaoImpl extends GenericDaoHibernate<LineSchedule, Long> implements LineScheduleDao { public LineScheduleDaoImpl() { super(LineSchedule.class); } @SuppressWarnings("unchecked") public List<LineSchedule> getLineSchedule(String lineNo) { DetachedCriteria criteria = DetachedCriteria.forClass(LineSchedule.class); criteria.add(Restrictions.eq("id.lineNo", lineNo)); criteria.addOrder(Order.asc("id.day")); criteria.setResultTransformer(CriteriaSpecification.ROOT_ENTITY); return getHibernateTemplate().findByCriteria(criteria); } @SuppressWarnings("unchecked") public int insertLineSchedule(String lineNo) { StringBuilder sql = new StringBuilder(); sql.append("from LineSchedule "); sql.append("where id.lineNo =? "); sql.append("order by id.day desc "); Object[] params = { lineNo }; List<LineSchedule> list = getHibernateTemplate().find(sql.toString(), params); int day = 1; if (list.size() > 0) { LineSchedule schedule2 = list.get(0); day = schedule2.getId().getDay(); day = day + 1; } LineScheduleId tfa602Id = new LineScheduleId(); tfa602Id.setLineNo(lineNo); tfa602Id.setDay(day); HibernateTemplate template = getHibernateTemplate(); LineSchedule schedule = (LineSchedule) template.get(LineSchedule.class, tfa602Id, LockMode.PESSIMISTIC_WRITE); if (schedule == null) { LineSchedule schedule1 = new LineSchedule(); schedule1.setId(tfa602Id); template.save(schedule1); } return 0; } @SuppressWarnings("unchecked") public int deleteLineSchedule(LineSchedule schedule) { LineScheduleId tfa602Id = new LineScheduleId(); tfa602Id.setLineNo(schedule.getId().getLineNo()); tfa602Id.setDay(schedule.getId().getDay()); HibernateTemplate template = getHibernateTemplate(); LineSchedule tfa602 = (LineSchedule) template.get(LineSchedule.class, tfa602Id, LockMode.PESSIMISTIC_WRITE); if (tfa602 != null) { template.delete(tfa602); } StringBuilder sb = new StringBuilder(); sb.append("from LineTraffic "); sb.append("where lineNo=? and day=? "); Object[] params = { schedule.getId().getLineNo(), schedule.getId().getDay() }; List<LineTraffic> list = template.find(sb.toString(), params); if (list != null) { template.deleteAll(list); } return 0; } @SuppressWarnings("unchecked") public int saveLineSchedule(List<LineSchedule> scheduleList, List<LineTraffic> trifficList) { String lineNo = null; List<Integer> keyList = new ArrayList<Integer>(); List<Integer> keyList1 = new ArrayList<Integer>(); List<Integer> keyList2 = new ArrayList<Integer>(); HibernateTemplate template = getHibernateTemplate(); for (LineSchedule obj : scheduleList) { LineScheduleId tfa602Id = new LineScheduleId(); lineNo = obj.getId().getLineNo(); tfa602Id.setLineNo(lineNo); tfa602Id.setDay(obj.getId().getDay()); LineSchedule schedule = (LineSchedule) template.get(LineSchedule.class, tfa602Id, LockMode.PESSIMISTIC_WRITE); if (schedule != null) { if (StringUtil.hasLength(obj.getProgram()) || StringUtil.hasLength(obj.getBreakfast()) || StringUtil.hasLength(obj.getLunch()) || StringUtil.hasLength(obj.getSupper()) || StringUtil.hasLength(obj.getQuarter())) { schedule.setId(tfa602Id); schedule.setProgram(obj.getProgram()); // tfa602.setTraffic(obj.getTraffic()); // tfa602.setTraffic1(obj.getTraffic1()); schedule.setBreakfast(obj.getBreakfast()); schedule.setLunch(obj.getLunch()); schedule.setSupper(obj.getSupper()); schedule.setQuarter(obj.getQuarter()); template.saveOrUpdate(schedule); } else { keyList1.add(obj.getId().getDay()); } } else { if (StringUtil.hasLength(obj.getProgram()) || StringUtil.hasLength(obj.getBreakfast()) || StringUtil.hasLength(obj.getLunch()) || StringUtil.hasLength(obj.getSupper()) || StringUtil.hasLength(obj.getQuarter())) { schedule = new LineSchedule(); schedule.setId(tfa602Id); schedule.setProgram(obj.getProgram()); // tfa602.setTraffic(obj.getTraffic()); // tfa602.setTraffic1(obj.getTraffic1()); schedule.setBreakfast(obj.getBreakfast()); schedule.setLunch(obj.getLunch()); schedule.setSupper(obj.getSupper()); schedule.setQuarter(obj.getQuarter()); template.save(schedule); } else { keyList1.add(obj.getId().getDay()); } } keyList.add(obj.getId().getDay()); } List<LineSchedule> oldList = this.getLineSchedule(lineNo); for (LineSchedule schedule : oldList) { // 删除多余的天 if (!keyList.contains(schedule.getId().getDay())) { LineScheduleId tfa602Id = new LineScheduleId(); tfa602Id.setLineNo(lineNo); tfa602Id.setDay(schedule.getId().getDay()); LineSchedule tfa602 = (LineSchedule) template.get(LineSchedule.class, tfa602Id, LockMode.PESSIMISTIC_WRITE); template.delete(tfa602); } } for (LineTraffic obj1 : trifficList) { LineTraffic tbllinetraffic = (LineTraffic) template.get( LineTraffic.class, obj1.getId(), LockMode.PESSIMISTIC_WRITE); if (tbllinetraffic != null) { if (StringUtil.hasLength(obj1.getFromCity()) || StringUtil.hasLength(obj1.getToCity()) || StringUtil.hasLength(obj1.getTravelTime())) { tbllinetraffic.setDay(obj1.getDay()); tbllinetraffic.setStep(obj1.getStep()); tbllinetraffic.setLineNo(obj1.getLineNo()); tbllinetraffic.setFromCity(obj1.getFromCity()); tbllinetraffic.setToCity(obj1.getToCity()); tbllinetraffic.setTravelTime(obj1.getTravelTime()); tbllinetraffic.setTraffic(obj1.getTraffic()); template.saveOrUpdate(tbllinetraffic); } else { keyList2.add(obj1.getStep()); } } else { if (StringUtil.hasLength(obj1.getFromCity()) || StringUtil.hasLength(obj1.getToCity()) || StringUtil.hasLength(obj1.getTravelTime())) { tbllinetraffic = new LineTraffic(); tbllinetraffic.setDay(obj1.getDay()); tbllinetraffic.setStep(obj1.getStep()); tbllinetraffic.setLineNo(obj1.getLineNo()); tbllinetraffic.setFromCity(obj1.getFromCity()); tbllinetraffic.setToCity(obj1.getToCity()); tbllinetraffic.setTravelTime(obj1.getTravelTime()); tbllinetraffic.setTraffic(obj1.getTraffic()); template.save(tbllinetraffic); } else { keyList2.add(obj1.getStep()); } } } StringBuilder sb = new StringBuilder(); sb.append("from LineTraffic "); sb.append("where lineNo= ? order by day,step"); Object[] params = { lineNo }; List<LineTraffic> oldList1 = getHibernateTemplate().find(sb.toString(), params); for (LineTraffic tbllinetraffic : oldList1) { if (keyList1.contains(tbllinetraffic.getDay())) { LineTraffic tbllinetraffic1 = (LineTraffic) template.get( LineTraffic.class, tbllinetraffic.getId(), LockMode.PESSIMISTIC_WRITE); template.delete(tbllinetraffic1); } } for (LineTraffic tbllinetraffic : oldList1) { // 删除多余的天 if (keyList2.contains(tbllinetraffic.getStep())) { LineTraffic tbllinetraffic1 = (LineTraffic) template.get( LineTraffic.class, tbllinetraffic.getId(), LockMode.PESSIMISTIC_WRITE); template.delete(tbllinetraffic1); } } return 0; } @SuppressWarnings("unchecked") public List<LineTraffic> getLineTraffic(String lineNo) { DetachedCriteria criteria = DetachedCriteria.forClass(LineTraffic.class); criteria.add(Restrictions.eq("lineNo", lineNo)); criteria.addOrder(Order.asc("day")); criteria.addOrder(Order.asc("step")); criteria.setResultTransformer(CriteriaSpecification.ROOT_ENTITY); return getHibernateTemplate().findByCriteria(criteria); } }