package com.opentravelsoft.providers.hibernate.product;
import java.util.ArrayList;
import java.util.List;
import com.opentravelsoft.util.LabelValueBean;
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.common.KeyParams;
import com.opentravelsoft.entity.Line;
import com.opentravelsoft.entity.LineDescription;
import com.opentravelsoft.providers.hibernate.GenericDaoHibernate;
import com.opentravelsoft.providers.product.LineTraitDao;
import com.opentravelsoft.util.RowDataUtil;
@Repository("RouteTraitDao")
public class LineTraitDaoImpl extends
GenericDaoHibernate<LineDescription, Long> implements LineTraitDao {
public LineTraitDaoImpl() {
super(LineDescription.class);
}
@SuppressWarnings("unchecked")
public List<LineDescription> getLineTrait(String lineNo, String type) {
DetachedCriteria criteria = DetachedCriteria
.forClass(LineDescription.class);
criteria.add(Restrictions.eq("lineNo", lineNo));
criteria.add(Restrictions.eq("type", type));
criteria.addOrder(Order.asc("sortOrder"));
criteria.setResultTransformer(CriteriaSpecification.ROOT_ENTITY);
List<LineDescription> list = getHibernateTemplate()
.findByCriteria(criteria);
int idx = 1;
for (LineDescription lineDescription : list) {
lineDescription.setIdx(idx++);
}
return list;
}
public int saveLineTrait(List<LineDescription> list, String lineNo,
String traitType) {
HibernateTemplate template = getHibernateTemplate();
List<LineDescription> oList = getLineTrait(lineNo, traitType);
for (LineDescription lineDescription : oList) {
boolean has = false;
LineDescription desc = null;
for (int i = 0; i < list.size(); i++) {
desc = list.get(i);
if (desc.getId() == lineDescription.getId()) {
has = true;
break;
}
}
if (has) {
lineDescription.setItem(desc.getItem());
lineDescription.setDescription(desc.getDescription());
template.update(lineDescription);
} else
template.delete(lineDescription);
}
// add
for (int i = 0; i < list.size(); i++) {
LineDescription descs = list.get(i);
if (null == descs.getId())
template.save(descs);
}
return 0;
}
@SuppressWarnings("unchecked")
public List<LineDescription> getExpense(String lineNo) {
StringBuilder sql = new StringBuilder();
sql.append("from LineDescription ");
sql.append("where lineNo=? ");
sql.append("and ( type='" + KeyParams.EBIZ_TYPE_EXPENSE_INC + "' or type='"
+ KeyParams.EBIZ_TYPE_EXPENSE_EXCEPT + "') ");
sql.append("order by sortOrder ");
Object[] params = { lineNo };
List<LineDescription> list = getHibernateTemplate().find(sql.toString(),
params);
List<LineDescription> lineTraitList = new ArrayList<LineDescription>();
LineDescription lineTrait = null;
for (LineDescription ooj : list) {
lineTrait = new LineDescription();
lineTrait.setRouteNo(ooj.getLineNo());
lineTrait.setRefNo(ooj.getRefNo());
lineTrait.setTraitDetail(ooj.getServiceDetail());
lineTrait.setExpenseType(RowDataUtil.getString(ooj.getType()));
lineTraitList.add(lineTrait);
}
return lineTraitList;
}
@SuppressWarnings("unchecked")
public int saveExpense(Line route, List<LineDescription> list) {
StringBuilder sql = new StringBuilder();
sql.append("from LineDescription ");
sql.append("where lineNo=? ");
sql.append("and ( type='" + KeyParams.EBIZ_TYPE_EXPENSE_INC + "' or type='"
+ KeyParams.EBIZ_TYPE_EXPENSE_EXCEPT + "') ");
Object[] params = { route.getLineNo() };
List<LineDescription> lists = getHibernateTemplate().find(sql.toString(),
params);
getHibernateTemplate().deleteAll(lists);
for (LineDescription trait : list) {
LineDescription linetrait = new LineDescription();
linetrait.setLineNo(route.getLineNo());
linetrait.setType(trait.getExpenseType());
linetrait.setSortOrder(trait.getRefNo());
linetrait.setServiceDetail(trait.getTraitDetail());
getHibernateTemplate().save(linetrait);
}
sql = new StringBuilder();
sql.append("from Line where lineNo=? ");
List<Line> listr = getHibernateTemplate().find(sql.toString(), params);
if (listr.size() > 0) {
Line line = listr.get(0);
line.setComOwnExpense(route.getTyOwnExpense());
line.setPerOwnExpense(route.getZkOwnExpense());
getHibernateTemplate().update(line);
}
return 0;
}
@SuppressWarnings("unchecked")
public List<LabelValueBean> getNote(String lineNo, String type) {
StringBuilder sql = new StringBuilder();
sql.append("select lineNo,type,sortOrder,description ");
sql.append("from LineDescription ");
sql.append("where lineNo=? and type=? ");
Object[] ooj = { lineNo, type };
List<Object[]> list = getHibernateTemplate().find(sql.toString(), ooj);
List<LabelValueBean> ret = new ArrayList<LabelValueBean>();
LabelValueBean note = null;
int idx = 1;
for (Object[] obj : list) {
note = new LabelValueBean();
note.setLabel(String.valueOf(idx++));
note.setValue((String) obj[3]);
ret.add(note);
}
return ret;
}
@SuppressWarnings("unchecked")
public List<LineDescription> searchTips(String lineNo) {
StringBuilder sb = new StringBuilder();
sb.append("FROM LineDescription ");
sb.append("where lineNo=? and type='" + KeyParams.EBIZ_TYPE_LINE_TIPS
+ "' ");
Object[] params = { lineNo };
List<LineDescription> list = getHibernateTemplate().find(sb.toString(),
params);
LineDescription tips = null;
List<LineDescription> tipsList = new ArrayList<LineDescription>();
if (list != null && list.size() > 0) {
int i = 1;
for (LineDescription obj : list) {
tips = new LineDescription();
tips.setIdx(i++);
tips.setItem(RowDataUtil.getString(obj.getItem()));
tips.setDescription(RowDataUtil.getString(obj.getDescription()));
tipsList.add(tips);
}
}
return tipsList;
}
}